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