tor-browser

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

feature-policy-navigation.js (1721B)


      1 const meta_name_enabled = [
      2  "sec-ch-device-memory",
      3  "device-memory",
      4  "sec-ch-dpr",
      5  "dpr",
      6  "sec-ch-viewport-width",
      7  "viewport-width",
      8  "sec-ch-ua",
      9  "sec-ch-ua-mobile",
     10  "sec-ch-ua-platform",
     11 ];
     12 
     13 const meta_name_client_hints = iframe_src +
     14    client_hints_list.map((e) => {
     15      if(meta_name_enabled.includes(e)) {
     16        return e+"=true";
     17      } else {
     18        return e+"=false";
     19      }
     20    }).join("&");
     21 
     22 const cross_origin_enabled = [
     23  "device-memory",
     24  "sec-ch-device-memory",
     25  "sec-ch-ua-platform",
     26 ];
     27 
     28 const cross_origin_client_hints = iframe_src +
     29    client_hints_list.map((e) => {
     30      if(cross_origin_enabled.includes(e)) {
     31        return e+"=true";
     32      } else {
     33        return e+"=false";
     34      }
     35    }).join("&");
     36 
     37 const same_origin_disabled = [
     38  "dpr",
     39  "sec-ch-dpr",
     40  "sec-ch-ua-mobile",
     41 ];
     42 
     43 const same_origin_client_hints = iframe_src +
     44    client_hints_list.map((e) => {
     45      if(same_origin_disabled.includes(e)) {
     46        return e+"=false";
     47      } else {
     48        return e+"=true";
     49      }
     50    }).join("&");
     51 
     52 const test_frame = (origin, url, allow, message) => {
     53  promise_test(() => {
     54    return new Promise((resolve, reject) => {
     55      let frame = document.createElement('iframe');
     56      frame.allow = allow;
     57      window.addEventListener('message', function(e) {
     58        try {
     59          assert_equals(typeof e.data, "string");
     60          assert_equals(e.data, "PASS");
     61        } catch {
     62          reject(e.data);
     63        }
     64        resolve();
     65      });
     66      document.body.appendChild(frame);
     67      // Writing to |frame.src| triggers the navigation, so
     68      // everything else need to happen first.
     69      frame.src = get_host_info()[origin] + url;
     70    });
     71  }, message);
     72 }