-
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
- Loading branch information
1 parent
cc0f6ff
commit 490f60b
Showing
7 changed files
with
250 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,62 @@ | ||
<!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:[email protected]"> | ||
<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. | ||
--> | ||
|
||
<body> | ||
<iframe id="in_viewport" src="resources/same-origin-subframe.html?second" loading="eager" width="200px" height="100px"> | ||
</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="slow-redirect.py?location=resources%2Fsame-origin-subframe.html" loading="eager" width="200px" height="100px"> | ||
</iframe> | ||
</body> | ||
|
||
<script> | ||
let t = async_test("Test that iframes with loading='eager' load immediately regardless of their position with respect to the viewport."); | ||
|
||
let has_in_viewport_element_loaded = false; | ||
let has_in_viewport_subframe_window_loaded = false; | ||
let in_viewport_frame = document.getElementById("in_viewport"); | ||
in_viewport_frame.testOnSubframeWindowLoad = function() { | ||
assert_false(has_in_viewport_element_loaded); | ||
assert_false(has_in_viewport_subframe_window_loaded); | ||
has_in_viewport_subframe_window_loaded = true; | ||
}; | ||
in_viewport_frame.addEventListener("load", t.step_func(function() { | ||
assert_false(has_in_viewport_element_loaded); | ||
assert_true(has_in_viewport_subframe_window_loaded); | ||
has_in_viewport_element_loaded = true; | ||
})); | ||
|
||
let has_below_viewport_element_loaded = false; | ||
let has_below_viewport_subframe_window_loaded = false; | ||
let below_viewport_frame = document.getElementById("below_viewport"); | ||
below_viewport_frame.testOnSubframeWindowLoad = function() { | ||
assert_false(has_below_viewport_element_loaded); | ||
assert_false(has_below_viewport_subframe_window_loaded); | ||
has_below_viewport_subframe_window_loaded = true; | ||
}; | ||
below_viewport_frame.addEventListener("load", t.step_func(function() { | ||
assert_false(has_below_viewport_element_loaded); | ||
assert_true(has_below_viewport_subframe_window_loaded); | ||
has_below_viewport_element_loaded = true; | ||
})); | ||
|
||
window.addEventListener("load", t.step_func_done(function() { | ||
assert_true(has_in_viewport_element_loaded); | ||
assert_true(has_below_viewport_element_loaded); | ||
})); | ||
</script> |
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,72 @@ | ||
<!DOCTYPE html> | ||
<head> | ||
<title>Iframes with loading='lazy' load when in the viewport</title> | ||
<link rel="author" title="Scott Little" href="mailto:[email protected]"> | ||
<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. | ||
--> | ||
|
||
<body> | ||
<iframe id="in_viewport" src="resources/same-origin-subframe.html?first" loading="lazy" width="200px" height="100px"> | ||
</iframe> | ||
<div style="height:10000px;"></div> | ||
<iframe id="below_viewport" src="resources/same-origin-subframe.html?second" loading="lazy" width="200px" height="100px"> | ||
</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> | ||
|
||
<script> | ||
let t = async_test("Test that iframes with loading='lazy' load once they enter the viewport."); | ||
|
||
let has_window_loaded = false; | ||
let has_in_viewport_element_loaded = false; | ||
|
||
let has_in_viewport_subframe_window_loaded = false; | ||
let in_viewport_frame = document.getElementById("in_viewport"); | ||
in_viewport_frame.testOnSubframeWindowLoad = function() { | ||
assert_false(has_window_loaded); | ||
assert_false(has_in_viewport_element_loaded); | ||
assert_false(has_in_viewport_subframe_window_loaded); | ||
has_in_viewport_subframe_window_loaded = true; | ||
}; | ||
in_viewport_frame.addEventListener("load", t.step_func(function() { | ||
assert_false(has_window_loaded); | ||
assert_false(has_in_viewport_element_loaded); | ||
assert_true(has_in_viewport_subframe_window_loaded); | ||
has_in_viewport_element_loaded = true; | ||
})); | ||
|
||
window.addEventListener("load", t.step_func(function() { | ||
assert_false(has_window_loaded); | ||
assert_true(has_in_viewport_element_loaded); | ||
has_window_loaded = true; | ||
document.getElementById("below_viewport").scrollIntoView(); | ||
})); | ||
|
||
let has_below_viewport_subframe_window_loaded = false; | ||
let below_viewport_frame = document.getElementById("below_viewport"); | ||
below_viewport_frame.testOnSubframeWindowLoad = function() { | ||
assert_true(has_window_loaded); | ||
assert_true(has_in_viewport_element_loaded); | ||
assert_false(has_below_viewport_subframe_window_loaded); | ||
has_below_viewport_subframe_window_loaded = true; | ||
}; | ||
below_viewport_frame.addEventListener("load", t.step_func_done(function() { | ||
assert_true(has_window_loaded); | ||
assert_true(has_in_viewport_element_loaded); | ||
assert_true(has_below_viewport_subframe_window_loaded); | ||
})); | ||
</script> |
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:[email protected]"> | ||
<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. | ||
--> | ||
|
||
<body> | ||
<img id="in_viewport" src="resources/image.png?second" loading="eager"> | ||
<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="slow-redirect.py?location=resources%2Fimage.png" loading="eager"> | ||
</body> | ||
|
||
<script> | ||
let 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; | ||
document.getElementById("in_viewport").addEventListener("load", t.step_func(function() { | ||
assert_false(has_in_viewport_loaded); | ||
has_in_viewport_loaded = true; | ||
})); | ||
|
||
let has_below_viewport_loaded = false; | ||
document.getElementById("below_viewport").addEventListener("load", t.step_func(function() { | ||
assert_false(has_below_viewport_loaded); | ||
has_below_viewport_loaded = true; | ||
})); | ||
|
||
window.addEventListener("load", t.step_func_done(function() { | ||
assert_true(has_in_viewport_loaded); | ||
assert_true(has_below_viewport_loaded); | ||
})); | ||
|
||
</script> |
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>Images with loading='lazy' load when in the viewport</title> | ||
<link rel="author" title="Scott Little" href="mailto:[email protected]"> | ||
<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. | ||
--> | ||
|
||
<body> | ||
<img id="in_viewport" src="resources/image.png?first" loading="lazy"> | ||
<div style="height:10000px;"></div> | ||
<img id="below_viewport" src="resources/image.png?second" loading="lazy"> | ||
|
||
<!-- | ||
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> | ||
|
||
<script> | ||
let 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; | ||
|
||
document.getElementById("in_viewport").addEventListener("load", t.step_func(function() { | ||
assert_false(has_in_viewport_loaded); | ||
assert_false(has_window_loaded); | ||
has_in_viewport_loaded = true; | ||
})); | ||
|
||
window.addEventListener("load", t.step_func(function() { | ||
assert_true(has_in_viewport_loaded); | ||
assert_false(has_window_loaded); | ||
has_window_loaded = true; | ||
document.getElementById("below_viewport").scrollIntoView(); | ||
})); | ||
|
||
document.getElementById("below_viewport").addEventListener("load", t.step_func_done(function() { | ||
assert_true(has_in_viewport_loaded); | ||
assert_true(has_window_loaded); | ||
})); | ||
</script> |
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,10 @@ | ||
<!DOCTYPE html> | ||
<body> | ||
<p>Subframe</p> | ||
</body> | ||
|
||
<script> | ||
window.addEventListener("load", function() { | ||
window.frameElement.testOnSubframeWindowLoad(); | ||
}); | ||
</script> |
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,10 @@ | ||
import time | ||
|
||
def main(request, response): | ||
"""Simple handler that causes redirection after a 2 second wait. | ||
The request query parameter "location" is the resource to redirect to. | ||
""" | ||
time.sleep(2); | ||
response.status = 302 | ||
response.headers.set("Location", request.GET.first("location")) |