summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_indexedDB_principal.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_indexedDB_principal.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_indexedDB_principal.js147
1 files changed, 147 insertions, 0 deletions
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": `<!DOCTYPE><script src="extpage.js"></script>`,
+ "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");
+});