firebase / firebase/firebase-js-sdk
IndexedDB connections must be closed so bfcache works
- Dominant language
- TypeScript
- Stars
- 5.1k
- Forks
- 1k
- Avg merge
- 2d 21h
- Merged PRs (30d)
- 37
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:
https://github.com/firebase/firebase-js-sdk/blob/cdada6c68f9740d13dd6674bcb658e28e68253b6/packages/auth/src/platform_browser/persistence/indexed_db.ts#L90-L94
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:
```js
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 },
)
```
Contributor guide
Assessment
This issue has not been assessed yet.