element-picture.sub.html (3336B)
1 <!DOCTYPE html> 2 <!-- 3 [%provenance%] 4 --> 5 <html lang="en"> 6 <meta charset="utf-8"> 7 <title>HTTP headers on request for HTML "picture" element source</title> 8 <script src="/resources/testharness.js"></script> 9 <script src="/resources/testharnessreport.js"></script> 10 <script src="/fetch/metadata/resources/helper.sub.js"></script> 11 <body> 12 <script> 13 'use strict'; 14 15 function induceRequest(url, sourceEl, sourceAttr, attributes) { 16 const picture = document.createElement('picture'); 17 const els = { 18 img: document.createElement('img'), 19 source: document.createElement('source') 20 }; 21 picture.appendChild(els.source); 22 picture.appendChild(els.img); 23 document.body.appendChild(picture); 24 25 for (const [ name, value ] of Object.entries(attributes)) { 26 els.img.setAttribute(name, value); 27 } 28 29 return new Promise((resolve) => { 30 els[sourceEl].setAttribute(sourceAttr, url); 31 els.img.onload = els.img.onerror = resolve; 32 }); 33 } 34 35 {%- for subtest in subtests %} 36 37 promise_test(() => { 38 const key = '{{uuid()}}'; 39 40 return induceRequest( 41 makeRequestURL(key, [% subtest.origins %]), 42 'img', 43 'src', 44 [%subtest.elementAttrs | default({}) | tojson%] 45 ) 46 .then(() => retrieve(key)) 47 .then((headers) => { 48 {%- if subtest.expected == none %} 49 assert_not_own_property(headers, '[%subtest.headerName%]'); 50 {%- else %} 51 assert_own_property(headers, '[%subtest.headerName%]'); 52 assert_array_equals(headers['[%subtest.headerName%]'], ['[%subtest.expected%]']); 53 {%- endif %} 54 }); 55 }, '[%subtest.headerName%] - img[src] - [%subtest.description | pad("end", ", ")%][%subtest.elementAttrs | collection("attributes")%]'); 56 57 promise_test(() => { 58 const key = '{{uuid()}}'; 59 60 return induceRequest( 61 makeRequestURL(key, [% subtest.origins %]), 62 'img', 63 'srcset', 64 [%subtest.elementAttrs | default({}) | tojson%] 65 ) 66 .then(() => retrieve(key)) 67 .then((headers) => { 68 {%- if subtest.expected == none %} 69 assert_not_own_property(headers, '[%subtest.headerName%]'); 70 {%- else %} 71 assert_own_property(headers, '[%subtest.headerName%]'); 72 assert_array_equals(headers['[%subtest.headerName%]'], ['[%subtest.expected%]']); 73 {%- endif %} 74 }); 75 }, '[%subtest.headerName%] - img[srcset] - [%subtest.description | pad("end", ", ")%][%subtest.elementAttrs | collection("attributes")%]'); 76 77 promise_test(() => { 78 const key = '{{uuid()}}'; 79 80 return induceRequest( 81 makeRequestURL(key, [% subtest.origins %]), 82 'source', 83 'srcset', 84 [%subtest.elementAttrs | default({}) | tojson%] 85 ) 86 .then(() => retrieve(key)) 87 .then((headers) => { 88 {%- if subtest.expected == none %} 89 assert_not_own_property(headers, '[%subtest.headerName%]'); 90 {%- else %} 91 assert_own_property(headers, '[%subtest.headerName%]'); 92 assert_array_equals(headers['[%subtest.headerName%]'], ['[%subtest.expected%]']); 93 {%- endif %} 94 }); 95 }, '[%subtest.headerName%] - source[srcset] - [%subtest.description | pad("end", ", ")%][%subtest.elementAttrs | collection("attributes")%]'); 96 97 {%- endfor %} 98 </script> 99 </body> 100 </html>