summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/anonymous-iframe/local-storage-initial-empty-document.tentative.https.window.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/anonymous-iframe/local-storage-initial-empty-document.tentative.https.window.js')
-rw-r--r--testing/web-platform/tests/html/anonymous-iframe/local-storage-initial-empty-document.tentative.https.window.js74
1 files changed, 74 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/anonymous-iframe/local-storage-initial-empty-document.tentative.https.window.js b/testing/web-platform/tests/html/anonymous-iframe/local-storage-initial-empty-document.tentative.https.window.js
new file mode 100644
index 0000000000..37678ff12b
--- /dev/null
+++ b/testing/web-platform/tests/html/anonymous-iframe/local-storage-initial-empty-document.tentative.https.window.js
@@ -0,0 +1,74 @@
+// META: script=/common/get-host-info.sub.js
+// META: script=/common/utils.js
+// META: script=/common/dispatcher/dispatcher.js
+// META: script=/html/cross-origin-embedder-policy/credentialless/resources/common.js
+// META: script=./resources/common.js
+
+// This test verifies the behavior of the initial empty document nested inside
+// credentialless iframes.
+//
+// The following tree of frames and documents is used:
+// A
+// ├──B (credentialless)
+// │ └──D (initial empty document)
+// └──C (control)
+// └──E (initial empty document)
+//
+// Storage used for D and E must be different.
+promise_test(async test => {
+ const iframe_B = newIframeCredentialless(origin);
+ const iframe_C = newIframe(origin);
+
+ // Create iframe_D and store a value in localStorage.
+ const key_D = token();
+ const value_D = "value_D";
+ const queue_B = token();
+ send(iframe_B, `
+ const iframe_D = document.createElement("iframe");
+ document.body.appendChild(iframe_D);
+ iframe_D.contentWindow.localStorage.setItem("${key_D}","${value_D}");
+ send("${queue_B}", "Done");
+ `);
+
+ // Create iframe_E and store a value in localStorage.
+ const key_E = token();
+ const value_E = "value_E";
+ const queue_C = token();
+ send(iframe_C, `
+ const iframe_E = document.createElement("iframe");
+ document.body.appendChild(iframe_E);
+ iframe_E.contentWindow.localStorage.setItem("${key_E}","${value_E}");
+ send("${queue_C}", "Done");
+ `);
+
+ assert_equals(await receive(queue_B), "Done");
+ assert_equals(await receive(queue_C), "Done");
+
+ // Try to load both values from both contexts:
+ send(iframe_B, `
+ const iframe_D = document.querySelector("iframe");
+ const value_D = iframe_D.contentWindow.localStorage.getItem("${key_D}");
+ const value_E = iframe_D.contentWindow.localStorage.getItem("${key_E}");
+ send("${queue_B}", value_D);
+ send("${queue_B}", value_E);
+ `);
+ send(iframe_C, `
+ const iframe_E = document.querySelector("iframe");
+ const value_D = iframe_E.contentWindow.localStorage.getItem("${key_D}");
+ const value_E = iframe_E.contentWindow.localStorage.getItem("${key_E}");
+ send("${queue_C}", value_D);
+ send("${queue_C}", value_E);
+ `);
+
+ // Verify the credentialless iframe and the normal one do not have access to
+ // each other.
+ assert_equals(await receive(queue_B), value_D, // key_D
+ "Credentialless iframe can access credentialless context");
+ assert_equals(await receive(queue_B), "", // key_E
+ "Credentialless iframe can't access credentialled context");
+ assert_equals(await receive(queue_C), "", // key_D
+ "Credentialled iframe can't access credentialless context");
+ assert_equals(await receive(queue_C), value_E, // key_E
+ "Credentialled iframe can access credentialled context");
+}, "Local storage is correctly partitioned with regards to credentialless " +
+ "iframe in initial empty documents.");