tor-browser

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

credentialless-cache-storage-from-none.https.tentative.window.js (3476B)


      1 // META: timeout=long
      2 // META: variant=?document
      3 // META: variant=?dedicated_worker
      4 // META: variant=?shared_worker
      5 // META: variant=?service_worker
      6 // META: script=/common/get-host-info.sub.js
      7 // META: script=/common/utils.js
      8 // META: script=/common/dispatcher/dispatcher.js
      9 // META: script=/service-workers/service-worker/resources/test-helpers.sub.js
     10 // META: script=./resources/common.js
     11 
     12 // Fetch a resource and store it into CacheStorage from |storer| context. Then
     13 // check if it can be retrieved via CacheStorage.match from |retriever| context.
     14 const cacheStorageTest = (
     15  description,
     16  dip_storer,
     17  dip_retriever,
     18  resource_headers,
     19  request_credential_mode,
     20  expectation
     21 ) => {
     22  promise_test(async test => {
     23    const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN;
     24    const resource_url = cross_origin + "/common/square.png?pipe=" + resource_headers;
     25 
     26    // Create the storer and retriever contexts.
     27    const storage_token = await getTokenFromEnvironment(test, environment, dip_storer);
     28    const storage_context = new RemoteContext(storage_token);
     29    const retriever_token = await getTokenFromEnvironment(test, environment, dip_retriever);
     30    const retriever_context = new RemoteContext(retriever_token);
     31 
     32    // Fetch a request from the storer. Store the opaque response into
     33    // CacheStorage.
     34    const stored = await storage_context.execute_script(
     35      async (url, credential_mode) => {
     36        const cache = await caches.open('v1');
     37        const fetch_request = new Request(url, {
     38          mode: 'no-cors',
     39          credentials: credential_mode
     40        });
     41        const fetch_response = await fetch(fetch_request);
     42        await cache.put(fetch_request, fetch_response);
     43        return true;
     44      }, [resource_url, request_credential_mode]);
     45    assert_equals(stored, true);
     46 
     47    // Retrieved it from |retriever|.
     48    const was_retrieved = await retriever_context.execute_script(
     49      async (url) => {
     50        const cache = await caches.open('v1');
     51         try {
     52           const response = await cache.match(url);
     53           return "retrieved";
     54         } catch (error) {
     55           return "error";
     56         }
     57      }, [resource_url]);
     58    assert_equals(was_retrieved, expectation);
     59  }, description);
     60 };
     61 
     62 // Execute the same set of tests for every type of execution contexts:
     63 // Documents, DedicatedWorkers, SharedWorkers, and ServiceWorkers. The results
     64 // should be independent of the context.
     65 const environment = location.search.substr(1);
     66 
     67 cacheStorageTest(`[${environment}] none => none`,
     68  dip_none,
     69  dip_none,
     70  "",
     71  "include",
     72  "retrieved");
     73 cacheStorageTest(`[${environment}] none => isolate-and-credentialless`,
     74  dip_none,
     75  dip_credentialless,
     76  "",
     77  "include",
     78  "error");
     79 cacheStorageTest(`[${environment}] none => isolate-and-credentialless (omit)`,
     80  dip_none,
     81  dip_credentialless,
     82  "",
     83  "omit",
     84  "retrieved");
     85 cacheStorageTest(`[${environment}] none => isolate-and-credentialless + CORP`,
     86  dip_none,
     87  dip_credentialless,
     88  corp_cross_origin,
     89  "include",
     90  "retrieved");
     91 cacheStorageTest(`[${environment}] none => isolate-and-require-corp`,
     92  dip_none,
     93  dip_require_corp,
     94  "",
     95  "include",
     96  "error");
     97 cacheStorageTest(`[${environment}] none => isolate-and-require-corp (omit)`,
     98  dip_none,
     99  dip_require_corp,
    100  "",
    101  "include",
    102  "error");
    103 cacheStorageTest(`[${environment}] none => isolate-and-require-corp + CORP`,
    104  dip_none,
    105  dip_require_corp,
    106  corp_cross_origin,
    107  "include",
    108  "retrieved");