firebase / firebase/firebase-js-sdk

IndexedDB connections must be closed so bfcache works

Open
#6,167 9 comments 3 reactions 0 assignees View on GitHub
api: auth api: firestore needs-attention question v9
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.