@@ -22,11 +22,7 @@ import { _FirebaseService, FirebaseApp } from '@firebase/app-types-exp';
22
22
import { Provider } from '@firebase/component' ;
23
23
24
24
import { FirebaseAuthInternalName } from '@firebase/auth-interop-types' ;
25
- import {
26
- enqueueNetworkEnabled ,
27
- enqueueWaitForPendingWrites ,
28
- MAX_CONCURRENT_LIMBO_RESOLUTIONS
29
- } from '../../../src/core/firestore_client' ;
25
+ import { MAX_CONCURRENT_LIMBO_RESOLUTIONS } from '../../../src/core/firestore_client' ;
30
26
import {
31
27
AsyncQueue ,
32
28
wrapInUserErrorIfRecoverable
@@ -62,6 +58,7 @@ import { AutoId } from '../../../src/util/misc';
62
58
import { User } from '../../../src/auth/user' ;
63
59
import { CredentialChangeListener } from '../../../src/api/credentials' ;
64
60
import { logDebug } from '../../../src/util/log' ;
61
+ import { registerPendingWritesCallback } from '../../../src/core/sync_engine' ;
65
62
66
63
const LOG_TAG = 'Firestore' ;
67
64
@@ -157,6 +154,15 @@ export class Firestore
157
154
} ) ;
158
155
return deferred . promise ;
159
156
}
157
+
158
+ _verifyNotTerminated ( ) : void {
159
+ if ( this . _terminated ) {
160
+ throw new FirestoreError (
161
+ Code . FAILED_PRECONDITION ,
162
+ 'The client has already been terminated.'
163
+ ) ;
164
+ }
165
+ }
160
166
}
161
167
162
168
export function initializeFirestore (
@@ -199,17 +205,19 @@ export function enableIndexedDbPersistence(
199
205
// `getOnlineComponentProvider()`
200
206
const settings = firestoreImpl . _getSettings ( ) ;
201
207
202
- // TODO(firestoreexp): Add forceOwningTab
203
- return setOfflineComponentProvider (
204
- firestoreImpl ,
205
- {
206
- durable : true ,
207
- synchronizeTabs : false ,
208
- cacheSizeBytes :
209
- settings . cacheSizeBytes || LruParams . DEFAULT_CACHE_SIZE_BYTES ,
210
- forceOwningTab : false
211
- } ,
212
- new IndexedDbOfflineComponentProvider ( )
208
+ return firestoreImpl . _queue . enqueue ( ( ) =>
209
+ // TODO(firestoreexp): Add forceOwningTab
210
+ setOfflineComponentProvider (
211
+ firestoreImpl ,
212
+ {
213
+ durable : true ,
214
+ synchronizeTabs : false ,
215
+ cacheSizeBytes :
216
+ settings . cacheSizeBytes || LruParams . DEFAULT_CACHE_SIZE_BYTES ,
217
+ forceOwningTab : false
218
+ } ,
219
+ new IndexedDbOfflineComponentProvider ( )
220
+ )
213
221
) ;
214
222
}
215
223
@@ -229,19 +237,20 @@ export function enableMultiTabIndexedDbPersistence(
229
237
const offlineComponentProvider = new MultiTabOfflineComponentProvider (
230
238
onlineComponentProvider
231
239
) ;
232
- return setOfflineComponentProvider (
233
- firestoreImpl ,
234
- {
235
- durable : true ,
236
- synchronizeTabs : true ,
237
- cacheSizeBytes :
238
- settings . cacheSizeBytes || LruParams . DEFAULT_CACHE_SIZE_BYTES ,
239
- forceOwningTab : false
240
- } ,
241
- offlineComponentProvider
242
- ) . then ( ( ) =>
243
- setOnlineComponentProvider ( firestoreImpl , onlineComponentProvider )
244
- ) ;
240
+ return firestoreImpl . _queue . enqueue ( async ( ) => {
241
+ await setOfflineComponentProvider (
242
+ firestoreImpl ,
243
+ {
244
+ durable : true ,
245
+ synchronizeTabs : true ,
246
+ cacheSizeBytes :
247
+ settings . cacheSizeBytes || LruParams . DEFAULT_CACHE_SIZE_BYTES ,
248
+ forceOwningTab : false
249
+ } ,
250
+ offlineComponentProvider
251
+ ) ;
252
+ await setOnlineComponentProvider ( firestoreImpl , onlineComponentProvider ) ;
253
+ } ) ;
245
254
}
246
255
247
256
export function clearIndexedDbPersistence (
@@ -277,43 +286,42 @@ export function waitForPendingWrites(
277
286
firestore : firestore . FirebaseFirestore
278
287
) : Promise < void > {
279
288
const firestoreImpl = cast ( firestore , Firestore ) ;
280
- return getSyncEngine ( firestoreImpl ) . then ( syncEngine =>
281
- enqueueWaitForPendingWrites ( firestoreImpl . _queue , syncEngine )
282
- ) ;
289
+ firestoreImpl . _verifyNotTerminated ( ) ;
290
+
291
+ const deferred = new Deferred < void > ( ) ;
292
+ firestoreImpl . _queue . enqueueAndForget ( async ( ) => {
293
+ const syncEngine = await getSyncEngine ( firestoreImpl ) ;
294
+ return registerPendingWritesCallback ( syncEngine , deferred ) ;
295
+ } ) ;
296
+ return deferred . promise ;
283
297
}
284
298
285
299
export function enableNetwork (
286
300
firestore : firestore . FirebaseFirestore
287
301
) : Promise < void > {
288
302
const firestoreImpl = cast ( firestore , Firestore ) ;
289
- return Promise . all ( [
290
- getRemoteStore ( firestoreImpl ) ,
291
- getPersistence ( firestoreImpl )
292
- ] ) . then ( ( [ remoteStore , persistence ] ) =>
293
- enqueueNetworkEnabled (
294
- firestoreImpl . _queue ,
295
- remoteStore ,
296
- persistence ,
297
- /* enabled= */ true
298
- )
299
- ) ;
303
+ firestoreImpl . _verifyNotTerminated ( ) ;
304
+
305
+ return firestoreImpl . _queue . enqueue ( async ( ) => {
306
+ const remoteStore = await getRemoteStore ( firestoreImpl ) ;
307
+ const persistence = await getPersistence ( firestoreImpl ) ;
308
+ persistence . setNetworkEnabled ( true ) ;
309
+ return remoteStore . enableNetwork ( ) ;
310
+ } ) ;
300
311
}
301
312
302
313
export function disableNetwork (
303
314
firestore : firestore . FirebaseFirestore
304
315
) : Promise < void > {
305
316
const firestoreImpl = cast ( firestore , Firestore ) ;
306
- return Promise . all ( [
307
- getRemoteStore ( firestoreImpl ) ,
308
- getPersistence ( firestoreImpl )
309
- ] ) . then ( ( [ remoteStore , persistence ] ) =>
310
- enqueueNetworkEnabled (
311
- firestoreImpl . _queue ,
312
- remoteStore ,
313
- persistence ,
314
- /* enabled= */ false
315
- )
316
- ) ;
317
+ firestoreImpl . _verifyNotTerminated ( ) ;
318
+
319
+ return firestoreImpl . _queue . enqueue ( async ( ) => {
320
+ const remoteStore = await getRemoteStore ( firestoreImpl ) ;
321
+ const persistence = await getPersistence ( firestoreImpl ) ;
322
+ persistence . setNetworkEnabled ( false ) ;
323
+ return remoteStore . disableNetwork ( ) ;
324
+ } ) ;
317
325
}
318
326
319
327
export function terminate (
@@ -325,7 +333,7 @@ export function terminate(
325
333
}
326
334
327
335
function verifyNotInitialized ( firestore : Firestore ) : void {
328
- if ( firestore . _initialized ) {
336
+ if ( firestore . _initialized || firestore . _terminated ) {
329
337
throw new FirestoreError (
330
338
Code . FAILED_PRECONDITION ,
331
339
'Firestore has already been started and persistence can no longer be ' +
0 commit comments