| <!DOCTYPE html> |
| <head> |
| <script src=/resources/testharness.js></script> |
| <script src=/resources/testharnessreport.js></script> |
| <script> |
| var sec_ch_ua_header = ""; |
| |
| function grabSECCHUAHeader(t) { |
| return new Promise((resolve, reject) => { |
| var w; |
| window.onmessage = e => { |
| try { |
| resolve(e.data.header) |
| } catch (ex) { |
| reject(ex); |
| } |
| }; |
| w = window.open("./resources/sec-ch-ua.py"); |
| t.add_cleanup(w.close); |
| }); |
| } |
| promise_test(t => { |
| return grabSECCHUAHeader(t).then(header => { |
| sec_ch_ua_header = header; |
| assert_not_equals(sec_ch_ua_header, "", "`Sec-CH-UA` is sent."); |
| }); |
| }, "Open HTTPS window: `Sec-CH-UA` header returned by default."); |
| |
| promise_test(t => { |
| return grabSECCHUAHeader(t).then(header => { |
| assert_not_equals(header, "", "The `Sec-CH-UA` header is delivered."); |
| assert_equals(header, sec_ch_ua_header, |
| "The `Sec-CH-UA` header did not change between requests."); |
| }); |
| }, "Open HTTPS window: `Sec-CH-UA` header is consistent across versions."); |
| |
| promise_test(t => { |
| return grabSECCHUAHeader(t).then(header => { |
| assert_true(header.split(", ").every((brand) => { |
| let brandEnd = brand.indexOf(";v="); |
| assert_true(brandEnd !== -1, |
| "A well-formed Sec-CH-UA header must have version (v=) params"); |
| /* 32 + 2, becuase of the extra quotes padding the brand, |
| e.g. '"lol";v=22"' */ |
| return brandEnd < 34; |
| })); |
| }); |
| }, "Open HTTPS window: No brand in `Sec-CH-UA` header is > than 32 chars."); |
| </script> |
| </head> |