forked from mirrors/gecko-dev
147 lines
4.8 KiB
JavaScript
147 lines
4.8 KiB
JavaScript
"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 () {
|
|
browser.test.fail(`Failed with error ${tx.error.message}`);
|
|
// Don't wait for timeout
|
|
browser.test.sendMessage("storage-created");
|
|
};
|
|
};
|
|
request.onerror = function () {
|
|
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 () {
|
|
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 () {
|
|
browser.test.assertEq(
|
|
request.result,
|
|
"foo",
|
|
"Got the expected data"
|
|
);
|
|
browser.test.notifyPass("done");
|
|
};
|
|
request.onerror = function () {
|
|
browser.test.fail(`Failed with error ${request.error.message}`);
|
|
browser.test.notifyFail("done");
|
|
};
|
|
};
|
|
dbRequest.onerror = function () {
|
|
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");
|
|
});
|