 Chromium Code Reviews
 Chromium Code Reviews Issue 2769823002:
  Add decode() functionality to image elements.  (Closed)
    
  
    Issue 2769823002:
  Add decode() functionality to image elements.  (Closed) 
  | OLD | NEW | 
|---|---|
| (Empty) | |
| 1 <!DOCTYPE html> | |
| 2 <meta charset=utf-8> | |
| 3 <meta name="timeout" content="long"> | |
| 4 <title>img.decode()</title> | |
| 5 <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org"> | |
| 6 <link rel=help href=""> | |
| 7 <script src="/resources/testharness.js"></script> | |
| 8 <script src="/resources/testharnessreport.js"></script> | |
| 9 <div id="log"></div> | |
| 10 | |
| 11 <iframe id="frame_loaded" srcdoc="iframe"></iframe> | |
| 12 <iframe id="frame_notloaded" srcdoc="iframe"></iframe> | |
| 13 <iframe id="frame_notloaded2" srcdoc="iframe"></iframe> | |
| 14 | |
| 15 <script> | |
| 16 "use strict"; | |
| 17 | |
| 18 // src tests | |
| 19 // ------------------- | |
| 20 promise_test(function() { | |
| 21 var img = new Image(); | |
| 22 img.src = "/images/green.png"; | |
| 23 return img.decode().then(function(arg) { | |
| 24 assert_equals(arg, undefined); | |
| 25 }); | |
| 26 }, "(src) PNG image decodes with undefined."); | |
| 27 | |
| 28 promise_test(function() { | |
| 29 var img = new Image(); | |
| 30 img.src = "/images/green.svg"; | |
| 31 return img.decode().then(function(arg) { | |
| 32 assert_equals(arg, undefined); | |
| 33 }); | |
| 34 }, "(src) SVG image decodes with undefined."); | |
| 35 | |
| 36 promise_test(function(t) { | |
| 37 var img = new Image(); | |
| 38 img.src = "/non/existent/path.png"; | |
| 39 var promise = img.decode(); | |
| 40 return promise_rejects(t, "EncodingError", promise); | |
| 41 }, "(src) Non-existent path fails decode."); | |
| 42 | |
| 43 promise_test(function(t) { | |
| 44 var img = new Image(); | |
| 45 var promise = img.decode(); | |
| 46 return promise_rejects(t, "EncodingError", promise); | |
| 47 }, "(src) Path-less image fails decode."); | |
| 48 | |
| 49 promise_test(function(t) { | |
| 50 var img = new Image(); | |
| 51 img.src = "/images/green.png"; | |
| 52 var promise = img.decode(); | |
| 53 img.src = "/images/green.svg"; | |
| 54 return promise_rejects(t, "EncodingError", promise); | |
| 55 }, "(src) Path changes fail decode."); | |
| 56 | |
| 57 promise_test(function(t) { | |
| 58 var img = new Image(); | |
| 59 img.src = "/images/green.png"; | |
| 60 var first_promise = img.decode(); | |
| 61 img.src = "/images/green.svg"; | |
| 62 var second_promise = img.decode(); | |
| 63 assert_true(first_promise !== second_promise); | |
| 64 return Promise.all([ | |
| 65 promise_rejects(t, "EncodingError", first_promise), | |
| 66 second_promise | |
| 67 ]); | |
| 68 }, "(src) Path changes fail decode; following good decode succeeds."); | |
| 69 | |
| 70 promise_test(function(t) { | |
| 71 var img = new Image(); | |
| 72 img.src = "/images/green.png"; | |
| 73 var first_promise = img.decode(); | |
| 74 img.src = "/non/existent/path.png"; | |
| 75 var second_promise = img.decode(); | |
| 76 assert_true(first_promise !== second_promise); | |
| 77 return Promise.all([ | |
| 78 promise_rejects(t, "EncodingError", first_promise), | |
| 79 promise_rejects(t, "EncodingError", second_promise) | |
| 80 ]); | |
| 81 }, "(src) Path changes fail decode; following bad decode fails."); | |
| 82 | |
| 83 promise_test(function() { | |
| 84 var img = new Image(); | |
| 85 img.src = "/images/green.png"; | |
| 86 var first_promise = img.decode(); | |
| 87 img.src = "/images/green.png"; | |
| 88 var second_promise = img.decode(); | |
| 89 assert_true(first_promise !== second_promise); | |
| 90 return Promise.all([ | |
| 91 first_promise, | |
| 92 second_promise | |
| 93 ]); | |
| 94 }, "(src) Path changes to the same path succeed."); | |
| 95 | |
| 96 promise_test(function() { | |
| 97 var img = new Image(); | |
| 98 img.src = "/images/green.png"; | |
| 99 var first_promise = img.decode(); | |
| 100 var second_promise = img.decode(); | |
| 101 assert_true(first_promise !== second_promise); | |
| 102 return Promise.all([ | |
| 103 first_promise, | |
| 104 second_promise | |
| 105 ]); | |
| 106 }, "(src) Multiple decodes succeed."); | |
| 107 | |
| 108 // srcset tests | |
| 109 // ------------------- | |
| 110 promise_test(function() { | |
| 111 var img = new Image(); | |
| 112 img.srcset = "/images/green.png 100w"; | |
| 113 return img.decode().then(function(arg) { | |
| 114 assert_equals(arg, undefined); | |
| 115 }); | |
| 116 }, "(srcset) PNG image decodes with undefined."); | |
| 117 | |
| 118 promise_test(function() { | |
| 119 var img = new Image(); | |
| 120 img.srcset = "/images/green.svg 100w"; | |
| 121 return img.decode().then(function(arg) { | |
| 122 assert_equals(arg, undefined); | |
| 123 }); | |
| 124 }, "(srcset) SVG image decodes with undefined."); | |
| 125 | |
| 126 promise_test(function(t) { | |
| 127 var img = new Image(); | |
| 128 img.srcset = "/non/existent/path.png 100w"; | |
| 129 var promise = img.decode(); | |
| 130 return promise_rejects(t, "EncodingError", promise); | |
| 131 }, "(srcset) Non-existent path fails decode."); | |
| 132 | |
| 133 promise_test(function(t) { | |
| 134 var img = new Image(); | |
| 135 img.srcset = "/images/green.png 100w"; | |
| 136 var promise = img.decode(); | |
| 137 img.srcset = "/images/green.svg 100w"; | |
| 138 return promise_rejects(t, "EncodingError", promise); | |
| 139 }, "(srcset) Path changes fail decode."); | |
| 140 | |
| 141 promise_test(function(t) { | |
| 142 var img = new Image(); | |
| 143 img.srcset = "/images/green.png 100w"; | |
| 144 var first_promise = img.decode(); | |
| 145 img.srcset = "/images/green.svg 100w"; | |
| 146 var second_promise = img.decode(); | |
| 147 assert_true(first_promise !== second_promise); | |
| 148 return Promise.all([ | |
| 149 promise_rejects(t, "EncodingError", first_promise), | |
| 150 second_promise | |
| 151 ]); | |
| 152 }, "(srcset) Path changes fail decode; following good decode succeeds."); | |
| 153 | |
| 154 promise_test(function(t) { | |
| 155 var img = new Image(); | |
| 156 img.srcset = "/images/green.png 100w"; | |
| 157 var first_promise = img.decode(); | |
| 158 img.srcset = "/non/existent/path.png 100w"; | |
| 159 var second_promise = img.decode(); | |
| 160 assert_true(first_promise !== second_promise); | |
| 161 return Promise.all([ | |
| 162 promise_rejects(t, "EncodingError", first_promise), | |
| 163 promise_rejects(t, "EncodingError", second_promise) | |
| 164 ]); | |
| 165 }, "(srcset) Path changes fail decode; following bad decode fails."); | |
| 166 | |
| 167 promise_test(function() { | |
| 168 var img = new Image(); | |
| 169 img.srcset = "/images/green.png 100w"; | |
| 170 var first_promise = img.decode(); | |
| 171 img.srcset = "/images/green.png 100w"; | |
| 172 var second_promise = img.decode(); | |
| 173 assert_true(first_promise !== second_promise); | |
| 174 return Promise.all([ | |
| 175 first_promise, | |
| 176 second_promise | |
| 177 ]); | |
| 178 }, "(srcset) Path changes to the same path succeed."); | |
| 179 | |
| 180 promise_test(function() { | |
| 181 var img = new Image(); | |
| 182 img.srcset = "/images/green.png 100w"; | |
| 183 var first_promise = img.decode(); | |
| 184 var second_promise = img.decode(); | |
| 185 assert_true(first_promise !== second_promise); | |
| 186 return Promise.all([ | |
| 187 first_promise, | |
| 188 second_promise | |
| 189 ]); | |
| 190 }, "(srcset) Multiple decodes succeed."); | |
| 191 | |
| 192 // misc tests | |
| 193 // ------------------- | |
| 194 promise_test(function() { | |
| 195 return new Promise(function(resolve, reject) { | |
| 196 var frame = document.getElementById("frame_loaded"); | |
| 197 var img = frame.contentDocument.createElement("img"); | |
| 198 img.src = "/images/green.png"; | |
| 199 img.onload = function() { | |
| 200 // At this point the frame which created the img is removed, so decode() s hould fail. | |
| 201 frame.parentNode.removeChild(frame); | |
| 202 img.decode().then(function() { | |
| 203 assert_false(true, "Unexpected success"); | |
| 204 }, function() { | |
| 205 resolve(); | |
| 206 }); | |
| 207 }; | |
| 208 }); | |
| 209 }, "(misc) Decode from removed iframe fails (loaded img)"); | |
| 210 | |
| 211 promise_test(function(t) { | |
| 212 var frame = document.getElementById("frame_notloaded"); | |
| 213 var img = frame.contentDocument.createElement("img"); | |
| 214 img.src = "/images/green.png"; | |
| 215 frame.parentNode.removeChild(frame); | |
| 216 var promise = img.decode(); | |
| 217 return promise_rejects(t, "EncodingError", promise); | |
| 218 }, "(misc) Decode from removed iframe fails (img not loaded)"); | |
| 219 | |
| 220 promise_test(function(t) { | |
| 
vmpstr
2017/04/18 17:31:03
This test times out.
 | |
| 221 var frame = document.getElementById("frame_notloaded2"); | |
| 222 var img = frame.contentDocument.createElement("img"); | |
| 223 img.src = "/images/green.png"; | |
| 224 // First request a promise, then remove the iframe. | |
| 225 var promise = img.decode(); | |
| 
domenic
2017/04/18 20:48:34
Maybe what we need here is a spec line saying "If
 | |
| 226 frame.parentNode.removeChild(frame); | |
| 227 return promise_rejects(t, "EncodingError", promise); | |
| 228 }, "(misc) Decode from iframe, later removed, fails (img not loaded)"); | |
| 229 | |
| 230 </script> | |
| OLD | NEW |