summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/list-of-available-images-matching.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/semantics/embedded-content/the-img-element/list-of-available-images-matching.https.html')
-rw-r--r--testing/web-platform/tests/html/semantics/embedded-content/the-img-element/list-of-available-images-matching.https.html68
1 files changed, 68 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/list-of-available-images-matching.https.html b/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/list-of-available-images-matching.https.html
new file mode 100644
index 0000000000..4843d21915
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/list-of-available-images-matching.https.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<html>
+<title>List of available images tuple-matching logic</title>
+<link rel="author" title="Dom Farolino" href="mailto:dom@chromium.org">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-list-of-available-images">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+
+<script>
+const path = location.origin + '/html/semantics/embedded-content/the-img-element/';
+const image_url = path + 'image-1.jpg';
+
+function syncWait(ms) {
+ const start = Date.now();
+ while (Date.now() - start < ms);
+}
+
+let sawNoCorsRequest = false;
+
+navigator.serviceWorker.onmessage = ({data}) => {
+ if (data.url === image_url && data.mode === 'no-cors') {
+ sawNoCorsRequest = true;
+ }
+};
+
+promise_test(t => {
+ return service_worker_unregister_and_register(t, 'resources/sw.js', path)
+ .then(r => {
+ return wait_for_state(t, r.installing, 'activated');
+ });
+}, 'registering service worker');
+
+promise_test(async t => {
+ const img = new Image();
+
+ function load_img_promise() {
+ return new Promise((resolve, reject) => {
+ img.onload = resolve;
+ img.onerror = e => { reject("The img should not fail to load") };
+
+ img.src = image_url;
+ // If there is not a matching image in the list of available images, the
+ // actual fetch operation is queued as a microtask, so we will see a
+ // request with mode 'cors' due to setting the crossorigin attribute
+ // below.
+ syncWait(500);
+ img.crossOrigin = 'anonymous';
+ });
+ };
+
+ await load_img_promise();
+ assert_false(sawNoCorsRequest, "The image is not fetched with mode: no-cors");
+ await new Promise(resolve => {
+ img.onload = img.onerror = resolve;
+ img.src = '';
+ img.crossOrigin = null;
+ });
+ await load_img_promise();
+ assert_false(sawNoCorsRequest, "The image is not fetched with mode: no-cors");
+
+}, 'list of available images tuple-matching logic');
+
+promise_test(t => {
+ return service_worker_unregister(t, path);
+}, 'unregistering service worker');
+</script>