tor-browser

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

test_bug1308069.html (2874B)


      1 <!DOCTYPE html>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=1308069
      5 -->
      6 <head>
      7 <title>Bug 1308069</title>
      8 <script src="/tests/SimpleTest/SimpleTest.js"></script>
      9 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
     10 </head>
     11 <body>
     12 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1308069">Mozilla Bug 1308069</a>
     13 <script class="testbody" type="text/javascript">
     14 
     15 function testClearPendingErrorEvent() {
     16  return new Promise(function(aResolve, aReject) {
     17    var hasErrorEvent = false;
     18    var imgTarget = new Image();
     19 
     20    var imgForChangingTargetSrc = new Image();
     21    // Queue an error event for changing imgTarget's src.
     22    imgForChangingTargetSrc.src = '';
     23    imgForChangingTargetSrc.onerror = function() {
     24      // This clears imgTarget's pending error event.
     25      imgTarget.src = 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="96" height="96"><path d="M10,10L32,90L90,32z" fill="lightgreen"/></svg>';
     26 
     27      // Queue an error event for checking and resolving promise.
     28      var imgForCheckingAndResolvingPromise = new Image();
     29      imgForCheckingAndResolvingPromise.src = '';
     30      imgForCheckingAndResolvingPromise.onerror = function() {
     31        ok(!hasErrorEvent,
     32           'Should not receive an error event since the pending error event ' +
     33           'should be cleared before it fired');
     34        aResolve();
     35      };
     36    };
     37 
     38    // Setting src to empty string queues an error event.
     39    imgTarget.src = '';
     40    imgTarget.onerror = function() {
     41      hasErrorEvent = true;
     42    };
     43  });
     44 }
     45 
     46 function testReplacePendingErrorEvent() {
     47  return new Promise(function(aResolve) {
     48    var numOfErrorEvent = 0;
     49    var imgTarget = new Image();
     50 
     51    var imgForChangingTargetSrc = new Image();
     52    // Queue an error event for changing imgTarget's src.
     53    imgForChangingTargetSrc.src = '';
     54    imgForChangingTargetSrc.onerror = function() {
     55      // This clears pending error event and fires a new one.
     56      imgTarget.src = '';
     57 
     58      // Queue an error event for checking and resolving promise.
     59      var imgForCheckingAndResolvingPromise = new Image();
     60      imgForCheckingAndResolvingPromise.src = '';
     61      imgForCheckingAndResolvingPromise.onerror = function() {
     62        is(numOfErrorEvent, 1,
     63           'Should only receive one error event since the first pending error ' +
     64           'event should be cleared before it fired');
     65        aResolve();
     66      };
     67    };
     68 
     69    // Setting src to empty string queues an error event.
     70    imgTarget.src = '';
     71    imgTarget.onerror = function() {
     72      numOfErrorEvent++;
     73    };
     74  });
     75 }
     76 
     77 SimpleTest.waitForExplicitFinish();
     78 
     79 Promise.resolve()
     80 .then(() => testClearPendingErrorEvent())
     81 .then(() => testReplacePendingErrorEvent())
     82 .catch((err) => ok(false, "promise rejected: " + err))
     83 .then(() => SimpleTest.finish());
     84 
     85 </script>
     86 </body>
     87 </html>