<!--
The about:blank iframe should be local to its initiator and inherit the
subresources loaders. In particular, it inherits the ability to load local
files.
-->
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<!-- A simple producer-consumer queue -->
<script>
setup({single_test: true});
let pendingReaders = [];
let pendingMessages= [];
let receive = function() {
return new Promise(resolve => {
if (pendingMessages.length != 0)
resolve(pendingMessages.shift());
else
pendingReaders.push(resolve);
});
}
let send = function(message) {
if (pendingReaders.length != 0)
pendingReaders.shift()(message);
else
pendingMessages.push(message)
}
</script>
<iframe name="theiframe" onload="send('iframe-load')"
onerror="send('iframe-error')"
></iframe>
<script>
let iframe = document.querySelector("iframe");
let addScript = function() {
let iframeDocument = iframe.contentWindow.document;
let script = iframeDocument.createElement("script");
script.src = "./resources/script.js";
script.onload = () => send("script-load");
script.onerror = () => send("script-error");
iframeDocument.body.appendChild(script);
};
async function test() {
// 1. Test from the initial empty document.
assert_equals(await receive(), "iframe-load");
addScript();
assert_equals(await receive(), "script-load");
// 2. Test after a manual about:blank navigation using iframe.src.
iframe.src = "about:blank"
assert_equals(await receive(), "iframe-load");
addScript();
assert_equals(await receive(), "script-load");
// 3. Navigate cross-process (e.g. not about:blank).
iframe.src="http://127.0.0.1:8000/resources/dummy.html";
assert_equals(await receive(), "iframe-load");
// 4. Retry step 2.
iframe.src = "about:blank"
assert_equals(await receive(), "iframe-load");
addScript();
assert_equals(await receive(), "script-load", "https://crbug.com/981819.");
done();
};
test();
</script>