summaryrefslogtreecommitdiffstats
path: root/dom/cache/test/browser/browser_cache_pb_window.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/cache/test/browser/browser_cache_pb_window.js')
-rw-r--r--dom/cache/test/browser/browser_cache_pb_window.js169
1 files changed, 169 insertions, 0 deletions
diff --git a/dom/cache/test/browser/browser_cache_pb_window.js b/dom/cache/test/browser/browser_cache_pb_window.js
new file mode 100644
index 0000000000..30e59c5e85
--- /dev/null
+++ b/dom/cache/test/browser/browser_cache_pb_window.js
@@ -0,0 +1,169 @@
+/* eslint-disable no-shadow */
+var name = "pb-window-cache";
+
+function testMatch(browser) {
+ return SpecialPowers.spawn(browser, [name], function(name) {
+ return new Promise((resolve, reject) => {
+ content.caches
+ .match("http://foo.com")
+ .then(function(response) {
+ ok(false, "caches.match() should not return success");
+ reject();
+ })
+ .catch(function(err) {
+ is(
+ "SecurityError",
+ err.name,
+ "caches.match() should throw SecurityError"
+ );
+ resolve();
+ });
+ });
+ });
+}
+
+function testHas(browser) {
+ return SpecialPowers.spawn(browser, [name], function(name) {
+ return new Promise(function(resolve, reject) {
+ content.caches
+ .has(name)
+ .then(function(result) {
+ ok(false, "caches.has() should not return success");
+ reject();
+ })
+ .catch(function(err) {
+ is(
+ "SecurityError",
+ err.name,
+ "caches.has() should throw SecurityError"
+ );
+ resolve();
+ });
+ });
+ });
+}
+
+function testOpen(browser) {
+ return SpecialPowers.spawn(browser, [name], function(name) {
+ return new Promise(function(resolve, reject) {
+ content.caches
+ .open(name)
+ .then(function(c) {
+ ok(false, "caches.open() should not return success");
+ reject();
+ })
+ .catch(function(err) {
+ is(
+ "SecurityError",
+ err.name,
+ "caches.open() should throw SecurityError"
+ );
+ resolve();
+ });
+ });
+ });
+}
+
+function testDelete(browser) {
+ return SpecialPowers.spawn(browser, [name], function(name) {
+ return new Promise(function(resolve, reject) {
+ content.caches
+ .delete(name)
+ .then(function(result) {
+ ok(false, "caches.delete() should not return success");
+ reject();
+ })
+ .catch(function(err) {
+ is(
+ "SecurityError",
+ err.name,
+ "caches.delete() should throw SecurityError"
+ );
+ resolve();
+ });
+ });
+ });
+}
+
+function testKeys(browser) {
+ return SpecialPowers.spawn(browser, [name], function(name) {
+ return new Promise(function(resolve, reject) {
+ content.caches
+ .keys()
+ .then(function(names) {
+ ok(false, "caches.keys() should not return success");
+ reject();
+ })
+ .catch(function(err) {
+ is(
+ "SecurityError",
+ err.name,
+ "caches.keys() should throw SecurityError"
+ );
+ resolve();
+ });
+ });
+ });
+}
+
+function testOpen_worker(browser) {
+ return SpecialPowers.spawn(browser, [], function() {
+ let workerFunctionString = function() {
+ caches.open("pb-worker-cache").then(
+ function(cacheObject) {
+ postMessage(cacheObject.toString());
+ },
+ function(reason) {
+ postMessage(reason.name);
+ }
+ );
+ }.toString();
+ let workerBlobURL = content.URL.createObjectURL(
+ new Blob(["(", workerFunctionString, ")()"], {
+ type: "application/javascript",
+ })
+ );
+ let worker = new content.Worker(workerBlobURL);
+ content.URL.revokeObjectURL(workerBlobURL);
+ return new Promise(function(resolve, reject) {
+ worker.addEventListener("message", function(e) {
+ let isGood = e.data === "SecurityError";
+ ok(isGood, "caches.open() should throw SecurityError from worker");
+ isGood ? resolve() : reject();
+ });
+ });
+ });
+}
+
+function test() {
+ let privateWin, privateTab;
+ waitForExplicitFinish();
+ SpecialPowers.pushPrefEnv({
+ set: [
+ ["dom.caches.enabled", true],
+ ["dom.caches.testing.enabled", true],
+ ],
+ })
+ .then(() => {
+ return BrowserTestUtils.openNewBrowserWindow({ private: true });
+ })
+ .then(pw => {
+ privateWin = pw;
+ privateTab = BrowserTestUtils.addTab(pw.gBrowser, "http://example.com/");
+ return BrowserTestUtils.browserLoaded(privateTab.linkedBrowser);
+ })
+ .then(tab => {
+ return Promise.all([
+ testMatch(privateTab.linkedBrowser),
+ testHas(privateTab.linkedBrowser),
+ testOpen(privateTab.linkedBrowser),
+ testDelete(privateTab.linkedBrowser),
+ testKeys(privateTab.linkedBrowser),
+ testOpen_worker(privateTab.linkedBrowser),
+ ]);
+ })
+ .then(() => {
+ return BrowserTestUtils.closeWindow(privateWin);
+ })
+ .then(finish);
+}