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>