46 lines
2 KiB
JavaScript
46 lines
2 KiB
JavaScript
// META: script=/resources/testdriver.js
|
|
// META: script=/resources/testdriver-vendor.js
|
|
// META: script=/storage-access-api/helpers.js
|
|
|
|
'use strict';
|
|
|
|
// Spec: https://explainers-by-googlers.github.io/partitioned-popins/
|
|
// Step 1 (main-window) Set up listener to resolve messages as they come in.
|
|
// Step 2 (main-window) Open window for other origin.
|
|
// Step 3 (other-window) Write first-party localStorage key and report success.
|
|
// Step 4 (main-window) Embed iframe for other origin.
|
|
// Step 5 (main-iframe) Write third-party localStorage key and report success.
|
|
// Step 6 (main-window) Open partitioned popin for other origin.
|
|
// Step 7 (main-popin) Check localStorage for first-/third-party keys and report success.
|
|
// Step 8 (main-window) Cleanup.
|
|
|
|
async_test(t => {
|
|
const id = String(Date.now());
|
|
// Step 1
|
|
window.addEventListener("message", t.step_func(e => {
|
|
switch (e.data.type) {
|
|
case 'window-set':
|
|
// Step 4
|
|
assert_equals(e.data.message, "Set first-party data");
|
|
const iframe = document.createElement("iframe");
|
|
iframe.src = "https://{{hosts[alt][]}}:{{ports[https][0]}}/partitioned-popins/resources/partitioned-popins.localStorage-iframe.html?id="+id;
|
|
document.body.appendChild(iframe);
|
|
break;
|
|
case 'iframe-set':
|
|
// Step 6
|
|
assert_equals(e.data.message, "Set third-party data");
|
|
window.open("https://{{hosts[alt][]}}:{{ports[https][0]}}/partitioned-popins/resources/partitioned-popins.localStorage-popin.html?id="+id, '_blank', 'popin');
|
|
break;
|
|
case 'popin-read':
|
|
// Step 8
|
|
assert_equals(e.data.message, "Found:ThirdParty-FirstPartyRSA-");
|
|
t.done();
|
|
break;
|
|
}
|
|
}));
|
|
|
|
MaybeSetStorageAccess("*", "*", "blocked").then(() => {
|
|
// Step 2
|
|
window.open("https://{{hosts[alt][]}}:{{ports[https][0]}}/partitioned-popins/resources/partitioned-popins.localStorage-window.html?id="+id, '_blank', 'popup');
|
|
});
|
|
}, "Verify Partitioned Popins only have access to third-party localStorage");
|