Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!doctype html>
<body>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.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>
async function
test_shared_storage_writable_fetch_request_in_sandboxed_iframe(
test, key, value, sandbox_flags, expect_success) {
// Create sandboxed iframe.
let frame = document.createElement('iframe');
frame.sandbox = sandbox_flags;
let url = new URL(
'/shared-storage/resources/'
+ 'shared-storage-writable-fetch-request-in-sandboxed-iframe-'
+ 'inner.https.sub.html',
location.href);
url = appendExpectedKeyAndValue(url, key, value);
frame.src = url;
// We expect a message to bubble up via the sandboxed iframe.
const promise = new Promise((resolve, reject) => {
window.addEventListener('message', async function handler(evt) {
if (evt.source === frame.contentWindow &&
evt.data.sharedStorageFetchStatus) {
if (expect_success) {
assert_true(!!evt.data.sharedStorageWritableHeader,
"sharedStorageWritableHeader expected in event data");
assert_equals(evt.data.sharedStorageWritableHeader, '?1');
assert_equals(evt.data.sharedStorageFetchStatus, "success");
} else {
assert_equals(evt.data.sharedStorageFetchStatus.toString(),
"TypeError: Failed to execute 'fetch' on 'Window':"
+ " sharedStorageWritable: sharedStorage operations"
+ " are not available for opaque origins.");
}
document.body.removeChild(frame);
window.removeEventListener('message', handler);
resolve();
}
});
window.addEventListener('error', () => {
reject(new Error('Navigation error'));
});
});
// Navigate and wait for notification.
document.body.appendChild(frame);
await promise;
if (expect_success) {
// Verify that the value has been set.
await verifyKeyValueForOrigin(key, value, location.origin);
} else {
// Verify that the value has not been set.
await verifyKeyNotFoundForOrigin(key, location.origin);
}
// Clean up and finish.
await sharedStorage.delete(key);
test.done();
}
async_test(t => {
test_shared_storage_writable_fetch_request_in_sandboxed_iframe(
t,
/*key=*/'a',
/*value=*/'b',
/*sandbox_flags=*/'allow-scripts allow-same-origin',
/*expect_success=*/true);
}, 'test sharedStorageWritable fetch request in sandboxed iframe with '
+ '"allow-same-origin"');
async_test(t => {
test_shared_storage_writable_fetch_request_in_sandboxed_iframe(
t,
/*key=*/'c',
/*value=*/'d',
/*sandbox_flags=*/'allow-scripts',
/*expect_success=*/true);
}, 'test sharedStorageWritable fetch request in sandboxed iframe without '
+ '"allow-same-origin"');
</script>
</body>