| <html> |
| <title>Accept-CH test</title> |
| <body> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/open-and-add-load-event.js"></script> |
| |
| <!-- |
| Apart from this webpage, the test opens two more html web page. One test is run |
| in this web page, and two in the other web pages. |
| --> |
| |
| <script> |
| |
| // This test fetches resources/accept_ch.html. The response headers to |
| // that webpage contains only the Accept-CH header. These preferences should be |
| // stored so that the next request to the same origin is sent with the |
| // requested client hint headers. |
| |
| // Next, to verify that the origin preferences were persisted by the user |
| // agent, this test fetches resources/expect_client_hints_headers.html in a new |
| // window. Fetching of resources/expect_client_hints_headers.html verifies that |
| // the user agent does send the client hints in the request headers. |
| |
| // After this, the same is done but with a differet Accept-CH header, to test |
| // that the preferences change after receiving a different header. |
| |
| // First, verify the initial state to make sure that the browser does not have |
| // client hints preferences cached from a previous run of the test. |
| promise_test(t => { |
| return fetch("resources/echo-client-hints-received.py").then(r => { |
| assert_equals(r.status, 200) |
| // Verify that the browser did not include client hints in the request |
| // headers when fetching echo_client_hints_received.py. |
| assert_false(r.headers.has("device-memory-received"), "device-memory-received"); |
| assert_false(r.headers.has("viewport-width-received"), "viewport-width-received"); |
| }); |
| }, "Precondition: Test that the browser does not have client hints preferences cached"); |
| |
| function acceptChLoaded() { |
| // Open a new window. Verify that the user agent does attach the client hints. |
| open_and_add_load_event("resources/expect-client-hints-headers.html", changeCh); |
| } |
| |
| function changeCh() { |
| // Use new window to overwrite client hint preferences, then verify new |
| // settings have been saved |
| open_and_add_load_event("resources/accept-ch-different.html", verifyChangeCh); |
| } |
| |
| function verifyChangeCh() { |
| // Use new window to overwrite client hint preferences, then verify new |
| // settings have been saved |
| open_and_add_load_event("resources/expect-client-hints-headers-different.html", clearCh); |
| } |
| |
| function clearCh() { |
| // Use new window to overwrite client hint preferences, then verify new |
| // settings have been saved |
| open_and_add_load_event("resources/accept-ch-empty.html", verifyClearCh); |
| } |
| |
| function verifyClearCh() { |
| // Use new window to overwrite client hint preferences, then verify new |
| // settings have been saved |
| open_and_add_load_event("resources/do-not-expect-client-hints.html", null); |
| } |
| |
| // Fetching this webpage should cause user-agent to persist client hint |
| // preferences for the origin. |
| open_and_add_load_event("resources/accept-ch.html", acceptChLoaded); |
| |
| </script> |
| </body> |
| </html> |