-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
LazyLoad: Add external web platform tests for the "loading" attribute.
This CL includes tests for: - Testing that images and iframes with the attribute loading="lazy" are deferred until they come into view - Testing that images and iframes with the attribute loading="eager" are loaded immediately Bug: 916260 Change-Id: I323faa31c7683663d0d0136a719cf83c25758ad6 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1417117 Commit-Queue: Dominic Farolino <dom@chromium.org> Reviewed-by: Yoav Weiss <yoavweiss@chromium.org> Reviewed-by: Tarun Bansal <tbansal@chromium.org> Reviewed-by: Dominic Farolino <dom@chromium.org> Cr-Commit-Position: refs/heads/master@{#676804}
- Loading branch information
1 parent
9daa6ff
commit 9919d0f
Showing
6 changed files
with
196 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
<!DOCTYPE html> | ||
<head> | ||
<title>Iframes with loading='eager' load immediately regardless of their position with respect to the viewport.</title> | ||
<link rel="author" title="Scott Little" href="mailto:sclittle@chromium.org"> | ||
<link rel="help" href="https://github.com/scott-little/lazyload"> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
</head> | ||
|
||
<!-- | ||
Marked as tentative until https://github.com/whatwg/html/pull/3752 is landed. | ||
--> | ||
|
||
<script> | ||
const t = async_test("Test that iframes with loading='eager' load immediately regardless of their position with respect to the viewport."); | ||
|
||
let has_in_viewport_loaded = false; | ||
const in_viewport_iframe_onload = t.step_func(function() { | ||
assert_false(has_in_viewport_loaded, "The in_viewport element should load only once."); | ||
has_in_viewport_loaded = true; | ||
}); | ||
|
||
let has_below_viewport_loaded = false; | ||
const below_viewport_iframe_onload = t.step_func(function() { | ||
assert_false(has_below_viewport_loaded, "The below_viewport element should load only once."); | ||
has_below_viewport_loaded = true; | ||
}); | ||
|
||
window.addEventListener("load", t.step_func_done(function() { | ||
assert_true(has_in_viewport_loaded, "The in_viewport element should have loaded before window.load()."); | ||
assert_true(has_below_viewport_loaded, "The below_viewport element should have loaded before window.load()."); | ||
})); | ||
</script> | ||
|
||
<body> | ||
<iframe id="in_viewport" src="resources/subframe.html?first" loading="eager" width="200px" height="100px" onload="in_viewport_iframe_onload();"> | ||
</iframe> | ||
<div style="height:10000px;"></div> | ||
|
||
<!-- | ||
The below_viewport element loads very slowly in order to ensure that the | ||
window load event is blocked on it. | ||
--> | ||
<iframe id="below_viewport" src="resources/subframe.html?pipe=trickle(d1)" loading="eager" width="200px" height="100px" onload="below_viewport_iframe_onload();"> | ||
</iframe> | ||
</body> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
<!DOCTYPE html> | ||
<head> | ||
<title>Iframes with loading='lazy' load when in the viewport</title> | ||
<link rel="author" title="Scott Little" href="mailto:sclittle@chromium.org"> | ||
<link rel="help" href="https://github.com/scott-little/lazyload"> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
</head> | ||
|
||
<!-- | ||
Marked as tentative until https://github.com/whatwg/html/pull/3752 is landed. | ||
--> | ||
|
||
<script> | ||
const t = async_test("Test that iframes with loading='lazy' load once they enter the viewport."); | ||
|
||
let has_window_loaded = false; | ||
let has_in_viewport_loaded = false; | ||
|
||
const in_viewport_iframe_onload = t.step_func(function() { | ||
assert_false(has_in_viewport_loaded, "The in_viewport element should load only once."); | ||
has_in_viewport_loaded = true; | ||
}); | ||
|
||
window.addEventListener("load", t.step_func(function() { | ||
assert_true(has_in_viewport_loaded, "The in_viewport element should have loaded before window.load()."); | ||
assert_false(has_window_loaded, "The window.load() event should only fire once."); | ||
has_window_loaded = true; | ||
document.getElementById("below_viewport").scrollIntoView(); | ||
})); | ||
|
||
const below_viewport_iframe_onload = t.step_func_done(function() { | ||
assert_true(has_window_loaded, "The window.load() event should have fired before below_viewport loaded."); | ||
}); | ||
</script> | ||
|
||
<body> | ||
<iframe id="in_viewport" src="resources/subframe.html?first" loading="lazy" width="200px" height="100px" onload="in_viewport_iframe_onload();"> | ||
</iframe> | ||
<div style="height:10000px;"></div> | ||
<iframe id="below_viewport" src="resources/subframe.html?second" loading="lazy" width="200px" height="100px" onload="below_viewport_iframe_onload();"> | ||
</iframe> | ||
|
||
<!-- | ||
This async script loads very slowly in order to ensure that, if the | ||
below_viewport element has started loading, it has a chance to finish | ||
loading before window.load() happens, so that the test will dependably fail | ||
in that case instead of potentially passing depending on how long different | ||
resource fetches take. | ||
--> | ||
<script async src="/common/slow.py"></script> | ||
</body> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
<!DOCTYPE html> | ||
<head> | ||
<title>Images with loading='eager' load immediately regardless of their position with respect to the viewport</title> | ||
<link rel="author" title="Scott Little" href="mailto:sclittle@chromium.org"> | ||
<link rel="help" href="https://github.com/scott-little/lazyload"> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
</head> | ||
|
||
<!-- | ||
Marked as tentative until https://github.com/whatwg/html/pull/3752 is landed. | ||
--> | ||
|
||
<script> | ||
const t = async_test("Test that images with loading='eager' load immediately regardless of their position with respect to the viewport."); | ||
|
||
let has_in_viewport_loaded = false; | ||
const in_viewport_img_onload = t.step_func(function() { | ||
assert_false(has_in_viewport_loaded, "The in_viewport element should load only once."); | ||
has_in_viewport_loaded = true; | ||
}); | ||
|
||
let has_below_viewport_loaded = false; | ||
const below_viewport_img_onload = t.step_func(function() { | ||
assert_false(has_below_viewport_loaded, "The below_viewport element should load only once."); | ||
has_below_viewport_loaded = true; | ||
}); | ||
|
||
window.addEventListener("load", t.step_func_done(function() { | ||
assert_true(has_in_viewport_loaded, "The in_viewport element should have loaded before window.load()."); | ||
assert_true(has_below_viewport_loaded, "The below_viewport element should have loaded before window.load()."); | ||
})); | ||
|
||
</script> | ||
|
||
<body> | ||
<img id="in_viewport" src="resources/image.png?first" loading="eager" onload="in_viewport_img_onload();"> | ||
<div style="height:10000px;"></div> | ||
<!-- | ||
The below_viewport element loads very slowly in order to ensure that the | ||
window load event is blocked on it. | ||
--> | ||
<img id="below_viewport" src="resources/image.png?pipe=trickle(d2)" loading="eager" onload="below_viewport_img_onload();"> | ||
</body> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
<!DOCTYPE html> | ||
<head> | ||
<title>Images with loading='lazy' load when in the viewport</title> | ||
<link rel="author" title="Scott Little" href="mailto:sclittle@chromium.org"> | ||
<link rel="help" href="https://github.com/scott-little/lazyload"> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
</head> | ||
|
||
<!-- | ||
Marked as tentative until https://github.com/whatwg/html/pull/3752 is landed. | ||
--> | ||
|
||
<script> | ||
const t = async_test("Test that images with loading='lazy' load once they enter the viewport."); | ||
|
||
let has_in_viewport_loaded = false; | ||
let has_window_loaded = false; | ||
|
||
const in_viewport_img_onload = t.step_func(function() { | ||
assert_false(has_in_viewport_loaded, "The in_viewport element should load only once."); | ||
has_in_viewport_loaded = true; | ||
}); | ||
|
||
window.addEventListener("load", t.step_func(function() { | ||
assert_true(has_in_viewport_loaded, "The in_viewport element should have loaded before window.load()."); | ||
assert_false(has_window_loaded, "The window.load() event should only fire once."); | ||
has_window_loaded = true; | ||
document.getElementById("below_viewport").scrollIntoView(); | ||
})); | ||
|
||
const below_viewport_img_onload = t.step_func_done(function() { | ||
assert_true(has_window_loaded, "The window.load() event should have fired before below_viewport loaded."); | ||
}); | ||
</script> | ||
|
||
<body> | ||
<img id="in_viewport" src="resources/image.png?first" loading="lazy" onload="in_viewport_img_onload();"> | ||
<div style="height:10000px;"></div> | ||
<img id="below_viewport" src="resources/image.png?second" loading="lazy" onload="below_viewport_img_onload();"> | ||
|
||
<!-- | ||
This async script loads very slowly in order to ensure that, if the | ||
below_viewport element has started loading, it has a chance to finish | ||
loading before window.load() happens, so that the test will dependably fail | ||
in that case instead of potentially passing depending on how long different | ||
resource fetches take. | ||
--> | ||
<script async src="/common/slow.py"></script> | ||
</body> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
<!DOCTYPE html> | ||
<body> | ||
<p>Subframe</p> | ||
</body> |