| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>image-onerror</title> |
| <style> |
| #result { |
| width: 100px; |
| height:100px; |
| background-color:#0047AB; |
| } |
| </style> |
| </head> |
| <body> |
| |
| <div id="result"></div> |
| |
| <script> |
| |
| function expect(condition, message) { |
| if (!condition) { |
| document.querySelector('#result').style.display = 'none'; |
| const fullMessage = `failed expectation at: |
| ${new Error().stack} |
| ${typeof message === 'undefined' ? '' : 'with message: ' + message}`; |
| console.error(fullMessage); |
| } |
| } |
| |
| if (window.testRunner) { |
| window.testRunner.waitUntilDone(); |
| } |
| |
| const image = new Image(); |
| |
| let imageOnErrorWasCalled = false; |
| let imageErrorEventHandlerCalled = false; |
| |
| function endTestIfAllErrorHandlersCalled() { |
| if (imageOnErrorWasCalled && imageErrorEventHandlerCalled) { |
| // Success! |
| if (window.testRunner) { |
| window.testRunner.notifyDone(); |
| } |
| } |
| } |
| |
| image.onerror = (errorEvent) => { |
| expect(errorEvent.type === 'error', errorEvent.type); |
| imageOnErrorWasCalled = true; |
| endTestIfAllErrorHandlersCalled(); |
| }; |
| |
| image.addEventListener('error', (errorEvent) => { |
| expect(errorEvent.type === 'error', errorEvent.type); |
| imageErrorEventHandlerCalled = true; |
| endTestIfAllErrorHandlersCalled(); |
| }); |
| |
| image.src = 'bogusscheme://invalidurl'; |
| |
| setTimeout(() => { |
| // If we hit this timeout we have failed because we expect the previous event |
| // handlers to have both fired before we get here. |
| expect(false); |
| |
| // However, if we do get here, the subsequent expect statements can help |
| // identify which of the error handlers failed to be called. |
| expect(imageOnErrorWasCalled); |
| expect(imageErrorEventHandlerCalled); |
| |
| if (window.testRunner) { |
| window.testRunner.notifyDone(); |
| } |
| }, 1000); |
| |
| </script> |
| |
| </body> |
| </html> |