firestore: minor refactor of listener registration of "versionchange" indexedb events
This PR modifies the SimpleDb class by deleting the setVersionChangeListener() method and replacing it with a new setDatabaseDeletedListener() method. The new method abstracts away the details of IndexedDb events and simply lets the caller get notified of the event in which it is interested, namely, impending or past deletion of the IndexedDb database.
This PR is the first step in a multi-step chain of PRs that will unify the callback for "versionchange" events with newVersion===null and detection of "clear site data" button being pressed in web browsers. The latter logic was added in PR #8871 but was problematic in at least one case (issue #9056). The ultimate goal is to provide an experimental setting with which affected customers can opt out of the drastic response of the Firestore SDK to "close" events on the IndexedDb database when it appears that such an event is in response to the "clear site data" button being clicked, which can result in corruption of the IndexedDb database if ignored.
🦋 Changeset detected
Latest commit: 2d3cd31172ce9a728bf757411755d88d9cd7533a
The changes in this PR will be included in the next version bump.
This PR includes changesets to release 3 packages
| Name | Type |
|---|---|
| @firebase/firestore | Patch |
| firebase | Patch |
| @firebase/firestore-compat | Patch |
Not sure what this means? Click here to learn what changesets are.
Click here if you're a maintainer who wants to add another changeset to this PR
Size Report 1
Affected Products
@firebase/firestoreType Base (b97eab3) Merge (ff8259b) Diff browser 385 kB 386 kB +627 B (+0.2%) main 596 kB 596 kB +510 B (+0.1%) module 385 kB 386 kB +627 B (+0.2%) react-native 386 kB 386 kB +627 B (+0.2%) bundleType Base (b97eab3) Merge (ff8259b) Diff firestore (CSI Auto Indexing Disable and Delete) 280 kB 280 kB +566 B (+0.2%) firestore (CSI Auto Indexing Enable) 280 kB 280 kB +566 B (+0.2%) firestore (Persistence) 311 kB 311 kB +315 B (+0.1%) firestore (Query Cursors) 256 kB 256 kB +251 B (+0.1%) firestore (Query) 254 kB 254 kB +251 B (+0.1%) firestore (Read data once) 242 kB 242 kB +251 B (+0.1%) firestore (Read Write w Persistence) 336 kB 336 kB +566 B (+0.2%) firestore (Realtime updates) 244 kB 244 kB +251 B (+0.1%) firestore (Transaction) 221 kB 221 kB +251 B (+0.1%) firestore (Write data) 220 kB 221 kB +251 B (+0.1%) firebaseType Base (b97eab3) Merge (ff8259b) Diff firebase-compat.js 802 kB 803 kB +548 B (+0.1%) firebase-firestore-compat.js 347 kB 348 kB +548 B (+0.2%) firebase-firestore.js 449 kB 449 kB +627 B (+0.1%)
Test Logs
Size Analysis Report 1
Affected Products
@firebase/firestoreaddDocSize
Type Base (b97eab3) Merge (ff8259b) Diff size 135 kB 135 kB +248 B (+0.2%) size-with-ext-deps 207 kB 207 kB +251 B (+0.1%) clearIndexedDbPersistenceSize
Type Base (b97eab3) Merge (ff8259b) Diff size 25.1 kB 25.6 kB +466 B (+1.9%) size-with-ext-deps 95.5 kB 96.0 kB +468 B (+0.5%) Dependency
Type Base (b97eab3) Merge (ff8259b) Diff functions 16 dependencies
__PRIVATE__fail __PRIVATE_argToString __PRIVATE_checkForAndReportiOSError __PRIVATE_cloneLongPollingOptions __PRIVATE_getAndroidVersion __PRIVATE_getMessageOrStack __PRIVATE_hardAssert __PRIVATE_indexedDbStoragePrefix __PRIVATE_isIndexedDbTransactionError __PRIVATE_logDebug __PRIVATE_logError __PRIVATE_validateIsNotUsedTogether __PRIVATE_wrapRequest clearIndexedDbPersistence fail getDocument
17 dependencies
__PRIVATE__fail __PRIVATE_argToString __PRIVATE_checkForAndReportiOSError __PRIVATE_cloneLongPollingOptions __PRIVATE_getAndroidVersion __PRIVATE_getMessageOrStack __PRIVATE_hardAssert __PRIVATE_indexedDbStoragePrefix __PRIVATE_isIndexedDbTransactionError __PRIVATE_logDebug __PRIVATE_logError __PRIVATE_logWarn __PRIVATE_validateIsNotUsedTogether __PRIVATE_wrapRequest clearIndexedDbPersistence fail getDocument
+ __PRIVATE_logWarndeleteAllPersistentCacheIndexesSize
Type Base (b97eab3) Merge (ff8259b) Diff size 97.3 kB 97.6 kB +248 B (+0.3%) size-with-ext-deps 169 kB 169 kB +251 B (+0.1%) deleteDocSize
Type Base (b97eab3) Merge (ff8259b) Diff size 125 kB 125 kB +248 B (+0.2%) size-with-ext-deps 197 kB 197 kB +251 B (+0.1%) disableNetworkSize
Type Base (b97eab3) Merge (ff8259b) Diff size 113 kB 114 kB +248 B (+0.2%) size-with-ext-deps 185 kB 186 kB +251 B (+0.1%) disablePersistentCacheIndexAutoCreationSize
Type Base (b97eab3) Merge (ff8259b) Diff size 97.3 kB 97.5 kB +248 B (+0.3%) size-with-ext-deps 169 kB 169 kB +251 B (+0.1%) enableIndexedDbPersistenceSize
Type Base (b97eab3) Merge (ff8259b) Diff size 189 kB 190 kB +314 B (+0.2%) size-with-ext-deps 262 kB 262 kB +315 B (+0.1%) enableMultiTabIndexedDbPersistenceSize
Type Base (b97eab3) Merge (ff8259b) Diff size 226 kB 226 kB +314 B (+0.1%) size-with-ext-deps 298 kB 298 kB +315 B (+0.1%) enableNetworkSize
Type Base (b97eab3) Merge (ff8259b) Diff size 113 kB 114 kB +248 B (+0.2%) size-with-ext-deps 185 kB 186 kB +251 B (+0.1%) enablePersistentCacheIndexAutoCreationSize
Type Base (b97eab3) Merge (ff8259b) Diff size 97.3 kB 97.5 kB +248 B (+0.3%) size-with-ext-deps 169 kB 169 kB +251 B (+0.1%) executeWriteSize
Type Base (b97eab3) Merge (ff8259b) Diff size 124 kB 124 kB +248 B (+0.2%) size-with-ext-deps 196 kB 196 kB +251 B (+0.1%) getAggregateFromServerSize
Type Base (b97eab3) Merge (ff8259b) Diff size 121 kB 121 kB +248 B (+0.2%) size-with-ext-deps 193 kB 193 kB +251 B (+0.1%) getCountFromServerSize
Type Base (b97eab3) Merge (ff8259b) Diff size 121 kB 122 kB +248 B (+0.2%) size-with-ext-deps 193 kB 193 kB +251 B (+0.1%) getDocSize
Type Base (b97eab3) Merge (ff8259b) Diff size 156 kB 156 kB +248 B (+0.2%) size-with-ext-deps 228 kB 228 kB +251 B (+0.1%) getDocFromCacheSize
Type Base (b97eab3) Merge (ff8259b) Diff size 105 kB 105 kB +248 B (+0.2%) size-with-ext-deps 177 kB 177 kB +251 B (+0.1%) getDocFromServerSize
Type Base (b97eab3) Merge (ff8259b) Diff size 156 kB 156 kB +248 B (+0.2%) size-with-ext-deps 228 kB 228 kB +251 B (+0.1%) getDocsSize
Type Base (b97eab3) Merge (ff8259b) Diff size 157 kB 158 kB +248 B (+0.2%) size-with-ext-deps 229 kB 230 kB +251 B (+0.1%) getDocsFromCacheSize
Type Base (b97eab3) Merge (ff8259b) Diff size 113 kB 113 kB +248 B (+0.2%) size-with-ext-deps 185 kB 185 kB +251 B (+0.1%) getDocsFromServerSize
Type Base (b97eab3) Merge (ff8259b) Diff size 157 kB 157 kB +248 B (+0.2%) size-with-ext-deps 229 kB 229 kB +251 B (+0.1%) loadBundleSize
Type Base (b97eab3) Merge (ff8259b) Diff size 123 kB 123 kB +248 B (+0.2%) size-with-ext-deps 195 kB 195 kB +251 B (+0.1%) namedQuerySize
Type Base (b97eab3) Merge (ff8259b) Diff size 98.2 kB 98.4 kB +248 B (+0.3%) size-with-ext-deps 170 kB 170 kB +251 B (+0.1%) onSnapshotSize
Type Base (b97eab3) Merge (ff8259b) Diff size 158 kB 158 kB +248 B (+0.2%) size-with-ext-deps 230 kB 230 kB +251 B (+0.1%) onSnapshotsInSyncSize
Type Base (b97eab3) Merge (ff8259b) Diff size 147 kB 147 kB +248 B (+0.2%) size-with-ext-deps 219 kB 219 kB +251 B (+0.1%) persistentLocalCacheSize
Type Base (b97eab3) Merge (ff8259b) Diff size 185 kB 186 kB +314 B (+0.2%) size-with-ext-deps 258 kB 258 kB +315 B (+0.1%) persistentMultipleTabManagerSize
Type Base (b97eab3) Merge (ff8259b) Diff size 221 kB 222 kB +314 B (+0.1%) size-with-ext-deps 293 kB 294 kB +315 B (+0.1%) persistentSingleTabManagerSize
Type Base (b97eab3) Merge (ff8259b) Diff size 185 kB 185 kB +314 B (+0.2%) size-with-ext-deps 257 kB 258 kB +315 B (+0.1%) runTransactionSize
Type Base (b97eab3) Merge (ff8259b) Diff size 135 kB 135 kB +248 B (+0.2%) size-with-ext-deps 207 kB 207 kB +251 B (+0.1%) setDocSize
Type Base (b97eab3) Merge (ff8259b) Diff size 134 kB 134 kB +248 B (+0.2%) size-with-ext-deps 206 kB 206 kB +251 B (+0.1%) setIndexConfigurationSize
Type Base (b97eab3) Merge (ff8259b) Diff size 101 kB 101 kB +248 B (+0.2%) size-with-ext-deps 172 kB 173 kB +251 B (+0.1%) updateDocSize
Type Base (b97eab3) Merge (ff8259b) Diff size 134 kB 135 kB +248 B (+0.2%) size-with-ext-deps 206 kB 207 kB +251 B (+0.1%) waitForPendingWritesSize
Type Base (b97eab3) Merge (ff8259b) Diff size 114 kB 114 kB +248 B (+0.2%) size-with-ext-deps 186 kB 186 kB +251 B (+0.1%) writeBatchSize
Type Base (b97eab3) Merge (ff8259b) Diff size 136 kB 137 kB +248 B (+0.2%) size-with-ext-deps 208 kB 209 kB +251 B (+0.1%)
Test Logs
It looks like
setVersionChangeListenerwas only ever used in the context of db deletion. I wonder if there will be a scenario in the future where an actual version change callback will be needed? If it does happen, we'll just have to bring back thesetVersionChangeListenerfunction.
Yeah for sure. It seems unlikely IMO since it's been this way for years and years! But we can definitely always add it back. Thanks for the review!