diff options
Diffstat (limited to 'dom/cache/test/browser')
-rw-r--r-- | dom/cache/test/browser/browser.ini | 1 | ||||
-rw-r--r-- | dom/cache/test/browser/browser_cache_pb_window.js | 169 |
2 files changed, 170 insertions, 0 deletions
diff --git a/dom/cache/test/browser/browser.ini b/dom/cache/test/browser/browser.ini new file mode 100644 index 0000000000..90a7a53a3a --- /dev/null +++ b/dom/cache/test/browser/browser.ini @@ -0,0 +1 @@ +[browser_cache_pb_window.js] 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..40a6da7005 --- /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); +} |