tor-browser

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

element-area.sub.html (2295B)


      1 <!DOCTYPE html>
      2 <!--
      3 [%provenance%]
      4 -->
      5 <html lang="en">
      6  <meta charset="utf-8">
      7  {%- if subtests|length > 10 %}
      8  <meta name="timeout" content="long">
      9  {%- endif %}
     10  <title>HTTP headers on request for HTML "area" element navigation</title>
     11  <script src="/resources/testharness.js"></script>
     12  <script src="/resources/testharnessreport.js"></script>
     13  {%- if subtests|selectattr('userActivated')|list %}
     14  <script src="/resources/testdriver.js"></script>
     15  <script src="/resources/testdriver-vendor.js"></script>
     16  {%- endif %}
     17  <script src="/fetch/metadata/resources/helper.sub.js"></script>
     18  <body>
     19  <script>
     20  'use strict';
     21 
     22  function induceRequest(url, {test, userActivated, attributes}) {
     23    const win = window.open();
     24    const area = win.document.createElement('area');
     25    area.setAttribute('href', url);
     26 
     27    for (const [ name, value ] of Object.entries(attributes)) {
     28      area.setAttribute(name, value);
     29    }
     30 
     31    win.document.body.appendChild(area);
     32 
     33    test.add_cleanup(() => win.close());
     34 
     35    if (userActivated) {
     36      test_driver.bless('enable user activation', () => area.click());
     37    } else {
     38      area.click();
     39    }
     40  }
     41 
     42  {%- for subtest in subtests %}
     43 
     44  promise_test((t) => {
     45    const key = '{{uuid()}}';
     46 
     47    induceRequest(
     48      makeRequestURL(key, [% subtest.origins %], {mime: 'text/html'}),
     49      {
     50        test: t,
     51        userActivated: [%subtest.userActivated | default(false) | tojson%],
     52        attributes: [%subtest.elementAttrs | default({}) | tojson%]
     53      }
     54    );
     55 
     56    // `induceRequest` does not necessarily trigger a navigation, so the Python
     57    // handler must be polled until it has received the initial request.
     58    return retrieve(key, {poll: true})
     59      .then((headers) => {
     60        {%- if subtest.expected == none %}
     61          assert_not_own_property(headers, '[%subtest.headerName%]');
     62        {%- else %}
     63          assert_own_property(headers, '[%subtest.headerName%]');
     64          assert_array_equals(headers['[%subtest.headerName%]'], ['[%subtest.expected%]']);
     65        {%- endif %}
     66        });
     67  }, '[%subtest.headerName%][%subtest.description | pad("start", " - ")%] - [%subtest.elementAttrs | collection("attributes")%][% " with user activation" if subtest.userActivated%]');
     68 
     69  {%- endfor %}
     70  </script>
     71  </body>
     72 </html>