From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- .../test/xpcshell/test_ext_indexedDB_principal.js | 147 +++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 toolkit/components/extensions/test/xpcshell/test_ext_indexedDB_principal.js (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_indexedDB_principal.js') diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_indexedDB_principal.js b/toolkit/components/extensions/test/xpcshell/test_ext_indexedDB_principal.js new file mode 100644 index 0000000000..f355b1d43a --- /dev/null +++ b/toolkit/components/extensions/test/xpcshell/test_ext_indexedDB_principal.js @@ -0,0 +1,147 @@ +"use strict"; + +AddonTestUtils.init(this); +AddonTestUtils.createAppInfo( + "xpcshell@tests.mozilla.org", + "XPCShell", + "1", + "42" +); + +add_task(async function test_indexedDB_principal() { + Services.prefs.setBoolPref("privacy.firstparty.isolate", true); + + await AddonTestUtils.promiseStartupManager(); + + let extension = ExtensionTestUtils.loadExtension({ + useAddonManager: "temporary", + manifest: {}, + async background() { + browser.test.onMessage.addListener(async msg => { + if (msg == "create-storage") { + let request = window.indexedDB.open("TestDatabase"); + request.onupgradeneeded = function (e) { + let db = e.target.result; + db.createObjectStore("TestStore"); + }; + request.onsuccess = function (e) { + let db = e.target.result; + let tx = db.transaction("TestStore", "readwrite"); + let store = tx.objectStore("TestStore"); + tx.oncomplete = () => browser.test.sendMessage("storage-created"); + store.add("foo", "bar"); + tx.onerror = function (e) { + browser.test.fail(`Failed with error ${tx.error.message}`); + // Don't wait for timeout + browser.test.sendMessage("storage-created"); + }; + }; + request.onerror = function (e) { + browser.test.fail(`Failed with error ${request.error.message}`); + // Don't wait for timeout + browser.test.sendMessage("storage-created"); + }; + return; + } + if (msg == "check-storage") { + let dbRequest = window.indexedDB.open("TestDatabase"); + dbRequest.onupgradeneeded = function () { + browser.test.fail("Database should exist"); + browser.test.notifyFail("done"); + }; + dbRequest.onsuccess = function (e) { + let db = e.target.result; + let transaction = db.transaction("TestStore"); + transaction.onerror = function (e) { + browser.test.fail( + `Failed with error ${transaction.error.message}` + ); + browser.test.notifyFail("done"); + }; + let objectStore = transaction.objectStore("TestStore"); + let request = objectStore.get("bar"); + request.onsuccess = function (event) { + browser.test.assertEq( + request.result, + "foo", + "Got the expected data" + ); + browser.test.notifyPass("done"); + }; + request.onerror = function (e) { + browser.test.fail(`Failed with error ${request.error.message}`); + browser.test.notifyFail("done"); + }; + }; + dbRequest.onerror = function (e) { + browser.test.fail(`Failed with error ${dbRequest.error.message}`); + browser.test.notifyFail("done"); + }; + } + }); + }, + }); + + await extension.startup(); + extension.sendMessage("create-storage"); + await extension.awaitMessage("storage-created"); + + await extension.addon.disable(); + + Services.prefs.setBoolPref("privacy.firstparty.isolate", false); + + await extension.addon.enable(); + await extension.awaitStartup(); + + extension.sendMessage("check-storage"); + await extension.awaitFinish("done"); + + await extension.unload(); + Services.prefs.clearUserPref("privacy.firstparty.isolate"); +}); + +add_task(async function test_indexedDB_ext_privateBrowsing() { + Services.prefs.setBoolPref("dom.indexedDB.privateBrowsing.enabled", true); + + let extension = ExtensionTestUtils.loadExtension({ + useAddonManager: "temporary", + incognitoOverride: "spanning", + files: { + "extpage.html": ``, + "extpage.js": async function () { + try { + const request = window.indexedDB.open("TestDatabasePrivateBrowsing"); + await new Promise((resolve, reject) => { + request.onupgradeneeded = resolve; + request.onsuccess = resolve; + request.onerror = () => { + reject(request.error); + }; + }); + browser.test.notifyFail("indexedDB-expect-error-on-open"); + } catch (err) { + browser.test.assertEq( + "InvalidStateError", + err.name, + "Expect an error raised on openeing indexedDB" + ); + browser.test.notifyPass("indexedDB-expect-error-on-open"); + } + }, + }, + }); + + await extension.startup(); + + const page = await ExtensionTestUtils.loadContentPage( + extension.extension.baseURI.resolve("extpage.html"), + { privateBrowsing: true } + ); + + await extension.awaitFinish("indexedDB-expect-error-on-open"); + + await page.close(); + await extension.unload(); + + Services.prefs.clearUserPref("dom.indexedDB.privateBrowsing.enabled"); +}); -- cgit v1.2.3