Chromium Code Reviews| Index: third_party/WebKit/LayoutTests/external/wpt/image-decodes/image-decode.html |
| diff --git a/third_party/WebKit/LayoutTests/external/wpt/image-decodes/image-decode.html b/third_party/WebKit/LayoutTests/external/wpt/image-decodes/image-decode.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..de371026345e6902bed14a0cb07753b71c77d5f7 |
| --- /dev/null |
| +++ b/third_party/WebKit/LayoutTests/external/wpt/image-decodes/image-decode.html |
| @@ -0,0 +1,230 @@ |
| +<!DOCTYPE html> |
| +<meta charset=utf-8> |
| +<meta name="timeout" content="long"> |
| +<title>img.decode()</title> |
| +<link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> |
| +<link rel=help href=""> |
| +<script src="/resources/testharness.js"></script> |
| +<script src="/resources/testharnessreport.js"></script> |
| +<div id="log"></div> |
| + |
| +<iframe id="frame_loaded" srcdoc="iframe"></iframe> |
| +<iframe id="frame_notloaded" srcdoc="iframe"></iframe> |
| +<iframe id="frame_notloaded2" srcdoc="iframe"></iframe> |
| + |
| +<script> |
| +"use strict"; |
| + |
| +// src tests |
| +// ------------------- |
| +promise_test(function() { |
| + var img = new Image(); |
| + img.src = "/images/green.png"; |
| + return img.decode().then(function(arg) { |
| + assert_equals(arg, undefined); |
| + }); |
| +}, "(src) PNG image decodes with undefined."); |
| + |
| +promise_test(function() { |
| + var img = new Image(); |
| + img.src = "/images/green.svg"; |
| + return img.decode().then(function(arg) { |
| + assert_equals(arg, undefined); |
| + }); |
| +}, "(src) SVG image decodes with undefined."); |
| + |
| +promise_test(function(t) { |
| + var img = new Image(); |
| + img.src = "/non/existent/path.png"; |
| + var promise = img.decode(); |
| + return promise_rejects(t, "EncodingError", promise); |
| +}, "(src) Non-existent path fails decode."); |
| + |
| +promise_test(function(t) { |
| + var img = new Image(); |
| + var promise = img.decode(); |
| + return promise_rejects(t, "EncodingError", promise); |
| +}, "(src) Path-less image fails decode."); |
| + |
| +promise_test(function(t) { |
| + var img = new Image(); |
| + img.src = "/images/green.png"; |
| + var promise = img.decode(); |
| + img.src = "/images/green.svg"; |
| + return promise_rejects(t, "EncodingError", promise); |
| +}, "(src) Path changes fail decode."); |
| + |
| +promise_test(function(t) { |
| + var img = new Image(); |
| + img.src = "/images/green.png"; |
| + var first_promise = img.decode(); |
| + img.src = "/images/green.svg"; |
| + var second_promise = img.decode(); |
| + assert_true(first_promise !== second_promise); |
| + return Promise.all([ |
| + promise_rejects(t, "EncodingError", first_promise), |
| + second_promise |
| + ]); |
| +}, "(src) Path changes fail decode; following good decode succeeds."); |
| + |
| +promise_test(function(t) { |
| + var img = new Image(); |
| + img.src = "/images/green.png"; |
| + var first_promise = img.decode(); |
| + img.src = "/non/existent/path.png"; |
| + var second_promise = img.decode(); |
| + assert_true(first_promise !== second_promise); |
| + return Promise.all([ |
| + promise_rejects(t, "EncodingError", first_promise), |
| + promise_rejects(t, "EncodingError", second_promise) |
| + ]); |
| +}, "(src) Path changes fail decode; following bad decode fails."); |
| + |
| +promise_test(function() { |
| + var img = new Image(); |
| + img.src = "/images/green.png"; |
| + var first_promise = img.decode(); |
| + img.src = "/images/green.png"; |
| + var second_promise = img.decode(); |
| + assert_true(first_promise !== second_promise); |
| + return Promise.all([ |
| + first_promise, |
| + second_promise |
| + ]); |
| +}, "(src) Path changes to the same path succeed."); |
| + |
| +promise_test(function() { |
| + var img = new Image(); |
| + img.src = "/images/green.png"; |
| + var first_promise = img.decode(); |
| + var second_promise = img.decode(); |
| + assert_true(first_promise !== second_promise); |
| + return Promise.all([ |
| + first_promise, |
| + second_promise |
| + ]); |
| +}, "(src) Multiple decodes succeed."); |
| + |
| +// srcset tests |
| +// ------------------- |
| +promise_test(function() { |
| + var img = new Image(); |
| + img.srcset = "/images/green.png 100w"; |
| + return img.decode().then(function(arg) { |
| + assert_equals(arg, undefined); |
| + }); |
| +}, "(srcset) PNG image decodes with undefined."); |
| + |
| +promise_test(function() { |
| + var img = new Image(); |
| + img.srcset = "/images/green.svg 100w"; |
| + return img.decode().then(function(arg) { |
| + assert_equals(arg, undefined); |
| + }); |
| +}, "(srcset) SVG image decodes with undefined."); |
| + |
| +promise_test(function(t) { |
| + var img = new Image(); |
| + img.srcset = "/non/existent/path.png 100w"; |
| + var promise = img.decode(); |
| + return promise_rejects(t, "EncodingError", promise); |
| +}, "(srcset) Non-existent path fails decode."); |
| + |
| +promise_test(function(t) { |
| + var img = new Image(); |
| + img.srcset = "/images/green.png 100w"; |
| + var promise = img.decode(); |
| + img.srcset = "/images/green.svg 100w"; |
| + return promise_rejects(t, "EncodingError", promise); |
| +}, "(srcset) Path changes fail decode."); |
| + |
| +promise_test(function(t) { |
| + var img = new Image(); |
| + img.srcset = "/images/green.png 100w"; |
| + var first_promise = img.decode(); |
| + img.srcset = "/images/green.svg 100w"; |
| + var second_promise = img.decode(); |
| + assert_true(first_promise !== second_promise); |
| + return Promise.all([ |
| + promise_rejects(t, "EncodingError", first_promise), |
| + second_promise |
| + ]); |
| +}, "(srcset) Path changes fail decode; following good decode succeeds."); |
| + |
| +promise_test(function(t) { |
| + var img = new Image(); |
| + img.srcset = "/images/green.png 100w"; |
| + var first_promise = img.decode(); |
| + img.srcset = "/non/existent/path.png 100w"; |
| + var second_promise = img.decode(); |
| + assert_true(first_promise !== second_promise); |
| + return Promise.all([ |
| + promise_rejects(t, "EncodingError", first_promise), |
| + promise_rejects(t, "EncodingError", second_promise) |
| + ]); |
| +}, "(srcset) Path changes fail decode; following bad decode fails."); |
| + |
| +promise_test(function() { |
| + var img = new Image(); |
| + img.srcset = "/images/green.png 100w"; |
| + var first_promise = img.decode(); |
| + img.srcset = "/images/green.png 100w"; |
| + var second_promise = img.decode(); |
| + assert_true(first_promise !== second_promise); |
| + return Promise.all([ |
| + first_promise, |
| + second_promise |
| + ]); |
| +}, "(srcset) Path changes to the same path succeed."); |
| + |
| +promise_test(function() { |
| + var img = new Image(); |
| + img.srcset = "/images/green.png 100w"; |
| + var first_promise = img.decode(); |
| + var second_promise = img.decode(); |
| + assert_true(first_promise !== second_promise); |
| + return Promise.all([ |
| + first_promise, |
| + second_promise |
| + ]); |
| +}, "(srcset) Multiple decodes succeed."); |
| + |
| +// misc tests |
| +// ------------------- |
| +promise_test(function() { |
| + return new Promise(function(resolve, reject) { |
| + var frame = document.getElementById("frame_loaded"); |
| + var img = frame.contentDocument.createElement("img"); |
| + img.src = "/images/green.png"; |
| + img.onload = function() { |
| + // At this point the frame which created the img is removed, so decode() should fail. |
| + frame.parentNode.removeChild(frame); |
| + img.decode().then(function() { |
| + assert_false(true, "Unexpected success"); |
| + }, function() { |
| + resolve(); |
| + }); |
| + }; |
| + }); |
| +}, "(misc) Decode from removed iframe fails (loaded img)"); |
| + |
| +promise_test(function(t) { |
| + var frame = document.getElementById("frame_notloaded"); |
| + var img = frame.contentDocument.createElement("img"); |
| + img.src = "/images/green.png"; |
| + frame.parentNode.removeChild(frame); |
| + var promise = img.decode(); |
| + return promise_rejects(t, "EncodingError", promise); |
| +}, "(misc) Decode from removed iframe fails (img not loaded)"); |
| + |
| +promise_test(function(t) { |
|
vmpstr
2017/04/18 17:31:03
This test times out.
|
| + var frame = document.getElementById("frame_notloaded2"); |
| + var img = frame.contentDocument.createElement("img"); |
| + img.src = "/images/green.png"; |
| + // First request a promise, then remove the iframe. |
| + var promise = img.decode(); |
|
domenic
2017/04/18 20:48:34
Maybe what we need here is a spec line saying "If
|
| + frame.parentNode.removeChild(frame); |
| + return promise_rejects(t, "EncodingError", promise); |
| +}, "(misc) Decode from iframe, later removed, fails (img not loaded)"); |
| + |
| +</script> |