@@ -19,10 +19,9 @@ import { getGlobal, getUA, isIndexedDBAvailable } from '@firebase/util';
1919
2020import { debugAssert } from '../util/assert' ;
2121import { Code , FirestoreError } from '../util/error' ;
22- import { logDebug , logError , logWarn } from '../util/log' ;
22+ import { logDebug , logError } from '../util/log' ;
2323import { Deferred } from '../util/promise' ;
2424
25- import { DatabaseDeletedListener } from './persistence' ;
2625import { PersistencePromise } from './persistence_promise' ;
2726
2827// References to `indexedDB` are guarded by SimpleDb.isAvailable() and getGlobal()
@@ -159,7 +158,8 @@ export class SimpleDbTransaction {
159158 */
160159export class SimpleDb {
161160 private db ?: IDBDatabase ;
162- private databaseDeletedListener ?: DatabaseDeletedListener ;
161+ private lastClosedDbVersion : number | null = null ;
162+ private versionchangelistener ?: ( event : IDBVersionChangeEvent ) => void ;
163163
164164 /** Deletes the specified database. */
165165 static delete ( name : string ) : Promise < void > {
@@ -365,35 +365,22 @@ export class SimpleDb {
365365 } ) ;
366366 }
367367
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+ }
383371
384372 return this . db ;
385373 }
386374
387- setDatabaseDeletedListener (
388- databaseDeletedListener : DatabaseDeletedListener
375+ setVersionChangeListener (
376+ versionChangeListener : ( event : IDBVersionChangeEvent ) => void
389377 ) : 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+ } ;
395383 }
396- this . databaseDeletedListener = databaseDeletedListener ;
397384 }
398385
399386 async runTransaction < T > (
0 commit comments