Source code
Revision control
Copy as Markdown
Other Tools
<!doctype html>
<body>
<script src=/resources/testharness.js></script>
<script src=/common/utils.js></script>
<script src=/fenced-frame/resources/utils.js></script>
<script src=/shared-storage/resources/util.js></script>
<script src=/shared-storage/resources/util.sub.js></script>
<script src=/service-workers/service-worker/resources/test-helpers.sub.js></script>
<script>
const INTERMEDIATE_FRAME_SUFFIX =
'able-fetch-request-fallback-to-network-iframe.https.html'
const ORIGIN = new URL("", location.href).origin;
window.addEventListener('message', async function handler(event) {
const data = event.data;
if (data.script && data.scope && data.port) {
var absoluteScope = (new URL(data.scope, window.location).href);
let oldReg =await navigator.serviceWorker.getRegistration(data.scope);
if (oldReg && oldReg.scope === absoluteScope) {
await oldReg.unregister();
}
let reg = await navigator.serviceWorker.register(data.script,
{ scope: data.scope });
let worker = reg.installing;
await new Promise(function(resolve) {
worker.addEventListener('statechange', function() {
if (worker.state == 'activated') {
resolve();
}
});
});
assert_not_equals(worker, null, 'worker is installing');
let result = await loadNestedSharedStorageFrameInNewFrame({
key: 'c', value: 'd',
hasSharedStorageWritableAttribute: true,
// Same-origin to this frame, cross-origin to top.
isSameOrigin: true,
});
const urls = [
{
"url": ORIGIN + data.scope + INTERMEDIATE_FRAME_SUFFIX,
"mode": "navigate",
"SSWHeader": "null"
},
{
"url": ORIGIN + "/resources/testharness.js",
"mode": "no-cors",
"SSWHeader": "null"
},
{
"url": ORIGIN + result.nestedFrameUrl,
"mode": "navigate",
"SSWHeader": "null"
},
];
await checkInterceptedUrls(worker, urls);
await verifyKeyValueForOrigin('c', 'd', ORIGIN);
await deleteKeyForOrigin('c', ORIGIN);
data.port.postMessage({msg: 'test completed'});
reg.unregister()
window.removeEventListener('message', handler);
}
});
</script>
</body>