blob: c15293b54c079dcd1a83a5a39c20d5d184396057 [file] [log] [blame]
<!DOCTYPE html>
<head>
<title>Subsequent navigations to lazily loaded iframes do not crash the renderer</title>
<link rel="author" title="Dom Farolino" href="mailto:dom@chromium.org">
<link rel="help" href="https://html.spec.whatwg.org/multipage/urls-and-fetching.html#lazy-loading-attributes">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<!-- This is used to represent the top of the viewport, so we can scroll the
below-viewport iframe out-of-view later in the test -->
<div id="top_div"></div>
<div style="height:1000vh;"></div>
<iframe id="below_viewport" loading="lazy"
src="http://{{domains[www]}}:{{ports[https][0]}}/html/semantics/embedded-content/the-iframe-element/resources/subframe.html">
</iframe>
<script>
const t = async_test();
const iframe = document.querySelector('#below_viewport');
const top_div = document.querySelector('#top_div');
let has_window_load_fired = false;
// This should be triggered first.
window.addEventListener('load', t.step_func(() => {
has_window_load_fired = true;
// Scroll the loading=lazy below-viewport iframe into view, so that it loads.
iframe.scrollIntoView();
}));
iframe.onload = t.step_func_done(async () => {
assert_true(has_window_load_fired,
"The loading=lazy below-viewport iframe should not block the " +
"window load event");
await changeIframeSourceAndScrollToTop();
});
async function changeIframeSourceAndScrollToTop() {
// Lazily load a different iframe.
iframe.src =
'http://{{domains[www2]}}:{{ports[https][0]}}/html/semantics/embedded-content/the-iframe-element/resources/subframe.html'
await new Promise(resolve => {
iframe.onload = resolve;
});
top_div.scrollIntoView();
await new Promise(resolve => {
setTimeout(resolve, 500);
});
iframe.scrollIntoView();
}
</script>
</body>