browser_cache_pb_window.js (4091B)
1 /* eslint-disable no-shadow */ 2 var name = "pb-window-cache"; 3 4 function testMatch(browser) { 5 return SpecialPowers.spawn(browser, [name], function () { 6 return new Promise((resolve, reject) => { 7 content.caches 8 .match("http://foo.com") 9 .then(function () { 10 ok(true, "caches.match() should be successful"); 11 resolve(); 12 }) 13 .catch(function () { 14 ok(false, "caches.match() should not throw error"); 15 reject(); 16 }); 17 }); 18 }); 19 } 20 21 function testHas(browser) { 22 return SpecialPowers.spawn(browser, [name], function (name) { 23 return new Promise(function (resolve, reject) { 24 content.caches 25 .has(name) 26 .then(function () { 27 ok(true, "caches.has() should be successful"); 28 resolve(); 29 }) 30 .catch(function () { 31 ok(false, "caches.has() should not throw error"); 32 reject(); 33 }); 34 }); 35 }); 36 } 37 38 function testOpen(browser) { 39 return SpecialPowers.spawn(browser, [name], function (name) { 40 return new Promise(function (resolve, reject) { 41 content.caches 42 .open(name) 43 .then(function () { 44 ok(true, "caches.open() should be successful"); 45 resolve(); 46 }) 47 .catch(function () { 48 ok(false, "caches.open() should not throw error"); 49 reject(); 50 }); 51 }); 52 }); 53 } 54 55 function testDelete(browser) { 56 return SpecialPowers.spawn(browser, [name], function (name) { 57 return new Promise(function (resolve, reject) { 58 content.caches 59 .delete(name) 60 .then(function () { 61 ok(true, "caches.delete() should be successful"); 62 resolve(); 63 }) 64 .catch(function () { 65 ok(false, "caches.delete should not throw error"); 66 reject(); 67 }); 68 }); 69 }); 70 } 71 72 function testKeys(browser) { 73 return SpecialPowers.spawn(browser, [name], function () { 74 return new Promise(function (resolve, reject) { 75 content.caches 76 .keys() 77 .then(function () { 78 ok(true, "caches.keys() should be successful"); 79 resolve(); 80 }) 81 .catch(function () { 82 ok(false, "caches.keys should not throw error"); 83 reject(); 84 }); 85 }); 86 }); 87 } 88 89 function testOpen_worker(browser) { 90 return SpecialPowers.spawn(browser, [], function () { 91 let workerFunctionString = function () { 92 caches.open("pb-worker-cache").then( 93 function (cacheObject) { 94 postMessage(cacheObject.toString()); 95 }, 96 function (reason) { 97 postMessage(reason.name); 98 } 99 ); 100 }.toString(); 101 let workerBlobURL = content.URL.createObjectURL( 102 new Blob(["(", workerFunctionString, ")()"], { 103 type: "application/javascript", 104 }) 105 ); 106 let worker = new content.Worker(workerBlobURL); 107 content.URL.revokeObjectURL(workerBlobURL); 108 return new Promise(function (resolve, reject) { 109 worker.addEventListener("message", function (e) { 110 let isGood = e.data != "SecurityError"; 111 ok(isGood, "caches.open() should be successful from worker"); 112 isGood ? resolve() : reject(); 113 }); 114 }); 115 }); 116 } 117 118 function test() { 119 let privateWin, privateTab; 120 waitForExplicitFinish(); 121 SpecialPowers.pushPrefEnv({ 122 set: [["dom.caches.testing.enabled", true]], 123 }) 124 .then(() => { 125 return BrowserTestUtils.openNewBrowserWindow({ private: true }); 126 }) 127 .then(pw => { 128 privateWin = pw; 129 privateTab = BrowserTestUtils.addTab(pw.gBrowser, "http://example.com/"); 130 return BrowserTestUtils.browserLoaded(privateTab.linkedBrowser); 131 }) 132 .then(() => { 133 return Promise.all([ 134 testMatch(privateTab.linkedBrowser), 135 testHas(privateTab.linkedBrowser), 136 testOpen(privateTab.linkedBrowser), 137 testDelete(privateTab.linkedBrowser), 138 testKeys(privateTab.linkedBrowser), 139 testOpen_worker(privateTab.linkedBrowser), 140 ]); 141 }) 142 .then(() => { 143 return BrowserTestUtils.closeWindow(privateWin); 144 }) 145 .then(finish); 146 }