tor-browser

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

requestStorageAccess-web-socket.sub.https.window.js (2332B)


      1 // META: script=helpers.js
      2 // META: script=/cookies/resources/cookie-helper.sub.js
      3 // META: script=/resources/testdriver.js
      4 // META: script=/resources/testdriver-vendor.js
      5 
      6 'use strict';
      7 
      8 const altRoot = "https://{{hosts[alt][]}}:{{ports[https][0]}}";
      9 const altRootWss = "wss://{{hosts[alt][]}}:{{ports[wss][0]}}";
     10 
     11 const responderPath = "/storage-access-api/resources/script-with-cookie-header.py?script=embedded_responder.js";
     12 const altRootResponder = `${altRoot}${responderPath}`;
     13 
     14 async function SetUpResponderFrame(t, url) {
     15  const frame = await CreateFrame(url);
     16 
     17  await SetPermissionInFrame(frame, [{ name: 'storage-access' }, 'granted']);
     18  t.add_cleanup(async () => {
     19    await test_driver.delete_all_cookies();
     20    await SetPermissionInFrame(frame, [{ name: 'storage-access' }, 'prompt']);
     21    await MaybeSetStorageAccess("*", "*", "allowed");
     22  });
     23 
     24  if (await FrameHasStorageAccess(frame)) {
     25    // Nothing to test here, since cookie access is not blocked.
     26    // See https://github.com/privacycg/storage-access/issues/162.
     27    return null;
     28  }
     29 
     30  return frame;
     31 }
     32 
     33 promise_test(async (t) => {
     34  await MaybeSetStorageAccess("*", "*", "blocked");
     35  await SetFirstPartyCookie(altRoot);
     36 
     37  const frame = await SetUpResponderFrame(t, altRootResponder);
     38  if (!frame) {
     39    return;
     40  }
     41 
     42  assert_true(await RequestStorageAccessInFrame(frame), "requestStorageAccess resolves without requiring a gesture.");
     43  assert_true(await FrameHasStorageAccess(frame), "frame has storage access after request.");
     44  assert_true(await HasUnpartitionedCookie(frame), "frame has access to cookies after request.");
     45 
     46  assert_true(cookieStringHasCookie("cookie", "unpartitioned",
     47              await ReadCookiesFromWebSocketConnection(frame, altRootWss)),
     48          "WebSocket handshake should include unpartitioned cookie");
     49 }, "WebSocket inherits storage access");
     50 
     51 promise_test(async (t) => {
     52 
     53  await MaybeSetStorageAccess("*", "*", "blocked");
     54  await SetFirstPartyCookie(altRoot);
     55  const frame = await SetUpResponderFrame(t, altRootResponder);
     56  if (!frame) {
     57    return;
     58  }
     59 
     60  assert_false(cookieStringHasCookie("cookie", "unpartitioned",
     61              await ReadCookiesFromWebSocketConnection(frame, altRootWss)),
     62          "request should not contain cookies");
     63 }, "WebSocket omits unpartitioned cookies without storage access");