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>