summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /testing/web-platform/tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js
parentInitial commit. (diff)
downloadfirefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz
firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js')
-rw-r--r--testing/web-platform/tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js133
1 files changed, 133 insertions, 0 deletions
diff --git a/testing/web-platform/tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js b/testing/web-platform/tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js
new file mode 100644
index 0000000000..b0bf39250c
--- /dev/null
+++ b/testing/web-platform/tests/client-hints/accept-ch-stickiness/resources/accept-ch-test.js
@@ -0,0 +1,133 @@
+const echo = "/client-hints/accept-ch-stickiness/resources/echo-client-hints-received.py";
+const accept = "/client-hints/accept-ch-stickiness/resources/accept-ch.html";
+const accept_blank = "/client-hints/accept-ch-stickiness/resources/accept-ch-blank.html";
+const no_accept = "/client-hints/accept-ch-stickiness/resources/no-accept-ch.html";
+const httpequiv_accept = "/client-hints/accept-ch-stickiness/resources/http-equiv-accept-ch.html";
+const metaequiv_delegate = "/client-hints/accept-ch-stickiness/resources/meta-equiv-delegate-ch.html";
+const expect = "/client-hints/accept-ch-stickiness/resources/expect-client-hints-headers.html"
+const do_not_expect = "/client-hints/accept-ch-stickiness/resources/do-not-expect-client-hints-headers.html"
+
+const host_info = get_host_info();
+
+function verify_initial_state(initial_url, test_name) {
+ promise_test(t => {
+ return fetch(initial_url).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("device-memory-deprecated-received"),
+ "device-memory-deprecated-received");
+ });
+ }, test_name + " precondition: Test that the browser does not have client " +
+ "hints preferences cached");
+}
+
+function verify_iframe_state(expect_url, test_name) {
+ promise_test(t => {
+ return new Promise(resolve => {
+ window.addEventListener('message', t.step_func(function(e) {
+ assert_equals(e.data, "PASS", "message from opened frame");
+ fetch("/client-hints/accept-ch-stickiness/resources/clear-site-data.html").then(resolve);
+ }));
+ const iframe = document.createElement("iframe");
+ iframe.src = expect_url;
+ document.body.appendChild(iframe);
+ });
+ }, test_name + " got client hints according to expectations.");
+}
+
+function verify_navigation_state(expect_url, test_name) {
+ promise_test(t => {
+ return new Promise(resolve => {
+ let win;
+ window.addEventListener('message', t.step_func(function(e) {
+ win.close();
+ assert_equals(e.data, "PASS", "message from opened page");
+ fetch("/client-hints/accept-ch-stickiness/resources/clear-site-data.html").then(resolve);
+ }));
+ // Open a new window. Verify that the user agent attaches client hints.
+ win = window.open(expect_url);
+ assert_not_equals(win, null, "Popup windows not allowed?");
+ });
+ }, test_name + " got client hints according to expectations.");
+}
+
+function verify_subresource_state(expect_url, test_name) {
+ promise_test(t => {
+ return new Promise(resolve => {
+ fetch(expect_url).then(response => response.text()).then(t.step_func(text => {
+ assert_true(text.includes("PASS"));
+ fetch("/client-hints/accept-ch-stickiness/resources/clear-site-data.html").then(resolve);
+ }));
+ });
+ }, test_name + " got client hints according to expectations.");
+}
+
+function verify_syncxhr_state(expect_url, test_name) {
+ promise_test(t => {
+ return new Promise(resolve => {
+ const xhr = new XMLHttpRequest();
+ xhr.onreadystatechange = t.step_func(() => {
+ if (xhr.readyState != XMLHttpRequest.DONE) {
+ return;
+ }
+ assert_true(xhr.responseText.includes("PASS"));
+ fetch("/client-hints/accept-ch-stickiness/resources/clear-site-data.html").then(resolve);
+ });
+ xhr.open("GET", expect_url, false /* async */);
+ xhr.send();
+ });
+ }, test_name + " got client hints according to expectations.");
+}
+
+function attempt_set(test_type, accept_url, test_name, test_name_suffix) {
+ promise_test(t => {
+ return new Promise(resolve => {
+ if (test_type == "navigation") {
+ const win = window.open(accept_url);
+ assert_not_equals(win, null, "Popup windows not allowed?");
+ addEventListener('message', t.step_func(() => {
+ win.close();
+ resolve();
+ }), false);
+ } else if (test_type == "iframe") {
+ const iframe = document.createElement("iframe");
+ iframe.addEventListener('load', t.step_func(() => {
+ resolve();
+ }), false);
+ iframe.src = accept_url;
+ document.body.appendChild(iframe);
+ } else if (test_type == "subresource") {
+ fetch(accept_url).then(r => {
+ assert_equals(r.status, 200, "subresource response status")
+ // Verify that the browser did not include client hints in the request
+ // headers, just because we can..
+ 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 {
+ assert_unreached("unknown test type");
+ }
+ });
+ }, test_name + " set Accept-CH" + test_name_suffix);
+}
+
+const run_test = test => {
+ // 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.
+ verify_initial_state(test.initial_url, test.name);
+
+ // Then, attempt to set Accept-CH
+ attempt_set(test.type, test.accept_url, test.name, "");
+
+ // Finally, verify that CH are actually sent (or not) on requests
+ verify_navigation_state(test.expect_url, test.name);
+};
+