Add iframe lazy load event semantics test
This CL adds WPTs asserting that in-viewport loading=lazy iframes do not
block the outer window load event.
The test accompanies the spec change made at:
https://github.com/whatwg/html/pull/5579.
R=sclittle@chromium.org
Bug: 1101175
Change-Id: I5e337f6c87c8198e8e5bae5a32263698fb3daf28
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2277384
Commit-Queue: Dominic Farolino <dom@chromium.org>
Reviewed-by: Scott Little <sclittle@chromium.org>
Cr-Commit-Position: refs/heads/master@{#784381}
diff --git a/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-load-event.tentative.html b/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-load-event.tentative.html
new file mode 100644
index 0000000..bf98bf7
--- /dev/null
+++ b/html/semantics/embedded-content/the-iframe-element/iframe-loading-lazy-load-event.tentative.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<head>
+ <title>In-viewport loading=lazy iframes do not block the window load event</title>
+ <link rel="author" title="Dom Farolino" href="mailto:dom@chromium.org">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="../resources/common.js"></script>
+</head>
+
+<body>
+ <!-- This image blocks the window load event for 1 second -->
+ <img src="/common/square.png?pipe=trickle(d1)">
+
+ <!-- These iframes must load because they intersect the viewport, but they must
+ not block the window load event, because they are loading=lazy -->
+ <iframe id="visible" loading="lazy"
+ src="resources/subframe.html?visible&pipe=trickle(d3)"></iframe>
+ <iframe id="visibility_hidden" style="visibility:hidden;" loading="lazy"
+ src="resources/subframe.html?visibility_hidden&pipe=trickle(d3)"></iframe>
+</body>
+
+<script>
+ const visible_iframe = document.querySelector('#visible');
+ const hidden_iframe = document.querySelector('#visibility_hidden');
+
+ const visible_iframe_t =
+ async_test('In-viewport loading=lazy iframe does not block the load event');
+
+ const hidden_iframe_t =
+ async_test('In-viewport loading=lazy visibility:hidden iframe does not ' +
+ 'block the load event');
+
+ let has_window_loaded = false;
+ window.addEventListener("load", () => {
+ has_window_loaded = true;
+ });
+
+ visible_iframe.onload = visible_iframe_t.step_func_done(() => {
+ assert_true(has_window_loaded,
+ "The visible iframe should not block the load event");
+ });
+
+ hidden_iframe.onload = hidden_iframe_t.step_func_done(() => {
+ assert_true(has_window_loaded,
+ "The hidden iframe should not block the load event");
+ });
+</script>