<!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_img_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-img-request-'
+ 'in-sandboxed-iframe-inner.https.sub.html',
location.href);
url = appendExpectedKeyAndValue(url, key, value);
frame.src = url;
// We expect a message from the sandboxed iframe.
const promise = new Promise((resolve, reject) => {
window.addEventListener('message', async function handler(evt) {
if (evt.source === frame.contentWindow &&
evt.data.sharedStorageImageLoadStatus) {
document.body.removeChild(frame);
window.removeEventListener('message', handler);
if (evt.data.sharedStorageImageLoadStatus === "success") {
resolve();
} else {
reject(evt.data.sharedStorageImageLoadStatus);
}
}
});
window.addEventListener('error', () => {
reject(new Error('Load 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_img_request_in_sandboxed_iframe(
t,
/*key=*/'a',
/*value=*/'b',
/*sandbox_flags=*/'allow-scripts allow-same-origin',
/*expect_success=*/true);
}, 'test sharedStorageWritable img request in sandboxed iframe with '
+ '"allow-same-origin"');
async_test(t => {
test_shared_storage_writable_img_request_in_sandboxed_iframe(
t,
/*key=*/'c',
/*value=*/'d',
/*sandbox_flags=*/'allow-scripts',
/*expect_success=*/true);
}, 'test sharedStorageWritable img request in sandboxed iframe without '
+ '"allow-same-origin"');
</script>
</body>