Blame dom/base/test/test_bug1308069.html

Packit f0b94e
Packit f0b94e
<html>
Packit f0b94e
Packit f0b94e
https://bugzilla.mozilla.org/show_bug.cgi?id=1308069
Packit f0b94e
-->
Packit f0b94e
<head>
Packit f0b94e
<title>Bug 1308069</title>
Packit f0b94e
<script src="/tests/SimpleTest/SimpleTest.js"></script>
Packit f0b94e
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
Packit f0b94e
</head>
Packit f0b94e
<body>
Packit f0b94e
Mozilla Bug 1308069
Packit f0b94e
<script class="testbody" type="text/javascript">
Packit f0b94e
Packit f0b94e
function testClearPendingErrorEvent() {
Packit f0b94e
  return new Promise(function(aResolve, aReject) {
Packit f0b94e
    var hasErrorEvent = false;
Packit f0b94e
    var imgTarget = new Image();
Packit f0b94e
Packit f0b94e
    var imgForChangingTargetSrc = new Image();
Packit f0b94e
    // Queue an error event for changing imgTarget's src.
Packit f0b94e
    imgForChangingTargetSrc.src = '';
Packit f0b94e
    imgForChangingTargetSrc.onerror = function() {
Packit f0b94e
      // This clears imgTarget's pending error event.
Packit f0b94e
      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>';
Packit f0b94e
Packit f0b94e
      // Queue an error event for checking and resolving promise.
Packit f0b94e
      var imgForCheckingAndResolvingPromise = new Image();
Packit f0b94e
      imgForCheckingAndResolvingPromise.src = '';
Packit f0b94e
      imgForCheckingAndResolvingPromise.onerror = function() {
Packit f0b94e
        ok(!hasErrorEvent,
Packit f0b94e
           'Should not receive an error event since the pending error event ' +
Packit f0b94e
           'should be cleared before it fired');
Packit f0b94e
        aResolve();
Packit f0b94e
      };
Packit f0b94e
    };
Packit f0b94e
Packit f0b94e
    // Setting src to empty string queues an error event.
Packit f0b94e
    imgTarget.src = '';
Packit f0b94e
    imgTarget.onerror = function() {
Packit f0b94e
      hasErrorEvent = true;
Packit f0b94e
    };
Packit f0b94e
  });
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
function testReplacePendingErrorEvent() {
Packit f0b94e
  return new Promise(function(aResolve) {
Packit f0b94e
    var numOfErrorEvent = 0;
Packit f0b94e
    var imgTarget = new Image();
Packit f0b94e
Packit f0b94e
    var imgForChangingTargetSrc = new Image();
Packit f0b94e
    // Queue an error event for changing imgTarget's src.
Packit f0b94e
    imgForChangingTargetSrc.src = '';
Packit f0b94e
    imgForChangingTargetSrc.onerror = function() {
Packit f0b94e
      // This clears pending error event and fires a new one.
Packit f0b94e
      imgTarget.src = '';
Packit f0b94e
Packit f0b94e
      // Queue an error event for checking and resolving promise.
Packit f0b94e
      var imgForCheckingAndResolvingPromise = new Image();
Packit f0b94e
      imgForCheckingAndResolvingPromise.src = '';
Packit f0b94e
      imgForCheckingAndResolvingPromise.onerror = function() {
Packit f0b94e
        is(numOfErrorEvent, 1,
Packit f0b94e
           'Should only receive one error event since the first pending error ' +
Packit f0b94e
           'event should be cleared before it fired');
Packit f0b94e
        aResolve();
Packit f0b94e
      };
Packit f0b94e
    };
Packit f0b94e
Packit f0b94e
    // Setting src to empty string queues an error event.
Packit f0b94e
    imgTarget.src = '';
Packit f0b94e
    imgTarget.onerror = function() {
Packit f0b94e
      numOfErrorEvent++;
Packit f0b94e
    };
Packit f0b94e
  });
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
SimpleTest.waitForExplicitFinish();
Packit f0b94e
Packit f0b94e
Promise.resolve()
Packit f0b94e
.then(() => testClearPendingErrorEvent())
Packit f0b94e
.then(() => testReplacePendingErrorEvent())
Packit f0b94e
.catch((err) => ok(false, "promise rejected: " + err))
Packit f0b94e
.then(() => SimpleTest.finish());
Packit f0b94e
Packit f0b94e
</script>
Packit f0b94e
</body>
Packit f0b94e
</html>