From 26e4800ddf9b4384a083f066f2a396b8e5e6c079 Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Tue, 1 Feb 2022 08:22:34 +0100 Subject: more improvements for abrowser&librewolf --- common/broadcast.js | 2 +- common/indexeddb.js | 43 +++++++++++++++++++++---------------------- 2 files changed, 22 insertions(+), 23 deletions(-) (limited to 'common') diff --git a/common/broadcast.js b/common/broadcast.js index 4fc5237..12b365a 100644 --- a/common/broadcast.js +++ b/common/broadcast.js @@ -119,6 +119,6 @@ function close(conn) { if (conn.type === "sender") flush(conn); - conn.port.disconnect(); + setTimeout(conn.port.disconnect()); } #EXPORT close diff --git a/common/indexeddb.js b/common/indexeddb.js index f916162..bdf71e5 100644 --- a/common/indexeddb.js +++ b/common/indexeddb.js @@ -99,9 +99,25 @@ async function idb_del(transaction, store_name, key) return wait_request(transaction.objectStore(store_name).delete(key)); } +async function perform_upgrade(event) { + const opened_db = event.target.result; + + /* When we move to a new database schema, we will add upgrade logic here. */ + if (event.oldVersion > 0) + throw "bad db version: " + event.oldVersion; + + let store; + for (const [store_name, key_mode] of stores) + store = opened_db.createObjectStore(store_name, key_mode); + + const ctx = make_context(store.transaction, initial_data.files); + await _save_items(initial_data.resources, initial_data.mappings, ctx); + + return opened_db; +} + /* Open haketilo database, asynchronously return an IDBDatabase object. */ -async function get_db() -{ +async function get_db() { if (db) return db; @@ -109,28 +125,11 @@ async function get_db() const waiter = new Promise((...cbs) => [resolve, reject] = cbs); const request = indexedDB.open("haketilo", version_nr(db_version)); - request.onsuccess = resolve; + request.onsuccess = ev => resolve(ev.target.result); request.onerror = ev => reject("db error: " + ev.target.errorCode); - request.onupgradeneeded = resolve; - - const event = await waiter; - const opened_db = event.target.result; + request.onupgradeneeded = ev => perform_upgrade(ev).then(resolve, reject); - if (event instanceof IDBVersionChangeEvent) { - /* - * When we move to a new database schema, we will add upgrade logic - * here. - */ - if (event.oldVersion > 0) - throw "bad db version: " + event.oldVersion; - - let store; - for (const [store_name, key_mode] of stores) - store = opened_db.createObjectStore(store_name, key_mode); - - const ctx = make_context(store.transaction, initial_data.files); - await _save_items(initial_data.resources, initial_data.mappings, ctx); - } + const opened_db = await waiter; if (db) opened_db.close(); -- cgit v1.2.3