/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; /* import-globals-from helper-addons.js */ Services.scriptloader.loadSubScript(CHROME_URL_ROOT + "helper-addons.js", this); add_task(async () => { const EXTENSION_NAME = "temporary-web-extension"; const EXTENSION_ID = "test-devtools@mozilla.org"; await enableExtensionDebugging(); const { document, tab, window } = await openAboutDebugging(); await selectThisFirefoxPage(document, window.AboutDebugging.store); const { extension } = await installTemporaryExtensionFromXPI( { background() { const open = indexedDB.open("TestDatabase", 1); open.onupgradeneeded = function () { const db = open.result; db.createObjectStore("TestStore", { keyPath: "id" }); }; open.onsuccess = function () { const db = open.result; const tx = db.transaction("TestStore", "readwrite"); const store = tx.objectStore("TestStore"); store.put({ id: 1, name: "John", age: 12 }); store.put({ id: 2, name: "Bob", age: 24 }); tx.oncomplete = () => db.close(); }; }, id: EXTENSION_ID, name: EXTENSION_NAME, }, document ); const { devtoolsWindow } = await openAboutDevtoolsToolbox( document, tab, window, EXTENSION_NAME ); info("Select the storage panel"); const toolbox = getToolbox(devtoolsWindow); await toolbox.selectTool("storage"); const storage = toolbox.getCurrentPanel(); info("Check the content of the storage panel treeview"); const ids = [ "indexedDB", `moz-extension://${extension.uuid}`, "TestDatabase (default)", "TestStore", ]; ok( !!storage.panelWindow.document.querySelector( `[data-id='${JSON.stringify(ids)}']` ), "The indexedDB database for the extension is visible" ); info("Select the indexedDB database for the extension"); const updated = storage.UI.once("store-objects-updated"); storage.UI.tree.selectedItem = ids; await updated; info("Wait until table populated"); await waitUntil(() => storage.UI.table.items.size === 2); const items = storage.UI.table.items; info("Check the content of the storage panel table"); is(items.size, 2); const user1 = JSON.parse(items.get(1).value); const user2 = JSON.parse(items.get(2).value); is(user1.name, "John", "user 1 has the expected name"); is(user1.age, 12, "user 1 has the expected age"); is(user2.name, "Bob", "user 2 has the expected name"); is(user2.age, 24, "user 2 has the expected age"); await closeWebExtAboutDevtoolsToolbox(devtoolsWindow, window); await removeTemporaryExtension(EXTENSION_NAME, document); await removeTab(tab); });