Skip to content

Commit

Permalink
[Legacy client hints modernization] (5) Check for sec-ch- in WebTests
Browse files Browse the repository at this point in the history
This CL adds WebTests for the new names (with the `sec-ch-` prefix) of
the `dpr`, `device-memory`, `width`, and `viewport-width` client hints.

Intent: https://groups.google.com/a/chromium.org/g/blink-dev/c/Y42bZ66L6Zo/

This series of CLs seeks to add `sec-ch-` prefixes to client hints that
are missing them by deprecating the old versions and adding new ones:
(1) Add `sec-ch-` hint constants
(2) Add feature to gate legacy hints for future deprecation
(3) Implement `sec-ch-` device-memory, dpr, width, and viewport-width
(4) Enable `sec-ch-` client hints by default
(5) Check for `sec-ch-` in WebTests
(6) Add deprecation issue for legacy hints

Bug: 1227043
Change-Id: I3065ac322ba2b99426b81942c13fb8014c1ece58
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3221278
Auto-Submit: Ari Chivukula <[email protected]>
Commit-Queue: Ari Chivukula <[email protected]>
Reviewed-by: Yoav Weiss <[email protected]>
Cr-Commit-Position: refs/heads/main@{#934051}
  • Loading branch information
arichiv authored and chromium-wpt-export-bot committed Oct 21, 2021
1 parent 9c46b80 commit 2eb218c
Show file tree
Hide file tree
Showing 54 changed files with 112 additions and 59 deletions.
6 changes: 6 additions & 0 deletions client-hints/accept-ch-answers.sub.https.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,11 @@
// Verify that the browser includes client hints in the headers for a
// same-origin fetch.
assert_true(r.headers.has("device-memory-received"), "device-memory-received");
assert_true(r.headers.has("device-memory-deprecated-received"), "device-memory-deprecated-received");
assert_true(r.headers.has("dpr-received"), "dpr-received");
assert_true(r.headers.has("dpr-deprecated-received"), "dpr-deprecated-received");
assert_true(r.headers.has("viewport-width-received"), "viewport-width-received");
assert_true(r.headers.has("viewport-width-deprecated-received"), "viewport-width-deprecated-received");

assert_true(r.headers.has("rtt-received"), "rtt-received");
var rtt = parseInt(r.headers.get("rtt-received"));
Expand All @@ -46,8 +49,11 @@
// Verify that the browser does not include client hints in the headers
// for a cross-origin fetch.
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("dpr-received"), "dpr-received");
assert_false(r.headers.has("dpr-deprecated-received"), "dpr-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");
assert_false(r.headers.has("rtt-received"), "rtt-received");
assert_false(r.headers.has("downlink-received"), "downlink-received");
assert_false(r.headers.has("ect-received"), "ect-received");
Expand Down
2 changes: 1 addition & 1 deletion client-hints/accept-ch-answers.sub.https.html.headers
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Accept-CH: device-memory, dpr, viewport-width, rtt, downlink, ect
Accept-CH: sec-ch-device-memory, device-memory, sec-ch-dpr, dpr, sec-ch-viewport-width, viewport-width, rtt, downlink, ect
4 changes: 4 additions & 0 deletions client-hints/accept-ch-cache-revalidation.https.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,13 @@
promise_test(async (test) => {
var request_token = token();
var client_hint_headers = [
"sec-ch-device-memory",
"device-memory",
"sec-ch-dpr",
"dpr",
"sec-ch-width",
"width",
"sec-ch-viewport-width",
"viewport-width",
"rtt",
"downlink",
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Accept-CH: dpr,device-memory,viewport-width,rtt,downlink,ect,sec-ch-ua,sec-ch-ua-arch,sec-ch-ua-platform,sec-ch-ua-platform-version,sec-ch-ua-model,sec-ch-prefers-color-scheme,sec-ch-viewport-height
Accept-CH: sec-ch-dpr,dpr,sec-ch-device-memory,device-memory,sec-ch-viewport-width,viewport-width,rtt,downlink,ect,sec-ch-ua,sec-ch-ua-arch,sec-ch-ua-platform,sec-ch-ua-platform-version,sec-ch-ua-model,sec-ch-prefers-color-scheme,sec-ch-viewport-height
2 changes: 2 additions & 0 deletions client-hints/accept-ch-change.https.html
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@
// 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.
Expand Down
6 changes: 3 additions & 3 deletions client-hints/accept-ch-feature-policy-navigation.https.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
(async () => {
await test_frame(
"HTTPS_REMOTE_ORIGIN",
"device-memory=true&dpr=false&viewport-width=false&sec-ch-ua=false&sec-ch-ua-mobile=false",
"sec-ch-device-memory=true&device-memory=true&sec-ch-dpr=false&dpr=false&sec-ch-viewport-width=false&viewport-width=false&sec-ch-ua=false&sec-ch-ua-mobile=false",
"",
"Client hints loaded on cross-origin iframe request with feature policy.");
await test_frame(
"HTTPS_ORIGIN",
"device-memory=true&dpr=false&viewport-width=true&sec-ch-ua=true&sec-ch-ua-mobile=false",
"sec-ch-device-memory=true&device-memory=true&sec-ch-dpr=false&dpr=false&sec-ch-viewport-width=true&viewport-width=true&sec-ch-ua=true&sec-ch-ua-mobile=false",
"",
"Client hints loaded on same-origin iframe request with feature policy.");
await test_frame(
Expand All @@ -23,7 +23,7 @@
"Iframe trying to set Accept-CH-Lifetime.", "/client-hints/resources/iframe-accept-ch-lifetime.html");
await test_frame(
"HTTPS_REMOTE_ORIGIN",
"device-memory=true&dpr=false&viewport-width=false&sec-ch-ua=false&sec-ch-ua-mobile=false",
"sec-ch-device-memory=true&device-memory=true&sec-ch-dpr=false&dpr=false&sec-ch-viewport-width=false&viewport-width=false&sec-ch-ua=false&sec-ch-ua-mobile=false",
"",
"Client hints loaded on cross-origin iframe request with feature policy after attempting to set independently.");
})();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
Accept-CH: Device-Memory, DPR, Viewport-Width
Accept-CH: Sec-CH-Device-Memory, Device-Memory, Sec-CH-DPR, DPR, Sec-CH-Viewport-Width, Viewport-Width
Accept-CH-Lifetime: 100
Feature-Policy: ch-device-memory *; ch-dpr 'none'; ch-viewport-width 'self'; ch-ua 'self'; ch-ua-mobile 'none'; ch-prefers-color-scheme 'none'
6 changes: 6 additions & 0 deletions client-hints/accept-ch-feature-policy.sub.https.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,11 @@
// Verify that the browser includes client hints in the headers for a
// same-origin fetch which not specifically excluded via Feature-Policy.
assert_true(r.headers.has("device-memory-received"), "device-memory-received");
assert_true(r.headers.has("device-memory-deprecated-received"), "device-memory-deprecated-received");
assert_false(r.headers.has("dpr-received"), "dpr-received");
assert_false(r.headers.has("dpr-deprecated-received"), "dpr-deprecated-received");
assert_true(r.headers.has("viewport-width-received"), "viewport-width-received");
assert_true(r.headers.has("viewport-width-deprecated-received"), "viewport-width-deprecated-received");

assert_true(r.headers.has("rtt-received"), "rtt-received");
var rtt = parseInt(r.headers.get("rtt-received"));
Expand Down Expand Up @@ -51,8 +54,11 @@
// Verify that the browser includes client hints in the headers for a
// cross-origin fetch which are specifically requested via Feature-Policy.
assert_true(r.headers.has("device-memory-received"), "device-memory-received");
assert_true(r.headers.has("device-memory-deprecated-received"), "device-memory-deprecated-received");
assert_false(r.headers.has("dpr-received"), "dpr-received");
assert_false(r.headers.has("dpr-deprecated-received"), "dpr-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");
assert_false(r.headers.has("rtt-received"), "rtt-received");
assert_false(r.headers.has("downlink-received"), "downlink-received");
assert_false(r.headers.has("ect-received"), "ect-received");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
Accept-CH: device-memory, dpr, viewport-width, rtt, downlink, ect, mobile, sec-ch-prefers-color-scheme, sec-ch-viewport-height
Accept-CH: sec-ch-device-memory, device-memory, sec-ch-dpr, dpr, sec-ch-viewport-width, viewport-width, rtt, downlink, ect, mobile, sec-ch-prefers-color-scheme, sec-ch-viewport-height
Feature-Policy: ch-device-memory *; ch-dpr 'none'; ch-viewport-width 'self'; ch-mobile; ch-prefers-color-scheme 'none'; ch-viewport-height 'none'
1 change: 1 addition & 0 deletions client-hints/accept-ch-malformed-header.https.html.headers
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Accept-CH: sec-ch-device-memory device-memory sec-ch-dpr dpr
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,24 @@
(async () => {
await test_frame(
"HTTPS_REMOTE_ORIGIN",
"device-memory=false&dpr=false&viewport-width=false&sec-ch-ua=true&sec-ch-ua-mobile=true",
"sec-ch-device-memory=false&device-memory=false&sec-ch-dpr=false&dpr=false&sec-ch-viewport-width=false&viewport-width=false&sec-ch-ua=true&sec-ch-ua-mobile=true",
"",
"Client hints not loaded on cross-origin iframe request with no feature policy.");
await test_frame(
"HTTPS_ORIGIN",
"device-memory=true&dpr=true&viewport-width=true&sec-ch-ua=true&sec-ch-ua-mobile=true",
"sec-ch-device-memory=true&device-memory=true&sec-ch-dpr=true&dpr=true&sec-ch-viewport-width=true&viewport-width=true&sec-ch-ua=true&sec-ch-ua-mobile=true",
"",
"Client hints loaded on same-origin iframe request with no feature policy.");

let allow = "ch-device-memory *; ch-dpr 'src'; ch-viewport-width 'self'; ch-prefers-color-scheme 'none'";
await test_frame(
"HTTPS_REMOTE_ORIGIN",
"device-memory=true&dpr=true&viewport-width=false&sec-ch-ua=true&sec-ch-ua-mobile=true",
"sec-ch-device-memory=true&device-memory=true&sec-ch-dpr=true&dpr=true&sec-ch-viewport-width=false&viewport-width=false&sec-ch-ua=true&sec-ch-ua-mobile=true",
allow,
"Client hints loaded on cross-origin iframe request with allow list.");
await test_frame(
"HTTPS_ORIGIN",
"device-memory=true&dpr=true&viewport-width=true&sec-ch-ua=true&sec-ch-ua-mobile=true",
"sec-ch-device-memory=true&device-memory=true&sec-ch-dpr=true&dpr=true&sec-ch-viewport-width=true&viewport-width=true&sec-ch-ua=true&sec-ch-ua-mobile=true",
allow,
"Client hints loaded on same-origin iframe request with allow list.");
})();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
Accept-CH: Device-Memory, DPR, Viewport-Width
Accept-CH: Sec-CH-Device-Memory, Device-Memory, Sec-CH-DPR, DPR, Sec-CH-Viewport-Width, Viewport-Width
Accept-CH-Lifetime: 100
3 changes: 3 additions & 0 deletions client-hints/accept-ch-no-feature-policy.sub.https.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,11 @@
// Verify that the browser includes client hints in the headers for a
// same-origin fetch with the default feature policy in place.
assert_true(r.headers.has("device-memory-received"), "device-memory-received");
assert_true(r.headers.has("device-memory-deprecated-received"), "device-memory-deprecated-received");
assert_true(r.headers.has("dpr-received"), "dpr-received");
assert_true(r.headers.has("dpr-deprecated-received"), "dpr-deprecated-received");
assert_true(r.headers.has("viewport-width-received"), "viewport-width-received");
assert_true(r.headers.has("viewport-width-deprecated-received"), "viewport-width-deprecated-received");

assert_true(r.headers.has("rtt-received"), "rtt-received");
var rtt = parseInt(r.headers.get("rtt-received"));
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Accept-CH: device-memory, dpr, viewport-width, rtt, downlink, ect
Accept-CH: sec-ch-device-memory, device-memory, sec-ch-dpr, dpr, sec-ch-viewport-width, viewport-width, rtt, downlink, ect
3 changes: 3 additions & 0 deletions client-hints/accept-ch-non-secure.http.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,11 @@
// Verify that the browser does not include client hints in the headers
// when fetching the XHR from an insecure HTTP server.
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("dpr-received"), "dpr-received");
assert_false(r.headers.has("dpr-deprecated-received"), "dpr-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");
assert_false(r.headers.has("rtt-received"), "rtt-received");
assert_false(r.headers.has("downlink-received"), "downlink-received");
assert_false(r.headers.has("ect-received"), "ect-received");
Expand Down
2 changes: 1 addition & 1 deletion client-hints/accept-ch-non-secure.http.html.headers
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Accept-CH: device-memory, dpr, viewport-width, rtt, downlink, ect
Accept-CH: sec-ch-device-memory, device-memory, sec-ch-dpr, dpr, sec-ch-viewport-width, viewport-width, rtt, downlink, ect
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
Accept-CH: DPR, Device-Memory
Accept-CH: Sec-CH-DPR, DPR, Sec-CH-Device-Memory, Device-Memory
Feature-Policy: ch-dpr *; ch-device-memory *
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Accept-CH: DPR, Device-Memory
Accept-CH: Sec-CH-DPR, DPR, Sec-CH-Device-Memory, Device-Memory
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
Accept-CH: DPR, Device-Memory
Accept-CH: Sec-CH-DPR, DPR, Sec-CH-Device-Memory, Device-Memory
Feature-Policy: ch-dpr *;ch-device-memory *
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Accept-CH: DPR, Device-Memory
Accept-CH: Sec-CH-DPR, DPR, Sec-CH-Device-Memory, Device-Memory
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Accept-CH: DPR, Device-Memory
Accept-CH: Sec-CH-DPR, DPR, Sec-CH-Device-Memory, Device-Memory
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ def main(request, response):
url = b''
if b'url' in request.GET:
url = request.GET[b'url']
return 301, [(b'Location', url),(b'Accept-CH', b'device-memory, DPR')], u''
return 301, [(b'Location', url),(b'Accept-CH', b'sec-ch-device-memory, device-memory, Sec-CH-DPR, DPR')], u''
5 changes: 5 additions & 0 deletions client-hints/accept-ch-stickiness/resources/accept-ch-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ function verify_initial_state(initial_url, test_name) {
// 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");
});
}, test_name + " precondition: Test that the browser does not have client " +
"hints preferences cached");
Expand Down Expand Up @@ -104,6 +106,9 @@ function attempt_set(test_type, accept_url, test_name, test_name_suffix) {
assert_false(r.headers.has("device-memory-received"),
"device-memory-received",
"subresource request had no client hints");
assert_false(r.headers.has("device-memory-deprecated-received"),
"device-memory-deprecated-received",
"subresource request had no client hints");
resolve();
});
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
Accept-CH: device-memory, DPR
Accept-CH: sec-ch-device-memory, device-memory, Sec-CH-DPR, DPR
Access-Control-Allow-Origin: *
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
// of client hints it receives in the request headers.

fetch("/client-hints/accept-ch-stickiness/resources/echo-client-hints-received.py").then(r => {
if(r.status == 200 && !r.headers.has("device-memory-received")) {
if(r.status == 200 && !r.headers.has("device-memory-received") && !r.headers.has("device-memory-deprecated-received")) {
window.top.opener.postMessage('PASS', '*');
}
else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ def main(request, response):
verify_subresource_state() in accept-ch-test.js
"""

if b"device-memory" in request.headers:
if b"device-memory" in request.headers or b"sec-ch-device-memory" in request.headers:
result = u"FAIL"
else:
result = u"PASS"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,7 @@ def main(request, response):
response.headers.append(b"Access-Control-Allow-Headers", b"*")
response.headers.append(b"Access-Control-Expose-Headers", b"*")

if b"sec-ch-device-memory" in request.headers:
response.headers.set(b"device-memory-received", request.headers.get(b"sec-ch-device-memory"))
if b"device-memory" in request.headers:
response.headers.set(b"device-memory-received", request.headers.get(b"device-memory"))
response.headers.set(b"device-memory-deprecated-received", request.headers.get(b"device-memory"))
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
// of client hints it receives in the request headers.

fetch("/client-hints/accept-ch-stickiness/resources/echo-client-hints-received.py").then(r => {
if(r.status == 200 && r.headers.has("device-memory-received")) {
if(r.status == 200 && r.headers.has("device-memory-received") && r.headers.has("device-memory-deprecated-received")) {
window.top.opener.postMessage('PASS', '*');
}
else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ def main(request, response):
verify_navigation_state() in accept-ch-test.js
"""

if b"device-memory" not in request.headers:
if b"sec-ch-device-memory" not in request.headers:
result = u"DEVICE-MEMORY"
elif b"device-memory" not in request.headers:
result = u"DEVICE-MEMORY-DEPRECATED"
elif b"sec-ch-ua" not in request.headers:
result = u"UA"
elif b"sec-ch-ua-mobile" not in request.headers:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
// of client hints it receives in the request headers.

fetch(get_host_info()["HTTPS_REMOTE_ORIGIN"] + "/client-hints/accept-ch-stickiness/resources/echo-client-hints-received.py").then(r => {
if(r.status == 200 && r.headers.has("device-memory-received")) {
if(r.status == 200 && r.headers.has("device-memory-received") && r.headers.has("device-memory-deprecated-received")) {
window.top.opener.postMessage('PASS', '*');
}
else {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<html>
<meta http-equiv="Accept-CH" content="device-memory">
<meta http-equiv="Accept-CH" content="sec-ch-device-memory,device-memory">
<body>
<script>
window.top.opener.postMessage('Loaded', '*');
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Accept-CH: DPR, Device-Memory
Accept-CH: Sec-CH-DPR, DPR, Sec-CH-Device-Memory, Device-Memory
10 changes: 5 additions & 5 deletions client-hints/critical-ch/resources/echo-critical-hint.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,19 @@ def main(request, response):
response.headers.append(b"Access-Control-Allow-Headers", b"*")
response.headers.append(b"Access-Control-Expose-Headers", b"*")

response.headers.append(b"Accept-CH", b"device-memory")
response.headers.append(b"Accept-CH", b"sec-ch-device-memory,device-memory")

critical = b"device-memory"
critical = b"sec-ch-device-memory,device-memory"
if(request.GET.first(b"mismatch", None) is not None):
critical = b"viewport-width"
critical = b"sec-ch-viewport-width,viewport-width"

response.headers.append(b"Critical-CH", critical)

response.headers.append(b"Cache-Control", b"no-store")

result = "FAIL"

if b"device-memory" in request.headers:
if b"sec-ch-device-memory" in request.headers and b"device-memory" in request.headers:
result = "PASS"

token = request.GET.first(b"token", None)
Expand All @@ -37,7 +37,7 @@ def main(request, response):
request.server.stash.put(token, count)
result = str(count)

if b"viewport-width" in request.headers:
if b"sec-ch-viewport-width" in request.headers and b"viewport-width" in request.headers:
result = "MISMATCH"

response.content = "<script>window.postMessage('{0}', '*')</script>".format(result)
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<html>
<meta http-equiv="Accept-CH" content="DPR Width">
<meta http-equiv="Accept-CH" content="Sec-CH-DPR Sec-CH-Width">
<title>Accept-CH malformed http-equiv test</title>
<body>
<script src="/resources/testharness.js"></script>
Expand All @@ -14,8 +14,11 @@
// since Accept-CH value in http-equiv is malformed (includes whitespace
// between attributes instead of comma).
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("dpr-received"), "dpr-received");
assert_false(r.headers.has("dpr-deprecated-received"), "dpr-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");
assert_false(r.headers.has("rtt-received"), "rtt-received");
assert_false(r.headers.has("downlink-received"), "downlink-received");
assert_false(r.headers.has("ect-received"), "ect-received");
Expand Down
5 changes: 4 additions & 1 deletion client-hints/http-equiv-accept-ch-merge.https.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<html>
<head>
<meta http-equiv="Accept-CH" content="viewport-width, rtt">
<meta http-equiv="Accept-CH" content="sec-ch-viewport-width, viewport-width, rtt">
<meta http-equiv="Accept-CH" content="downlink, ect, sec-ch-prefers-color-scheme">
<body>
<script src="/resources/testharness.js"></script>
Expand All @@ -18,8 +18,11 @@
assert_equals(r.status, 200)
// Verify that the browser includes client hints in the headers.
assert_true(r.headers.has("device-memory-received"), "device-memory-received");
assert_true(r.headers.has("device-memory-deprecated-received"), "device-memory-deprecated-received");
assert_true(r.headers.has("dpr-received"), "dpr-received");
assert_true(r.headers.has("dpr-deprecated-received"), "dpr-deprecated-received");
assert_true(r.headers.has("viewport-width-received"), "viewport-width-received");
assert_true(r.headers.has("viewport-width-deprecated-received"), "viewport-width-deprecated-received");

assert_true(r.headers.has("rtt-received"), "rtt-received");
var rtt = parseInt(r.headers.get("rtt-received"));
Expand Down
2 changes: 1 addition & 1 deletion client-hints/http-equiv-accept-ch-merge.https.html.headers
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
Accept-CH: device-memory, dpr
Accept-CH: sec-ch-device-memory, device-memory, sec-ch-dpr, dpr

Loading

0 comments on commit 2eb218c

Please sign in to comment.