@@ -19,10 +19,9 @@ import { getGlobal, getUA, isIndexedDBAvailable } from '@firebase/util';
19
19
20
20
import { debugAssert } from '../util/assert' ;
21
21
import { Code , FirestoreError } from '../util/error' ;
22
- import { logDebug , logError , logWarn } from '../util/log' ;
22
+ import { logDebug , logError } from '../util/log' ;
23
23
import { Deferred } from '../util/promise' ;
24
24
25
- import { DatabaseDeletedListener } from './persistence' ;
26
25
import { PersistencePromise } from './persistence_promise' ;
27
26
28
27
// References to `indexedDB` are guarded by SimpleDb.isAvailable() and getGlobal()
@@ -159,7 +158,8 @@ export class SimpleDbTransaction {
159
158
*/
160
159
export class SimpleDb {
161
160
private db ?: IDBDatabase ;
162
- private databaseDeletedListener ?: DatabaseDeletedListener ;
161
+ private lastClosedDbVersion : number | null = null ;
162
+ private versionchangelistener ?: ( event : IDBVersionChangeEvent ) => void ;
163
163
164
164
/** Deletes the specified database. */
165
165
static delete ( name : string ) : Promise < void > {
@@ -365,35 +365,22 @@ export class SimpleDb {
365
365
} ) ;
366
366
}
367
367
368
- this . db . addEventListener (
369
- 'versionchange' ,
370
- event => {
371
- // Notify the listener if another tab attempted to delete the IndexedDb
372
- // database, such as by calling clearIndexedDbPersistence().
373
- if ( event . newVersion === null ) {
374
- logWarn (
375
- `Received "versionchange" event with newVersion===null; ` +
376
- 'notifying the registered DatabaseDeletedListener, if any'
377
- ) ;
378
- this . databaseDeletedListener ?.( ) ;
379
- }
380
- } ,
381
- { passive : true }
382
- ) ;
368
+ if ( this . versionchangelistener ) {
369
+ this . db . onversionchange = event => this . versionchangelistener ! ( event ) ;
370
+ }
383
371
384
372
return this . db ;
385
373
}
386
374
387
- setDatabaseDeletedListener (
388
- databaseDeletedListener : DatabaseDeletedListener
375
+ setVersionChangeListener (
376
+ versionChangeListener : ( event : IDBVersionChangeEvent ) => void
389
377
) : void {
390
- if ( this . databaseDeletedListener ) {
391
- throw new Error (
392
- 'setDatabaseDeletedListener() may only be called once, ' +
393
- 'and it has already been called'
394
- ) ;
378
+ this . versionchangelistener = versionChangeListener ;
379
+ if ( this . db ) {
380
+ this . db . onversionchange = ( event : IDBVersionChangeEvent ) => {
381
+ return versionChangeListener ( event ) ;
382
+ } ;
395
383
}
396
- this . databaseDeletedListener = databaseDeletedListener ;
397
384
}
398
385
399
386
async runTransaction < T > (
0 commit comments