@@ -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