@@ -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,11 @@ 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' ;
62
+ import {
63
+ remoteStoreDisableNetwork ,
64
+ remoteStoreEnableNetwork
65
+ } from '../../../src/remote/remote_store' ;
65
66
66
67
const LOG_TAG = 'Firestore' ;
67
68
@@ -157,6 +158,15 @@ export class Firestore
157
158
} ) ;
158
159
return deferred . promise ;
159
160
}
161
+
162
+ _verifyNotTerminated ( ) : void {
163
+ if ( this . _terminated ) {
164
+ throw new FirestoreError (
165
+ Code . FAILED_PRECONDITION ,
166
+ 'The client has already been terminated.'
167
+ ) ;
168
+ }
169
+ }
160
170
}
161
171
162
172
export function initializeFirestore (
@@ -199,17 +209,19 @@ export function enableIndexedDbPersistence(
199
209
// `getOnlineComponentProvider()`
200
210
const settings = firestoreImpl . _getSettings ( ) ;
201
211
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 ( )
212
+ return firestoreImpl . _queue . enqueue ( ( ) =>
213
+ // TODO(firestoreexp): Add forceOwningTab
214
+ setOfflineComponentProvider (
215
+ firestoreImpl ,
216
+ {
217
+ durable : true ,
218
+ synchronizeTabs : false ,
219
+ cacheSizeBytes :
220
+ settings . cacheSizeBytes || LruParams . DEFAULT_CACHE_SIZE_BYTES ,
221
+ forceOwningTab : false
222
+ } ,
223
+ new IndexedDbOfflineComponentProvider ( )
224
+ )
213
225
) ;
214
226
}
215
227
@@ -229,19 +241,20 @@ export function enableMultiTabIndexedDbPersistence(
229
241
const offlineComponentProvider = new MultiTabOfflineComponentProvider (
230
242
onlineComponentProvider
231
243
) ;
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
- ) ;
244
+ return firestoreImpl . _queue . enqueue ( async ( ) => {
245
+ await setOfflineComponentProvider (
246
+ firestoreImpl ,
247
+ {
248
+ durable : true ,
249
+ synchronizeTabs : true ,
250
+ cacheSizeBytes :
251
+ settings . cacheSizeBytes || LruParams . DEFAULT_CACHE_SIZE_BYTES ,
252
+ forceOwningTab : false
253
+ } ,
254
+ offlineComponentProvider
255
+ ) ;
256
+ await setOnlineComponentProvider ( firestoreImpl , onlineComponentProvider ) ;
257
+ } ) ;
245
258
}
246
259
247
260
export function clearIndexedDbPersistence (
@@ -277,43 +290,42 @@ export function waitForPendingWrites(
277
290
firestore : firestore . FirebaseFirestore
278
291
) : Promise < void > {
279
292
const firestoreImpl = cast ( firestore , Firestore ) ;
280
- return getSyncEngine ( firestoreImpl ) . then ( syncEngine =>
281
- enqueueWaitForPendingWrites ( firestoreImpl . _queue , syncEngine )
282
- ) ;
293
+ firestoreImpl . _verifyNotTerminated ( ) ;
294
+
295
+ const deferred = new Deferred < void > ( ) ;
296
+ firestoreImpl . _queue . enqueueAndForget ( async ( ) => {
297
+ const syncEngine = await getSyncEngine ( firestoreImpl ) ;
298
+ return registerPendingWritesCallback ( syncEngine , deferred ) ;
299
+ } ) ;
300
+ return deferred . promise ;
283
301
}
284
302
285
303
export function enableNetwork (
286
304
firestore : firestore . FirebaseFirestore
287
305
) : Promise < void > {
288
306
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
- ) ;
307
+ firestoreImpl . _verifyNotTerminated ( ) ;
308
+
309
+ return firestoreImpl . _queue . enqueue ( async ( ) => {
310
+ const remoteStore = await getRemoteStore ( firestoreImpl ) ;
311
+ const persistence = await getPersistence ( firestoreImpl ) ;
312
+ persistence . setNetworkEnabled ( true ) ;
313
+ return remoteStoreEnableNetwork ( remoteStore ) ;
314
+ } ) ;
300
315
}
301
316
302
317
export function disableNetwork (
303
318
firestore : firestore . FirebaseFirestore
304
319
) : Promise < void > {
305
320
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
- ) ;
321
+ firestoreImpl . _verifyNotTerminated ( ) ;
322
+
323
+ return firestoreImpl . _queue . enqueue ( async ( ) => {
324
+ const remoteStore = await getRemoteStore ( firestoreImpl ) ;
325
+ const persistence = await getPersistence ( firestoreImpl ) ;
326
+ persistence . setNetworkEnabled ( false ) ;
327
+ return remoteStoreDisableNetwork ( remoteStore ) ;
328
+ } ) ;
317
329
}
318
330
319
331
export function terminate (
@@ -325,7 +337,7 @@ export function terminate(
325
337
}
326
338
327
339
function verifyNotInitialized ( firestore : Firestore ) : void {
328
- if ( firestore . _initialized ) {
340
+ if ( firestore . _initialized || firestore . _terminated ) {
329
341
throw new FirestoreError (
330
342
Code . FAILED_PRECONDITION ,
331
343
'Firestore has already been started and persistence can no longer be ' +
0 commit comments