sec-ch-ua.https.html (1623B)
1 <!DOCTYPE html> 2 <head> 3 <script src=/resources/testharness.js></script> 4 <script src=/resources/testharnessreport.js></script> 5 <script> 6 var sec_ch_ua_header = ""; 7 8 function grabSECCHUAHeader(t) { 9 return new Promise((resolve, reject) => { 10 var w; 11 window.onmessage = e => { 12 try { 13 resolve(e.data.header) 14 } catch (ex) { 15 reject(ex); 16 } 17 }; 18 w = window.open("./resources/sec-ch-ua.py"); 19 t.add_cleanup(w.close); 20 }); 21 } 22 promise_test(t => { 23 return grabSECCHUAHeader(t).then(header => { 24 sec_ch_ua_header = header; 25 assert_not_equals(sec_ch_ua_header, "", "`Sec-CH-UA` is sent."); 26 }); 27 }, "Open HTTPS window: `Sec-CH-UA` header returned by default."); 28 29 promise_test(t => { 30 return grabSECCHUAHeader(t).then(header => { 31 assert_not_equals(header, "", "The `Sec-CH-UA` header is delivered."); 32 assert_equals(header, sec_ch_ua_header, 33 "The `Sec-CH-UA` header did not change between requests."); 34 }); 35 }, "Open HTTPS window: `Sec-CH-UA` header is consistent across versions."); 36 37 promise_test(t => { 38 return grabSECCHUAHeader(t).then(header => { 39 assert_true(header.split(", ").every((brand) => { 40 let brandEnd = brand.indexOf(";v="); 41 assert_true(brandEnd !== -1, 42 "A well-formed Sec-CH-UA header must have version (v=) params"); 43 /* 32 + 2, becuase of the extra quotes padding the brand, 44 e.g. '"lol";v=22"' */ 45 return brandEnd < 34; 46 })); 47 }); 48 }, "Open HTTPS window: No brand in `Sec-CH-UA` header is > than 32 chars."); 49 </script> 50 </head>