summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/image-loading-lazy-relevant-mutations.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/semantics/embedded-content/the-img-element/image-loading-lazy-relevant-mutations.html')
-rw-r--r--testing/web-platform/tests/html/semantics/embedded-content/the-img-element/image-loading-lazy-relevant-mutations.html83
1 files changed, 83 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/image-loading-lazy-relevant-mutations.html b/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/image-loading-lazy-relevant-mutations.html
new file mode 100644
index 0000000000..3a2662451e
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/image-loading-lazy-relevant-mutations.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<head>
+ <title>Relevant mutations on deferred loading=lazy images should not trigger
+ a request</title>
+ <link rel="author" title="Dom Farolino" href="mailto:dom@chromium.org">
+ <link rel="help" href="https://html.spec.whatwg.org/multipage/images.html#updating-the-image-data">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+
+<script>
+ let below_viewport_1_loaded = false,
+ below_viewport_2_loaded = false,
+ below_viewport_3_loaded = false
+
+ // For general lazy loading behavior.
+ promise_test(() => {
+ // When the page loads, start the rest of the tests.
+ return new Promise(resolve => {
+ window.addEventListener("load", e => {
+ const kAssertion = 'image should never load';
+ assert_false(below_viewport_1_loaded, `below-viewport-1 ${kAssertion}`);
+ assert_false(below_viewport_2_loaded, `below-viewport-2 ${kAssertion}`);
+ assert_false(below_viewport_3_loaded, `below-viewport-3 ${kAssertion}`);
+ resolve();
+ });
+ });
+ }, "Images are lazyloaded");
+
+ // For `referrerPolicy` attribute mutations.
+ promise_test(t => {
+ return new Promise((resolve, reject) => {
+ const below_viewport_1 = document.querySelector('img#below-viewport-1');
+ below_viewport_1.onload = reject;
+ below_viewport_1.onerror = reject;
+ t.step_timeout(resolve, 1000);
+
+ below_viewport_1.referrerPolicy = 'no-referrer';
+ });
+ }, "Image referrerPolicy mutation does not cause deferred loading=lazy " +
+ "images to be fetched");
+
+ // For `crossOrigin` attribute mutations.
+ promise_test(t => {
+ return new Promise((resolve, reject) => {
+ const below_viewport_2 = document.querySelector('img#below-viewport-2');
+ below_viewport_2.onload = reject;
+ below_viewport_2.onerror = reject;
+ t.step_timeout(resolve, 1000);
+
+ below_viewport_2.crossOrigin = 'anonymous';
+ });
+ }, "Image crossOrigin mutation does not cause deferred loading=lazy " +
+ "images to be fetched");
+
+ // For `src` attribute mutations.
+ promise_test(t => {
+ return new Promise((resolve, reject) => {
+ const below_viewport_3 = document.querySelector('img#below-viewport-3');
+ below_viewport_3.onload = reject;
+ below_viewport_3.onerror = reject;
+ t.step_timeout(resolve, 1000);
+
+ below_viewport_3.src = "resources/image.png?relevant-mutations-change";
+ });
+ }, "Image src mutation does not cause deferred loading=lazy " +
+ "images to be fetched");
+</script>
+
+<body>
+ <div style="height:1000vh;"></div>
+ <img id="below-viewport-1" src="resources/image.png?relevant-mutations-1" loading="lazy"
+ onload="below_viewport_1_loaded = true"
+ onerror="below_viewport_1_loaded = true">
+
+ <img id="below-viewport-2" src="resources/image.png?relevant-mutations-2" loading="lazy"
+ onload="below_viewport_2_loaded = true"
+ onerror="below_viewport_2_loaded = true">
+
+ <img id="below-viewport-3" src="resources/image.png?relevant-mutations-3" loading="lazy"
+ onload="below_viewport_3_loaded = true"
+ onerror="below_viewport_3_loaded = true">
+</body>