| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../resources/inspector-test.js"></script> |
| <script> |
| function loadSource(url, type) { |
| let sourceElement = document.createElement("source"); |
| sourceElement.type = type; |
| sourceElement.src = url; |
| |
| document.getElementById("video").appendChild(sourceElement); |
| } |
| |
| function enterFullscreen(element) { |
| document.addEventListener("keydown", (event) => { |
| document.addEventListener("webkitfullscreenchange", (event) => { |
| console.assert(document.webkitFullscreenElement === element); |
| |
| TestPage.dispatchEventToFrontend("TestPage-enteredFullscreen"); |
| }, {once: true}); |
| |
| element.webkitRequestFullscreen(); |
| }, {once: true}); |
| |
| if (window.testRunner) { |
| // DumpRenderTree changes the firstResponder to the WebInspector window when it opens. |
| // This refocuses the test page, ensuring it gets the event. |
| if (window.testRunner.setMainFrameIsFirstResponder) |
| window.testRunner.setMainFrameIsFirstResponder(true); |
| |
| eventSender.keyDown(" "); |
| } |
| } |
| |
| function exitFullscreen() { |
| document.addEventListener("webkitfullscreenchange", (event) => { |
| console.assert(!document.webkitFullscreenElement); |
| |
| TestPage.dispatchEventToFrontend("TestPage-exitedFullscreen"); |
| }, {once: true}); |
| |
| document.webkitExitFullscreen(); |
| } |
| |
| function test() |
| { |
| InspectorTest.debug(); |
| |
| let suite = InspectorTest.createAsyncSuite("DOM.didFireEvent"); |
| |
| let videoNode = null; |
| |
| function fullscreenTest(fullscreenElementId, resolve, reject) { |
| InspectorTest.awaitEvent("TestPage-exitedFullscreen") |
| .then(resolve, reject); |
| |
| InspectorTest.awaitEvent("TestPage-enteredFullscreen") |
| .then((event) => { |
| InspectorTest.log("Exiting fullscreen..."); |
| InspectorTest.evaluateInPage(`exitFullscreen()`).catch(reject); |
| }); |
| |
| let enabled = false; |
| let listener = videoNode.addEventListener(WI.DOMNode.Event.DidFireEvent, (event) => { |
| let {domEvent} = event.data; |
| if (domEvent.eventName !== "webkitfullscreenchange") |
| return; |
| |
| InspectorTest.pass(`Should receive a "webkitfullscreenchange" event.`); |
| InspectorTest.expectGreaterThan(domEvent.timestamp, 0, "Event timestamp should be greater than 0."); |
| InspectorTest.expectThat(domEvent.data, "Event should have data."); |
| InspectorTest.expectNotEqual(domEvent.data.enabled, enabled, `Fullscreen should be ${!enabled}.`); |
| InspectorTest.log("Target: " + event.target.displayName); |
| if (domEvent.originator) |
| InspectorTest.log("Originator: " + domEvent.originator.displayName); |
| |
| enabled = domEvent.data.enabled; |
| if (!enabled) |
| videoNode.removeEventListener(WI.DOMNode.Event.DidFireEvent, listener); |
| }); |
| |
| InspectorTest.log(`Entering fullscreen on #${fullscreenElementId}...`); |
| InspectorTest.evaluateInPage(`enterFullscreen(document.getElementById("${fullscreenElementId}"))`).catch(reject); |
| } |
| |
| suite.addTestCase({ |
| name: "DOM.didFireEvent.Basic", |
| description: "Check that HTMLMediaElement events work.", |
| test(resolve, reject) { |
| const file = "white.mp4"; |
| |
| let listener = videoNode.addEventListener(WI.DOMNode.Event.DidFireEvent, (event) => { |
| let {domEvent} = event.data; |
| if (domEvent.eventName !== "loadstart") |
| return; |
| |
| InspectorTest.pass(`Should receive a "loadstart" event.`) |
| InspectorTest.expectGreaterThan(domEvent.timestamp, 0, "Event timestamp should be greater than 0."); |
| |
| videoNode.removeEventListener(WI.DOMNode.Event.DidFireEvent, listener); |
| resolve(); |
| }); |
| |
| InspectorTest.log(`Adding video source "resources/${file}"...`); |
| InspectorTest.evaluateInPage(`loadSource("resources/${file}", "video/mp4")`); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "DOM.didFireEvent.Fullscreen", |
| description: "Check that fullscreen events work.", |
| test(resolve, reject) { |
| fullscreenTest("video", resolve, reject); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "DOM.didFireEvent.Inherited", |
| description: "Check that inherited events work.", |
| test(resolve, reject) { |
| fullscreenTest("container", resolve, reject); |
| } |
| }); |
| |
| WI.domManager.requestDocument((documentNode) => { |
| WI.domManager.querySelector(documentNode.id, "#video", (videoNodeId) => { |
| videoNode = WI.domManager.nodeForId(videoNodeId); |
| if (videoNode) |
| suite.runTestCasesAndFinish(); |
| else { |
| InspectorTest.fail(`DOM node for "#video" not found.`); |
| InspectorTest.completeTest(); |
| } |
| }); |
| }); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Tests that listeners registered by InspectorDOMAgent::addEventListenersToNode are working.</p> |
| <div id="container"> |
| <video id="video" muted autoplay></video> |
| </div> |
| </body> |
| </html> |