|
3 | 3 | <script src=/resources/testharness.js></script>
|
4 | 4 | <script src=/resources/testharnessreport.js></script>
|
5 | 5 | <script>
|
6 |
| - var minor = ""; |
7 |
| - promise_test(t => { |
| 6 | + var sec_ch_ua_header = ""; |
| 7 | + |
| 8 | + function grabSECCHUAHeader(t) { |
8 | 9 | return new Promise((resolve, reject) => {
|
9 | 10 | var w;
|
10 | 11 | window.onmessage = e => {
|
11 | 12 | try {
|
12 |
| - assert_not_equals(e.data.header, "", "The `Sec-CH-UA` header is delivered."); |
13 |
| - minor = e.data.header; |
| 13 | + resolve(e.data.header) |
14 | 14 | } catch (ex) {
|
15 | 15 | reject(ex);
|
16 | 16 | }
|
17 |
| - w.close(); |
18 |
| - resolve(); |
19 | 17 | };
|
20 | 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."); |
21 | 26 | });
|
22 |
| - }, "Open HTTPS window prior to opt-in: `Sec-CH-UA` header with minor version.") |
| 27 | + }, "Open HTTPS window: `Sec-CH-UA` header returned by default."); |
23 | 28 |
|
24 | 29 | promise_test(t => {
|
25 |
| - return new Promise((resolve, reject) => { |
26 |
| - var w; |
27 |
| - window.onmessage = e => { |
28 |
| - try { |
29 |
| - assert_not_equals(e.data.header, "", "The `Sec-CH-UA` header is delivered."); |
30 |
| - assert_equals(e.data.header, minor, "The `Sec-CH-UA` header did not change after the opt-in."); |
31 |
| - } catch (ex) { |
32 |
| - reject(ex); |
33 |
| - } |
34 |
| - w.close(); |
35 |
| - resolve(); |
36 |
| - }; |
37 |
| - w = window.open("./resources/sec-ch-ua.py"); |
| 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 | + })); |
38 | 47 | });
|
39 |
| - }, "Open HTTPS window post-opt-in: `Sec-CH-UA` header with minor version.") |
| 48 | + }, "Open HTTPS window: No brand in `Sec-CH-UA` header is > than 32 chars."); |
40 | 49 | </script>
|
41 | 50 | </head>
|
0 commit comments