tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

image-decode-path-changes.html (4826B)


      1 <!DOCTYPE html>
      2 <meta charset=utf-8>
      3 <meta name="timeout" content="long">
      4 <title>HTMLImageElement.prototype.decode(), src/srcset mutation tests.</title>
      5 <link rel="author" title="Vladimir Levin" href="mailto:vmpstr@chromium.org">
      6 <link rel=help href="https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-decode">
      7 <script src="/resources/testharness.js"></script>
      8 <script src="/resources/testharnessreport.js"></script>
      9 
     10 <script>
     11 "use strict";
     12 
     13 // src tests
     14 // -------------------
     15 promise_test(function(t) {
     16  var img = new Image();
     17  img.src = "/images/green.png?image-decode-path-changes-1";
     18  var promise = img.decode();
     19  img.src = "/images/green.svg?image-decode-path-changes-1";
     20  return promise_rejects_dom(t, "EncodingError", promise);
     21 }, document.title + " src changes fail decode.");
     22 
     23 promise_test(function(t) {
     24  var img = new Image();
     25  img.src = "/images/green.png?image-decode-path-changes-2";
     26  var first_promise = img.decode();
     27  img.src = "/images/blue.png?image-decode-path-changes-2";
     28  var second_promise = img.decode();
     29  assert_not_equals(first_promise, second_promise);
     30  return Promise.all([
     31    promise_rejects_dom(t, "EncodingError", first_promise),
     32    second_promise
     33  ]);
     34 }, document.title + " src changes fail decode; following good png decode succeeds.");
     35 
     36 promise_test(function(t) {
     37  var img = new Image();
     38  img.src = "/images/green.png?image-decode-path-changes-3";
     39  var first_promise = img.decode();
     40  img.src = "/images/green.svg?image-decode-path-changes-3";
     41  var second_promise = img.decode();
     42  assert_not_equals(first_promise, second_promise);
     43  return Promise.all([
     44    promise_rejects_dom(t, "EncodingError", first_promise),
     45    second_promise
     46  ]);
     47 }, document.title + " src changes fail decode; following good svg decode succeeds.");
     48 
     49 promise_test(function(t) {
     50  var img = new Image();
     51  img.src = "/images/green.png?image-decode-path-changes-4";
     52  var first_promise = img.decode();
     53  img.src = "/non/existent/path.png?image-decode-path-changes-5";
     54  var second_promise = img.decode();
     55  assert_not_equals(first_promise, second_promise);
     56  return Promise.all([
     57    promise_rejects_dom(t, "EncodingError", first_promise),
     58    promise_rejects_dom(t, "EncodingError", second_promise)
     59  ]);
     60 }, document.title + " src changes fail decode; following bad decode fails.");
     61 
     62 promise_test(function(t) {
     63  return new Promise(function(resolve, reject) {
     64    var img = new Image();
     65    // We wait for an onload, since the "Updating the image data" spec states
     66    // that if a new microtask is scheduled, the old one is canceled so
     67    // without the onload, the first decode request would be requested when the
     68    // img.src is empty. With an onload, we ensure that the img.src is set and
     69    // the image exists before issuing the first decode, then we verify that the
     70    // src change to the same value does not prevent that request from
     71    // succeeding.
     72    img.onload = t.step_func(function() {
     73      img.onload = null;
     74 
     75      var first_promise = img.decode();
     76      img.src = "/images/green.png?image-decode-path-changes-6";
     77      var second_promise = img.decode();
     78      assert_not_equals(first_promise, second_promise);
     79      resolve(Promise.all([first_promise, second_promise]));
     80    });
     81    img.src = "/images/green.png?image-decode-path-changes-6";
     82  });
     83 }, document.title + " src changes to the same path succeed.");
     84 
     85 // srcset tests
     86 // -------------------
     87 promise_test(function(t) {
     88  var img = new Image();
     89  img.srcset = "/images/green.png?image-decode-path-changes-7 100w";
     90  var promise = img.decode();
     91  img.srcset = "/images/green.svg?image-decode-path-changes-7 100w";
     92  return promise_rejects_dom(t, "EncodingError", promise);
     93 }, document.title + " srcset changes fail decode.");
     94 
     95 promise_test(function(t) {
     96  var img = new Image();
     97  img.srcset = "/images/green.png?image-decode-path-changes-8 100w";
     98  var first_promise = img.decode();
     99  img.srcset = "/images/green.svg?image-decode-path-changes-8 100w";
    100  var second_promise = img.decode();
    101  assert_not_equals(first_promise, second_promise);
    102  return Promise.all([
    103    promise_rejects_dom(t, "EncodingError", first_promise),
    104    second_promise
    105  ]);
    106 }, document.title + " srcset changes fail decode; following good decode succeeds.");
    107 
    108 promise_test(function(t) {
    109  var img = new Image();
    110  img.srcset = "/images/green.png?image-decode-path-changes-9 100w";
    111  var first_promise = img.decode();
    112  img.srcset = "/non/existent/path.png?image-decode-path-changes-9 100w";
    113  var second_promise = img.decode();
    114  assert_not_equals(first_promise, second_promise);
    115  return Promise.all([
    116    promise_rejects_dom(t, "EncodingError", first_promise),
    117    promise_rejects_dom(t, "EncodingError", second_promise)
    118  ]);
    119 }, document.title + " srcset changes fail decode; following bad decode fails.");
    120 
    121 </script>