| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| (async function() { |
| TestRunner.addResult(`Tests event listener breakpoints.\n`); |
| await TestRunner.loadModule('sources_test_runner'); |
| await TestRunner.showPanel('sources'); |
| await TestRunner.loadHTML(` |
| <input type="button" id="test"> |
| <video id="video" src="../../../media/resources/test.ogv"></video> |
| `); |
| await TestRunner.evaluateInPagePromise(` |
| function testElementEventListener() |
| { |
| return 0; |
| } |
| |
| function addListenerAndClick() |
| { |
| var element = document.getElementById("test"); |
| element.addEventListener("click", testElementEventListener, true); |
| element.click(); |
| } |
| |
| function addListenerAndAuxclick() |
| { |
| var element = document.getElementById("test"); |
| element.addEventListener("auxclick", testElementEventListener, true); |
| element.dispatchEvent(new MouseEvent("auxclick", {button: 1})); |
| } |
| |
| function addListenerAndPointerDown() |
| { |
| var element = document.getElementById("test"); |
| element.addEventListener("pointerdown", testElementEventListener, true); |
| element.dispatchEvent(new PointerEvent("pointerdown")); |
| } |
| |
| function timerFired() |
| { |
| return 0; |
| } |
| |
| function addLoadListeners() |
| { |
| var xhr = new XMLHttpRequest(); |
| xhr.onload = loadCallback; |
| xhr.onerror = loadCallback; |
| xhr.open("GET", "/", true); |
| |
| var img = new Image(); |
| img.onload = sendXHR; |
| img.onerror = sendXHR; |
| img.src = "foo/bar/dummy"; |
| |
| function sendXHR() |
| { |
| xhr.send(); |
| } |
| } |
| |
| function loadCallback() |
| { |
| return 0; |
| } |
| |
| function playVideo() |
| { |
| var video = document.getElementById("video"); |
| video.addEventListener("play", onVideoPlay, false); |
| video.play(); |
| } |
| |
| function onVideoPlay() |
| { |
| return 0; |
| } |
| `); |
| |
| var testFunctions = [ |
| function testClickBreakpoint(next) { |
| SourcesTestRunner.setEventListenerBreakpoint('listener:click', true); |
| SourcesTestRunner.waitUntilPaused(paused); |
| TestRunner.evaluateInPageWithTimeout('addListenerAndClick()'); |
| |
| async function paused(callFrames, reason, breakpointIds, asyncStackTrace, auxData) { |
| await SourcesTestRunner.captureStackTrace(callFrames); |
| printEventTargetName(auxData); |
| SourcesTestRunner.setEventListenerBreakpoint('listener:click', false); |
| SourcesTestRunner.resumeExecution(resumed); |
| } |
| |
| function resumed() { |
| TestRunner.evaluateInPage('addListenerAndClick()', next); |
| } |
| }, |
| |
| function testAuxclickBreakpoint(next) { |
| SourcesTestRunner.setEventListenerBreakpoint('listener:auxclick', true); |
| SourcesTestRunner.waitUntilPaused(paused); |
| TestRunner.evaluateInPageWithTimeout('addListenerAndAuxclick()'); |
| |
| async function paused(callFrames, reason, breakpointIds, asyncStackTrace, auxData) { |
| await SourcesTestRunner.captureStackTrace(callFrames); |
| printEventTargetName(auxData); |
| SourcesTestRunner.setEventListenerBreakpoint('listener:auxclick', false); |
| SourcesTestRunner.resumeExecution(resumed); |
| } |
| |
| function resumed() { |
| TestRunner.evaluateInPage('addListenerAndAuxclick()', next); |
| } |
| }, |
| |
| function testTimerFiredBreakpoint(next) { |
| SourcesTestRunner.setEventListenerBreakpoint('instrumentation:setTimeout.callback', true); |
| SourcesTestRunner.waitUntilPaused(paused); |
| TestRunner.evaluateInPage('setTimeout(timerFired, 10)'); |
| |
| async function paused(callFrames) { |
| await SourcesTestRunner.captureStackTrace(callFrames); |
| SourcesTestRunner.setEventListenerBreakpoint('instrumentation:setTimeout.callback', false); |
| SourcesTestRunner.resumeExecution(next); |
| } |
| }, |
| |
| function testLoadBreakpointOnXHR(next) { |
| SourcesTestRunner.setEventListenerBreakpoint('listener:load', true, 'xmlhttprequest'); |
| SourcesTestRunner.setEventListenerBreakpoint('listener:error', true, 'xmlhttprequest'); |
| SourcesTestRunner.waitUntilPaused(paused); |
| TestRunner.evaluateInPageWithTimeout('addLoadListeners()'); |
| |
| async function paused(callFrames, reason, breakpointIds, asyncStackTrace, auxData) { |
| await SourcesTestRunner.captureStackTrace(callFrames); |
| printEventTargetName(auxData); |
| SourcesTestRunner.setEventListenerBreakpoint('listener:load', false, 'xmlhttprequest'); |
| SourcesTestRunner.setEventListenerBreakpoint('listener:error', false, 'xmlhttprequest'); |
| SourcesTestRunner.resumeExecution(resumed); |
| } |
| |
| function resumed() { |
| TestRunner.evaluateInPage('addLoadListeners()', next); |
| } |
| }, |
| |
| function testMediaEventBreakpoint(next) { |
| SourcesTestRunner.setEventListenerBreakpoint('listener:play', true, 'audio'); |
| SourcesTestRunner.waitUntilPaused(paused); |
| TestRunner.evaluateInPageWithTimeout('playVideo()'); |
| |
| async function paused(callFrames, reason, breakpointIds, asyncStackTrace, auxData) { |
| await SourcesTestRunner.captureStackTrace(callFrames); |
| printEventTargetName(auxData); |
| SourcesTestRunner.setEventListenerBreakpoint('listener:play', false, 'audio'); |
| SourcesTestRunner.resumeExecution(next); |
| } |
| } |
| ]; |
| |
| if (window.PointerEvent) { |
| testFunctions.push(function testPointerEventBreakpoint(next) { |
| SourcesTestRunner.setEventListenerBreakpoint('listener:pointerdown', true); |
| SourcesTestRunner.waitUntilPaused(paused); |
| TestRunner.evaluateInPageWithTimeout('addListenerAndPointerDown()'); |
| |
| async function paused(callFrames, reason, breakpointIds, asyncStackTrace, auxData) { |
| await SourcesTestRunner.captureStackTrace(callFrames); |
| printEventTargetName(auxData); |
| SourcesTestRunner.setEventListenerBreakpoint('listener:pointerdown', false); |
| SourcesTestRunner.resumeExecution(resumed); |
| } |
| |
| function resumed() { |
| TestRunner.evaluateInPage('addListenerAndPointerDown()', next); |
| } |
| }); |
| } |
| |
| SourcesTestRunner.runDebuggerTestSuite(testFunctions); |
| |
| function printEventTargetName(auxData) { |
| var targetName = auxData && auxData.targetName; |
| if (targetName) |
| TestRunner.addResult('Event target: ' + targetName); |
| else |
| TestRunner.addResult('FAIL: No event target name received!'); |
| } |
| })(); |