tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }