blob: f6f2b769d0f1230f225c8625a3982fea1bd4b15e [file] [log] [blame]
<!DOCTYPE html>
<title>Subframe loading from Web Bundles</title>
<link
rel="help"
href="https://github.com/WICG/webpackage/blob/master/explainers/subresource-loading.md"
/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
const frame_url = 'urn:uuid:429fcc4e-0696-4bad-b099-ee9175f023ae';
urn_uuid_iframe_test(
'location.href',
frame_url,
'location.href in urn uuid iframe.');
urn_uuid_iframe_test(
'(' + (() => {
try {
let result = window.localStorage;
return 'no error';
} catch (e) {
return e.name;
}
}).toString() + ')()',
'SecurityError',
'Accesing window.localStorage should throw a SecurityError.');
urn_uuid_iframe_test(
'(' + (() => {
try {
let result = window.sessionStorage;
return 'no error';
} catch (e) {
return e.name;
}
}).toString() + ')()',
'SecurityError',
'Accesing window.sessionStorage should throw a SecurityError.');
urn_uuid_iframe_test(
'(' + (() => {
try {
let result = document.cookie;
return 'no error';
} catch (e) {
return e.name;
}
}).toString() + ')()',
'SecurityError',
'Accesing document.cookie should throw a SecurityError.');
urn_uuid_iframe_test(
'(' + (() => {
try {
let request = window.indexedDB.open("db");
return 'no error';
} catch (e) {
return e.name;
}
}).toString() + ')()',
'SecurityError',
'Opening an indexedDB should throw a SecurityError.');
urn_uuid_iframe_test(
'window.caches === undefined',
true,
'window.caches should be undefined.');
function urn_uuid_iframe_test(code, expected, name) {
promise_test(async () => {
const link = document.createElement('link');
link.rel = 'webbundle';
link.href = '../resources/wbn/urn-uuid.wbn';
link.resources = frame_url;
document.body.appendChild(link);
const iframe = document.createElement('iframe');
iframe.src = frame_url;
const load_promise = new Promise((resolve) => {
iframe.addEventListener('load', resolve);
});
document.body.appendChild(iframe);
await load_promise;
assert_equals(
await evalInIframe(iframe, code),
expected);
document.body.removeChild(link);
document.body.removeChild(iframe);
}, name);
}
async function evalInIframe(iframe, code) {
const message_promise = new Promise((resolve) => {
const listener = (e) => {
window.removeEventListener('message', listener);
resolve(e.data);
}
window.addEventListener('message', listener);
});
iframe.contentWindow.postMessage(code,'*');
return message_promise;
}
</script>
</body>