diff options
author | Florian Dold <florian@dold.me> | 2021-02-22 20:49:36 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2021-02-22 20:49:36 +0100 |
commit | f0d820d8c6492cc490e4128f744544999933146b (patch) | |
tree | 87b9361cba6f469e48b912804d076f8940a13736 /packages/idb-bridge/src/bridge-idb.ts | |
parent | 3eced74a88de43ab9afe542fcce20a8db8e3fe60 (diff) | |
download | wallet-core-f0d820d8c6492cc490e4128f744544999933146b.tar.xz |
idb: fix 'prevunique' iteration and other bugs
Diffstat (limited to 'packages/idb-bridge/src/bridge-idb.ts')
-rw-r--r-- | packages/idb-bridge/src/bridge-idb.ts | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/packages/idb-bridge/src/bridge-idb.ts b/packages/idb-bridge/src/bridge-idb.ts index ceba618db..02fca9d1e 100644 --- a/packages/idb-bridge/src/bridge-idb.ts +++ b/packages/idb-bridge/src/bridge-idb.ts @@ -702,7 +702,8 @@ export class BridgeIDBDatabase extends FakeEventTarget implements IDBDatabase { this._transactions.push(tx); queueTask(() => { - console.log("TRACE: calling auto-commit", this._getReadableName()); + BridgeIDBFactory.enableTracing && + console.log("TRACE: calling auto-commit", this._getReadableName()); tx._start(); }); if (BridgeIDBFactory.enableTracing) { @@ -941,7 +942,24 @@ export class BridgeIDBFactory { // We re-use the same transaction (as per spec) here. transaction._active = true; - if (transaction._aborted) { + + if (db._closed || db._closePending) { + request.result = undefined; + request.error = new AbortError(); + request.readyState = "done"; + const event2 = new FakeEvent("error", { + bubbles: false, + cancelable: false, + }); + event2.eventPath = []; + request.dispatchEvent(event2); + } else if (transaction._aborted) { + try { + await db._backend.close(db._backendConnection); + } catch (e) { + console.error("failed to close database"); + } + request.result = undefined; request.error = new AbortError(); request.readyState = "done"; @@ -951,6 +969,7 @@ export class BridgeIDBFactory { }); event2.eventPath = []; request.dispatchEvent(event2); + } else { if (BridgeIDBFactory.enableTracing) { console.log("dispatching 'success' event for opening db"); @@ -2361,6 +2380,9 @@ export class BridgeIDBTransaction // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-fire-an-error-event this._active = true; + queueTask(() => { + this._active = false; + }); event = new FakeEvent("error", { bubbles: true, cancelable: true, |