-
Notifications
You must be signed in to change notification settings - Fork 962
Open
Description
[REQUIRED] Describe your environment
- Operating System version: macOS 12.3
- Browser version: Chrome 100
- Firebase SDK version: 9.6.7
- Firebase Product: auth
[REQUIRED] Describe the problem
As described in https://web.dev/bfcache, the browsers' back/forward cache doesn't work when IndexedDB has an open connection. Currently, connections are opened here and then they're never closed:
firebase-js-sdk/packages/auth/src/platform_browser/persistence/indexed_db.ts
Lines 90 to 94 in cdada6c
export function _openDatabase(): Promise<IDBDatabase> { | |
const request = indexedDB.open(DB_NAME, DB_VERSION); | |
return new Promise((resolve, reject) => { | |
request.addEventListener('error', () => { |
They should be closed (db.close()
) immediately after used or when deleteApp()
is called.
As a workaround, I monkey patched window.indexedDB.open
to keep references to each connection so I can close them on pagehide
so bfcache works:
const open = window.indexedDB.open.bind(window.indexedDB)
const dbs = []
window.indexedDB.open = (...args) => {
const request = open(...args)
request.addEventListener('success', event => {
const db = event.target.result
dbs.push(db)
})
return request
}
window.addEventListener(
'pagehide',
() => {
for (const db of dbs) {
db.close()
}
},
{ capture: true },
)
soc221b, riungemaina and Whip