| <!DOCTYPE html> |
| <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. |
| |
| promise_test(async () => { |
| r = await fetch("resources/echo-client-hints-received.py"); |
| |
| 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("device-memory-deprecated-received"), "device-memory-deprecated-received"); |
| assert_false(r.headers.has("viewport-width-received"), "viewport-width-received"); |
| assert_false(r.headers.has("viewport-width-deprecated-received"), "viewport-width-deprecated-received"); |
| |
| // Fetching this webpage should cause user-agent to persist client hint |
| // preferences for the origin. |
| await open_and_add_load_event("resources/accept-ch.html"); |
| |
| // Open a new window. Verify that the user agent does attach the client hints. |
| await open_and_expect_headers("resources/expect-client-hints-headers.html"); |
| |
| // Use new window to overwrite client hint preferences, then verify new |
| // settings have been saved |
| await open_and_add_load_event("resources/accept-ch-different.html"); |
| |
| // Use new window to overwrite client hint preferences, then verify new |
| // settings have been saved |
| await open_and_expect_headers("resources/expect-different-client-hints-headers.html"); |
| |
| // Use new window to overwrite client hint preferences, then verify new |
| // settings have been saved |
| await open_and_add_load_event("resources/accept-ch-empty.html"); |
| |
| // Use new window to overwrite client hint preferences, then verify new |
| // settings have been saved |
| await open_and_expect_headers("resources/expect-no-client-hints-headers.html"); |
| |
| // Check that multiple headers will fill the cache. |
| await open_and_add_load_event("resources/accept-ch-split.html"); |
| await open_and_expect_headers("resources/expect-client-hints-headers.html"); |
| |
| // Check that a mix of empty and full headers drops the cache. |
| await open_and_add_load_event("resources/accept-ch-mixed.html"); |
| await open_and_expect_headers("resources/expect-no-client-hints-headers.html"); |
| |
| }, "Accept-CH changes based on header"); |
| |
| </script> |
| </body> |
| </html> |