| <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> |