| <!doctype html> | |
| <meta charset=utf-8> | |
| <title>localStorage: partitioned storage test</title> | |
| <meta name=help href="https://privacycg.github.io/storage-partitioning/"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <iframe id="shared-iframe" src="http://{{host}}:{{ports[http][0]}}/webstorage/resources/localstorage-about-blank-partitioned-iframe.html"></iframe> | |
| <body> | |
| <script> | |
| // Here's the set-up for this test: | |
| // Step 1. (window) set up listeners for main window. | |
| // Step 2. (window) set up load listener for same-site iframe. | |
| // Step 3. (same-site iframe) loads, send it a message to createOrGet a "userID". | |
| // Step 4. (same-site iframe) receives the message, creates the "userID". | |
| // Step 5. (window) receives "storage got set" message from same-site iframe. | |
| // Step 6. (window) opens cross-site window w/ shared (same-site to us currently) iframe. | |
| // Step 7. (cross-site iframe) loads, sends back the userID key from the iframe. | |
| // Step 8. (window) asserts that the IDs should be different, as they should have a different StorageKey. | |
| const altOrigin = "http://{{hosts[alt][]}}:{{ports[http][0]}}"; | |
| async_test(t => { | |
| let crossSiteWindow; | |
| let crossSiteID; | |
| let sameSiteID; | |
| const iframe = document.getElementById("shared-iframe"); | |
| iframe.addEventListener("load", t.step_func(e => { | |
| const payload = { | |
| command: "create ID", | |
| key: "userID", | |
| }; | |
| iframe.contentWindow.postMessage(payload, iframe.origin); | |
| }), {once: true}); | |
| window.addEventListener("message", t.step_func(e => { | |
| if (e.data.message === "ID created") { | |
| sameSiteID = e.data.userID; | |
| assert_true(typeof sameSiteID === "string"); | |
| if (location.origin !== altOrigin) { | |
| crossSiteWindow = window.open(`${altOrigin}/webstorage/localstorage-basic-partitioned.tentative.sub.html`, "", "noopener=false"); | |
| t.add_cleanup(() => crossSiteWindow.close()); | |
| } | |
| } | |
| if (e.data.message === "cross-site window iframe loaded") { | |
| crossSiteID = e.data.userID; | |
| t.step(() => { | |
| assert_true(typeof crossSiteID === "string"); | |
| assert_true(sameSiteID !== crossSiteID, "IDs pulled from two partitioned iframes are different.") | |
| }); | |
| // clean up after ourselves. | |
| iframe.contentWindow.localStorage.clear(); | |
| crossSiteWindow.postMessage({command: "clearStorage"}, altOrigin); | |
| t.done(); | |
| }; | |
| })); | |
| }, "Simple test for partitioned localStorage"); | |
| </script> | |
| </body> |