'use strict'; // Makes sure initial bucket state is as expected and to clean up after the test // is over (whether it passes or fails). async function prepareForBucketTest(test) { // Verify initial state. assert_equals('', (await navigator.storageBuckets.keys()).join()); // Clean up after test. test.add_cleanup(async function() { const keys = await navigator.storageBuckets.keys(); for (const key of keys) { await navigator.storageBuckets.delete(key); } }); } function indexedDbOpenRequest(t, idb, dbname, upgrade_func) { return new Promise((resolve, reject) => { const openRequest = idb.open(dbname); t.add_cleanup(() => { indexedDbDeleteRequest(idb, dbname); }); openRequest.onerror = () => { reject(openRequest.error); }; openRequest.onsuccess = () => { resolve(openRequest.result); }; openRequest.onupgradeneeded = event => { upgrade_func(openRequest.result); }; }); } function indexedDbDeleteRequest(idb, name) { return new Promise((resolve, reject) => { const deleteRequest = idb.deleteDatabase(name); deleteRequest.onerror = () => { reject(deleteRequest.error); }; deleteRequest.onsuccess = () => { resolve(); }; }); } function transactionPromise(txn) { return new Promise((resolve, reject) => { txn.onabort = () => { reject(txn.error); }; txn.oncomplete = () => { resolve(); }; }); }