diff --git a/packages-exp/auth-exp/src/platform_browser/persistence/indexed_db.ts b/packages-exp/auth-exp/src/platform_browser/persistence/indexed_db.ts index 2fcef8d44a..5a473205f2 100644 --- a/packages-exp/auth-exp/src/platform_browser/persistence/indexed_db.ts +++ b/packages-exp/auth-exp/src/platform_browser/persistence/indexed_db.ts @@ -113,8 +113,10 @@ export function _openDatabase(): Promise { // https://github.com/firebase/firebase-js-sdk/issues/634 if (!db.objectStoreNames.contains(DB_OBJECTSTORE_NAME)) { + // Need to close the database or else you get a `blocked` event + db.close(); await _deleteDatabase(); - return _openDatabase(); + resolve(await _openDatabase()); } else { resolve(db); } diff --git a/packages-exp/auth-exp/test/integration/webdriver/persistence.test.ts b/packages-exp/auth-exp/test/integration/webdriver/persistence.test.ts index 7f9b97129f..8014333aa2 100644 --- a/packages-exp/auth-exp/test/integration/webdriver/persistence.test.ts +++ b/packages-exp/auth-exp/test/integration/webdriver/persistence.test.ts @@ -47,7 +47,7 @@ async function testPersistedUser() { }; } -browserDescribe('WebDriver persistence test', driver => { +browserDescribe('WebDriver persistence test', (driver, browser) => { const fullPersistenceKey = `firebase:authUser:${API_KEY}:[DEFAULT]`; context('default persistence hierarchy (indexedDB > localStorage)', () => { it('stores user in indexedDB by default', async () => { @@ -381,6 +381,12 @@ browserDescribe('WebDriver persistence test', driver => { }); it('stays logged in when switching from legacy SDK and then back (no indexedDB support)', async () => { + // Skip this test if running in Firefox. The Legacy SDK incorrectly + // implements the db delete + reopen workaround for Firefox. + if (browser === 'firefox') { + return; + } + await driver.webDriver.navigate().refresh(); // Simulate browsers that do not support indexedDB. await driver.webDriver.executeScript('delete window.indexedDB'); diff --git a/packages-exp/auth-exp/test/integration/webdriver/util/test_runner.ts b/packages-exp/auth-exp/test/integration/webdriver/util/test_runner.ts index e84b248acc..10e711ed87 100644 --- a/packages-exp/auth-exp/test/integration/webdriver/util/test_runner.ts +++ b/packages-exp/auth-exp/test/integration/webdriver/util/test_runner.ts @@ -31,7 +31,7 @@ import { AuthDriver } from './auth_driver'; */ interface TempSuite { - generator: (driver: AuthDriver) => void; + generator: (driver: AuthDriver, browser: string) => void; title: string; } @@ -45,7 +45,7 @@ const SUITES: TempSuite[] = []; /** Main entry point for all WebDriver tests */ export function browserDescribe( title: string, - generator: (driver: AuthDriver) => void + generator: (driver: AuthDriver, browser: string) => void ): void { SUITES.push({ title, @@ -75,7 +75,7 @@ setTimeout(() => { }); for (const { title, generator } of SUITES) { - describe(title, () => generator(DRIVER)); + describe(title, () => generator(DRIVER, browser)); } }); }