tor-browser

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

browser_origin_trial_coep_credentialless_cache.js (3561B)


      1 const TOP_LEVEL_URL =
      2  getRootDirectory(gTestPath).replace(
      3    "chrome://mochitests/content",
      4    "https://example.com"
      5  ) + "open_credentialless_document.sjs";
      6 
      7 const SAME_ORIGIN = "https://example.com";
      8 const CROSS_ORIGIN = "https://test1.example.com";
      9 
     10 const RESOURCE_URL =
     11  getRootDirectory(gTestPath).replace(
     12    "chrome://mochitests/content",
     13    "https://test1.example.com"
     14  ) + "credentialless_resource.sjs";
     15 
     16 async function store(storer, url, requestCredentialMode) {
     17  await SpecialPowers.spawn(
     18    storer.linkedBrowser,
     19    [url, requestCredentialMode],
     20    async function (url, requestCredentialMode) {
     21      const cache = await content.caches.open("v1");
     22      const fetchRequest = new content.Request(url, {
     23        mode: "no-cors",
     24        credentials: requestCredentialMode,
     25      });
     26 
     27      const fetchResponse = await content.fetch(fetchRequest);
     28      content.wrappedJSObject.console.log(fetchResponse.headers);
     29      await cache.put(fetchRequest, fetchResponse);
     30    }
     31  );
     32 }
     33 
     34 async function retrieve(retriever, resourceURL) {
     35  return await SpecialPowers.spawn(
     36    retriever.linkedBrowser,
     37    [resourceURL],
     38    async function (url) {
     39      const cache = await content.caches.open("v1");
     40      try {
     41        await cache.match(url);
     42        return "retrieved";
     43      } catch (error) {
     44        return "error";
     45      }
     46    }
     47  );
     48 }
     49 
     50 async function testCache(
     51  storer,
     52  storeRequestCredentialMode,
     53  resourceCOEP,
     54  retriever,
     55  expectation
     56 ) {
     57  const resourceURL = RESOURCE_URL + "?" + resourceCOEP;
     58 
     59  await store(storer, resourceURL, storeRequestCredentialMode);
     60  const result = await retrieve(retriever, resourceURL);
     61 
     62  is(result, expectation);
     63 }
     64 
     65 add_task(async function () {
     66  await SpecialPowers.pushPrefEnv({
     67    set: [
     68      ["browser.tabs.remote.coep.credentialless", false],
     69      ["dom.origin-trials.enabled", true],
     70      ["dom.origin-trials.test-key.enabled", true],
     71    ],
     72  });
     73 
     74  const noneTab = await BrowserTestUtils.openNewForegroundTab(
     75    gBrowser,
     76    TOP_LEVEL_URL
     77  );
     78  const requireCorpTab = await BrowserTestUtils.openNewForegroundTab(
     79    gBrowser,
     80    TOP_LEVEL_URL + "?requirecorp"
     81  );
     82  const credentiallessTab = await BrowserTestUtils.openNewForegroundTab(
     83    gBrowser,
     84    TOP_LEVEL_URL + "?credentialless"
     85  );
     86 
     87  await testCache(noneTab, "include", "", noneTab, "retrieved");
     88  await testCache(noneTab, "include", "", credentiallessTab, "error");
     89  await testCache(noneTab, "omit", "", credentiallessTab, "retrieved");
     90  await testCache(
     91    noneTab,
     92    "include",
     93    "corp_cross_origin",
     94    credentiallessTab,
     95    "retrieved"
     96  );
     97  await testCache(noneTab, "include", "", requireCorpTab, "error");
     98  await testCache(
     99    noneTab,
    100    "include",
    101    "corp_cross_origin",
    102    requireCorpTab,
    103    "retrieved"
    104  );
    105  await testCache(credentiallessTab, "include", "", noneTab, "retrieved");
    106  await testCache(
    107    credentiallessTab,
    108    "include",
    109    "",
    110    credentiallessTab,
    111    "retrieved"
    112  );
    113  await testCache(credentiallessTab, "include", "", requireCorpTab, "error");
    114  await testCache(
    115    requireCorpTab,
    116    "include",
    117    "corp_cross_origin",
    118    noneTab,
    119    "retrieved"
    120  );
    121  await testCache(
    122    requireCorpTab,
    123    "include",
    124    "corp_cross_origin",
    125    credentiallessTab,
    126    "retrieved"
    127  );
    128  await testCache(
    129    requireCorpTab,
    130    "include",
    131    "corp_cross_origin",
    132    requireCorpTab,
    133    "retrieved"
    134  );
    135 
    136  await BrowserTestUtils.removeTab(noneTab);
    137  await BrowserTestUtils.removeTab(requireCorpTab);
    138  await BrowserTestUtils.removeTab(credentiallessTab);
    139 });