From 0534a6b010a9445309f74c23d76da325f3992749 Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Wed, 26 Mar 2025 19:09:00 +0000 Subject: [PATCH 1/2] src/local/simple_db.ts: null out this.db if it closes unexpectedly, so that it does not get used after being closed, which is guaranteed to fail and can cause issues. --- packages/firestore/src/local/simple_db.ts | 29 +++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/firestore/src/local/simple_db.ts b/packages/firestore/src/local/simple_db.ts index 8665136a9f5..fe9bab69ef4 100644 --- a/packages/firestore/src/local/simple_db.ts +++ b/packages/firestore/src/local/simple_db.ts @@ -19,7 +19,7 @@ import { getUA, isIndexedDBAvailable } from '@firebase/util'; import { debugAssert } from '../util/assert'; import { Code, FirestoreError } from '../util/error'; -import { logDebug, logError } from '../util/log'; +import { logDebug, logError, logWarn } from '../util/log'; import { Deferred } from '../util/promise'; import { PersistencePromise } from './persistence_promise'; @@ -359,6 +359,26 @@ export class SimpleDb { }); }; }); + + this.db.addEventListener( + 'close', + () => { + // Null out this.db if the IndexedDb database connection is closed + // unexpectedly, as opposed to being closed via a call to this.close() + // (see dpjg74s26h). Such an unexpected close could occur, for + // example, by a user explicitly clearing the storage for a website in + // a browser. + if (this.db) { + this.db = undefined; + logWarn( + LOG_TAG, + 'Database unexpectedly closed, ' + + 'possibly due to browser data being cleared for this web site' + ); + } + }, + { passive: true } + ); } if (this.versionchangelistener) { @@ -453,10 +473,11 @@ export class SimpleDb { } close(): void { - if (this.db) { - this.db.close(); - } + // Set this.db=undefined before calling this.db.close() so that the "close" + // event listener (see dpjg74s26h) won't log a spurious warning message. + const db = this.db; this.db = undefined; + db?.close(); } } From b97925b95106b189bc6a159f92b6704a31708d6a Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Wed, 26 Mar 2025 19:24:12 +0000 Subject: [PATCH 2/2] changeset added --- .changeset/slow-students-fry.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/slow-students-fry.md diff --git a/.changeset/slow-students-fry.md b/.changeset/slow-students-fry.md new file mode 100644 index 00000000000..3bf0bb25d3d --- /dev/null +++ b/.changeset/slow-students-fry.md @@ -0,0 +1,6 @@ +--- +'@firebase/firestore': patch +'firebase': patch +--- + +Ensure that IndexedDB connections are discarded if they are closed unexpectedly.