mirror of
https://github.com/servo/servo.git
synced 2025-06-25 17:44:33 +01:00
134 lines
3.7 KiB
HTML
134 lines
3.7 KiB
HTML
<!DOCTYPE html>
|
|
<title>Subframe loading from Web Bundles</title>
|
|
<link
|
|
rel="help"
|
|
href="https://github.com/WICG/webpackage/blob/main/explainers/subresource-loading.md"
|
|
/>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="../resources/test-helpers.js"></script>
|
|
<body>
|
|
<script>
|
|
setup(() => {
|
|
assert_true(HTMLScriptElement.supports("webbundle"));
|
|
});
|
|
|
|
promise_test(async (t) => {
|
|
const bundle_url = "../resources/wbn/uuid-in-package.wbn";
|
|
const frame_url = "uuid-in-package:429fcc4e-0696-4bad-b099-ee9175f023ae";
|
|
const iframe = await createWebBundleElementAndIframe(
|
|
t,
|
|
bundle_url,
|
|
frame_url
|
|
);
|
|
// The iframe is cross-origin. So accessing iframe.contentWindow.location
|
|
// should throw a SecurityError.
|
|
assert_throws_dom("SecurityError", () => {
|
|
iframe.contentWindow.location.href;
|
|
});
|
|
}, "The uuid-in-package: URL iframe must be cross-origin.");
|
|
|
|
uuid_iframe_test(
|
|
"location.href",
|
|
"uuid-in-package:429fcc4e-0696-4bad-b099-ee9175f023ae",
|
|
"location.href in opaque-origin iframe."
|
|
);
|
|
|
|
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."
|
|
);
|
|
|
|
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."
|
|
);
|
|
|
|
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."
|
|
);
|
|
|
|
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."
|
|
);
|
|
|
|
uuid_iframe_test(
|
|
"window.caches === undefined",
|
|
true,
|
|
"window.caches should be undefined."
|
|
);
|
|
|
|
function uuid_iframe_test(code, expected, name) {
|
|
promise_test(async (t) => {
|
|
const bundle_url = "../resources/wbn/uuid-in-package.wbn";
|
|
const frame_url =
|
|
"uuid-in-package:429fcc4e-0696-4bad-b099-ee9175f023ae";
|
|
const iframe = await createWebBundleElementAndIframe(
|
|
t,
|
|
bundle_url,
|
|
frame_url
|
|
);
|
|
assert_equals(await evalInIframe(iframe, code), expected);
|
|
}, name + "uuid-in-package");
|
|
}
|
|
|
|
async function createWebBundleElementAndIframe(t, bundle_url, frame_url) {
|
|
const element = createWebBundleElement(bundle_url, [frame_url]);
|
|
document.body.appendChild(element);
|
|
const iframe = document.createElement("iframe");
|
|
t.add_cleanup(() => {
|
|
document.body.removeChild(element);
|
|
document.body.removeChild(iframe);
|
|
});
|
|
iframe.src = frame_url;
|
|
const load_promise = new Promise((resolve) => {
|
|
iframe.addEventListener("load", resolve);
|
|
});
|
|
document.body.appendChild(iframe);
|
|
await load_promise;
|
|
return iframe;
|
|
}
|
|
</script>
|
|
</body>
|