Bug 1495499 [wpt PR 13288] - Apply 'lazyload' feature policy for images, a=testonly
authorEhsan Karamad <ekaramad@chromium.org>
Tue, 16 Oct 2018 09:58:28 +0000
changeset 489992 7790718d63e600e55d8734c3b8dcc94dd5f9ea79
parent 489991 7215ff15639fafc238e36f3d9b63baa171c90806
child 489993 33acf346b32fa693369fded259061dd8d130798d
push id247
push userfmarier@mozilla.com
push dateSat, 27 Oct 2018 01:06:44 +0000
reviewerstestonly
bugs1495499, 13288, 1171374, 869492, 1251024, 599204
milestone64.0a1
Bug 1495499 [wpt PR 13288] - Apply 'lazyload' feature policy for images, a=testonly Automatic update from web-platform-testsApply 'lazyload' feature policy for images In CL 1171374 'lazyload' feature policy was introduced as a new policy-controlled feature which would modify (restrict) the usage of the lazyload attribute. The implementation only applied the feature to frame owner elements. This CL extends the policy's coverage to images as well. Bug: 869492 Change-Id: I9a2bd309ac366b75308b657d3ea129a7717ad23f Reviewed-on: https://chromium-review.googlesource.com/c/1251024 Commit-Queue: Ehsan Karamad <ekaramad@chromium.org> Reviewed-by: Fredrik Söderquist <fs@opera.com> Reviewed-by: rajendrant <rajendrant@chromium.org> Cr-Commit-Position: refs/heads/master@{#599204} -- wpt-commits: 0f5085bfa2df9ceda713e441a5b8b9484fdf2cac wpt-pr: 13288
testing/web-platform/tests/feature-policy/experimental-features/lazyload/lazyload-disabled-image-tentative.sub.html
testing/web-platform/tests/feature-policy/experimental-features/lazyload/lazyload-disabled-image-tentative.sub.html.headers
testing/web-platform/tests/feature-policy/experimental-features/lazyload/lazyload-enabled-image-tentative.sub.html
testing/web-platform/tests/feature-policy/experimental-features/lazyload/lazyload-image-attribute-on-sanity-check-tentative.sub.html
testing/web-platform/tests/feature-policy/experimental-features/resources/common.js
testing/web-platform/tests/feature-policy/experimental-features/resources/lazyload.png
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/feature-policy/experimental-features/lazyload/lazyload-disabled-image-tentative.sub.html
@@ -0,0 +1,61 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Verify behavior of 'lazyload' attribute state 'OFF' when the feature policy 'lazyload' is
+       disabled.
+</title>
+<link rel="stylesheet" href="/feature-policy/experimental-features/resources/lazyload-image.css">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/feature-policy/experimental-features/resources/common.js"></script>
+<style>
+body {
+  width: 100%;
+  height: 100%;
+}
+
+img {
+  width: 200px;
+  height: 200px;
+  border: solid 1px black;
+}
+
+#image-container {
+  position: absolute;
+  top: 400%;
+}
+</style>
+<body>
+  <p>Image inserted further below.</p>
+  <div id="image-container">
+    <img id="off" lazyload="off" src="http://{{hosts[alt][www1]}}:{{ports[http][0]}}/feature-policy/experimental-features/resources/lazyload.png"></img>
+    <img id="auto" lazyload="auto" src="http://{{hosts[alt][www2]}}:{{ports[http][0]}}/feature-policy/experimental-features/resources/lazyload.png"></img>
+  </div>
+  <script>
+    var img_off = document.getElementById("off");
+    var img_auto = document.getElementById("auto");
+    [window, img_off, img_auto].forEach((target) => {
+      target.load_complete = wait_for_load(target).then(() => target.did_load = true );
+    });
+
+    function images_loaded() {
+      return img_off.did_load && img_auto.did_load;
+    }
+
+    function same_load_state() {
+      return img_off.did_load === img_auto.did_load;
+    }
+
+    // Verifies that "off" and "auto" behave the same for out-of-view images.
+    promise_test(async(t) => {
+      await window.load_complete;
+      assert_true(same_load_state(), "Expected same loading state for both images.");
+    }, "When the 'lazyload' feature is disabled, lazyload=OFF and lazyload=AUTO behave the same.");
+
+    // Verifies that images with attributes "off" and "auto" load after the images get into view.
+    promise_test(async(t) => {
+      document.getElementById("image-container").scrollIntoView();
+      await img_off.load_complete;
+      await img_auto.load_complete;
+    },  "Sanity-check: Verify that all images load after they are scrolled into view.");
+  </script>
+</body>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/feature-policy/experimental-features/lazyload/lazyload-disabled-image-tentative.sub.html.headers
@@ -0,0 +1,2 @@
+Feature-Policy: lazyload 'none'
+Cache-Control: no-cache, no-store, max-age=0
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/feature-policy/experimental-features/lazyload/lazyload-enabled-image-tentative.sub.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Verify behavior of 'lazyload' attribute state 'OFF' when the feature policy 'lazyload' is
+       enabled.
+</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/feature-policy/experimental-features/resources/common.js"></script>
+<style>
+body {
+  width: 100%;
+  height: 100%;
+}
+
+img {
+  width: 200px;
+  height: 200px;
+  border: solid 1px black;
+}
+
+#image-container {
+  position: absolute;
+  top: 400%;
+}
+</style>
+<body>
+  <p>Image inserted further below.</p>
+  <div id="image-container">
+    <img id="off" lazyload="off" src="http://{{hosts[alt][www1]}}:{{ports[http][0]}}/feature-policy/experimental-features/resources/lazyload.png"></img>
+  </div>
+  <script>
+    var img = document.querySelector("img");
+
+    [img, window].forEach((target) => {
+      target.load_complete = wait_for_load(target).then(() => target.did_load = true );
+    });
+
+    // Sanity-check: Verify that when feature-policy 'lazyload' is enabled, the lazyload attribute
+    // value 'OFF' works as expected (images load immediately).
+    promise_test( async(t) => {
+      await window.load_complete;
+      assert_true(img.did_load, "Image should have loaded.");
+    }, "When feature is enabled, lazyload=OFF works as expected.");
+ </script>
+</body>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/feature-policy/experimental-features/lazyload/lazyload-image-attribute-on-sanity-check-tentative.sub.html
@@ -0,0 +1,48 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>Verify behavior of 'lazyload' attribute state 'ON' (sanity-check for lazyload policy tests).
+</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/feature-policy/experimental-features/resources/common.js"></script>
+<style>
+body {
+  width: 100%;
+  height: 100%;
+}
+
+img {
+  width: 200px;
+  height: 200px;
+  border: solid 1px black;
+}
+
+#image-container {
+  position: absolute;
+  top: 400%;
+}
+</style>
+<body>
+  <p>Image inserted further below.</p>
+  <div id="image-container">
+    <img lazyload="on" src="http://{{hosts[alt][www1]}}:{{ports[http][0]}}/feature-policy/experimental-features/resources/lazyload.png"/>
+  </div>
+  <script>
+    var img = document.querySelector("img");
+
+    [img, window].forEach((target) => {
+      target.did_load = false;
+      target.load_complete = wait_for_load(target).then(() => target.did_load = true );
+    });
+
+    // Sanity-check: Verify that when feature-policy 'lazyload' is enabled, the lazyload attribute
+    // value 'OFF' works as expected (images load immediately).
+    promise_test( async(t) => {
+      await window.load_complete;
+      assert_false(img.did_load, "Out-of-viewport image should not have loaded.");
+      img.scrollIntoView();
+      await img.load_complete;
+    }, "Verify 'lazyload' attribute state 'on' works as expected: image loads only when in " +
+       "viewport.");
+ </script>
+</body>
\ No newline at end of file
--- a/testing/web-platform/tests/feature-policy/experimental-features/resources/common.js
+++ b/testing/web-platform/tests/feature-policy/experimental-features/resources/common.js
@@ -53,8 +53,15 @@ function waitForMessageOrTimeout(t, id, 
 
 function createIframe(container, attributes) {
   var new_iframe = document.createElement("iframe");
   for (attr_name in attributes)
     new_iframe.setAttribute(attr_name, attributes[attr_name]);
   container.appendChild(new_iframe);
   return new_iframe;
 }
+
+// Returns a promise which is resolved when |load| event is dispatched for |e|.
+function wait_for_load(e) {
+  return new Promise((resolve) => {
+    e.addEventListener("load", resolve);
+  });
+}
\ No newline at end of file
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fd3da53a29c3e7f55f950611d34694867b0ff0a4
GIT binary patch
literal 20819
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
K<_xocZv7WV`(u3o