| <html> |
| <head> |
| <script type="text/javascript" src="../../http/tests/inspector-protocol/inspector-protocol-test.js"></script> |
| <script> |
| |
| function test() |
| { |
| // A general-purpose engine for sending a sequence of protocol commands. |
| // The clients provide requests and response handlers, while the engine catches |
| // errors and makes sure that once there's nothing to do completeTest() is called. |
| // @param step is an object with command, params and callback fields. |
| function runRequestSeries(step) |
| { |
| processStep(step); |
| |
| function processStep(s) |
| { |
| try { |
| processStepOrFail(s); |
| } catch (e) { |
| InspectorTest.log(e.stack); |
| InspectorTest.completeTest(); |
| } |
| } |
| |
| function processStepOrFail(s) |
| { |
| if (!s) { |
| InspectorTest.completeTest(); |
| return; |
| } |
| if (!s.command) { |
| // A simple loopback step. |
| var next = s.callback(); |
| processStep(next); |
| return; |
| } |
| |
| var innerCallback = function(response) |
| { |
| if ("error" in response) { |
| InspectorTest.log(response.error.message); |
| InspectorTest.completeTest(); |
| return; |
| } |
| var next; |
| try { |
| next = s.callback(response.result); |
| } catch (e) { |
| InspectorTest.log(e.stack); |
| InspectorTest.completeTest(); |
| return; |
| } |
| processStep(next); |
| } |
| InspectorTest.sendCommand(s.command, s.params, innerCallback); |
| } |
| } |
| |
| runRequestSeries({ callback: callbackStartWindow }); |
| |
| function callbackStartWindow() |
| { |
| var expression = "(function(){\n\ |
| window.addEventListener('scroll', function(){ consol.log(42) }, false);\n\ |
| window.addEventListener('scroll', function(){ consol.log(42) }, false);\n\ |
| function clickHandler(event) { console.log('click - button - bubbling (registered before attribute)'); }\n\ |
| window.addEventListener(\"click\", clickHandler, true);\n\ |
| window.addEventListener(\"hover\", function hoverHandler(event) { console.log(\"hover - button - bubbling\"); }, true);\n\ |
| return window;\n\ |
| })()"; |
| return { command: "Runtime.evaluate", params: {expression: expression, objectGroup: "event-listeners-test"}, callback: callbackEvalWindow }; |
| } |
| function callbackEvalWindow(result) |
| { |
| var id = result.result.objectId; |
| if (id === undefined) |
| throw new Error("objectId is expected"); |
| return { |
| command: "DOMDebugger.getEventListeners", params: {objectId: id}, callback: callbackListenersWindow |
| }; |
| } |
| function callbackListenersWindow(result) |
| { |
| logGetListenersResult("window", result); |
| return {callback: calbackStartDivWithListeners}; |
| } |
| |
| function calbackStartDivWithListeners() |
| { |
| var expression = "(function(){\n\ |
| var div = document.getElementById(\"listeners1\");\n\ |
| function clickHandler(event) { console.log('click - button - bubbling (registered before attribute)'); }\n\ |
| div.addEventListener(\"click\", clickHandler, true);\n\ |
| div.addEventListener(\"hover\", function hoverHandler(event) { console.log(\"hover - button - bubbling\"); }, true);\n\ |
| return div;\n\ |
| })()"; |
| return { command: "Runtime.evaluate", params: {expression: expression, objectGroup: "event-listeners-test"}, callback: callbackEvalDivWithListeners }; |
| } |
| function callbackEvalDivWithListeners(result) |
| { |
| var id = result.result.objectId; |
| if (id === undefined) |
| throw new Error("objectId is expected"); |
| return { |
| command: "DOMDebugger.getEventListeners", params: {objectId: id}, callback: callbackListenersDivWithListeners |
| }; |
| } |
| function callbackListenersDivWithListeners(result) |
| { |
| logGetListenersResult("div#listeners1", result); |
| return {callback: calbackStartDivWithoutListeners}; |
| } |
| |
| function calbackStartDivWithoutListeners() |
| { |
| var expression = "(function(){\n\ |
| return document.getElementById(\"listeners2\");\n\ |
| })()"; |
| return { command: "Runtime.evaluate", params: {expression: expression, objectGroup: "event-listeners-test"}, callback: callbackEvalDivWithoutListeners }; |
| } |
| function callbackEvalDivWithoutListeners(result) |
| { |
| var id = result.result.objectId; |
| if (id === undefined) |
| throw new Error("objectId is expected"); |
| return { |
| command: "DOMDebugger.getEventListeners", params: {objectId: id}, callback: callbackListenersDivWithoutListeners |
| }; |
| } |
| function callbackListenersDivWithoutListeners(result) |
| { |
| logGetListenersResult("div#listeners2", result); |
| } |
| |
| function logGetListenersResult(title, protocolResult) |
| { |
| InspectorTest.log("Event listeners of " + title); |
| var listenersArray = protocolResult.listeners; |
| listenersArray.sort(TypedThingComparator); |
| for (var i = 0; i < listenersArray.length; i++) { |
| var l = listenersArray[i]; |
| InspectorTest.log(" type:" + l.type); |
| InspectorTest.log(" useCapture:" + l.useCapture); |
| InspectorTest.log(" lineNumber:" + l.lineNumber); |
| InspectorTest.log(" columnNumber:" + l.columnNumber); |
| if (l.handler) { |
| InspectorTest.log(" handler.type:" + l.handler.type); |
| InspectorTest.log(" handler.className:" + l.handler.className); |
| InspectorTest.log(" handler.description:" + l.handler.description.replace(/(\r\n|\n|\r)/gm,"")); |
| } |
| InspectorTest.log(""); |
| } |
| InspectorTest.log(""); |
| function TypedThingComparator(o1, o2) |
| { |
| return o1.type === o2.type ? 0 : (o1.type < o2.type ? -1 : 1); |
| } |
| } |
| } |
| </script> |
| </head> |
| <div id="listeners1" onload="return 42;"></div> |
| <div id="listeners2"></div> |
| <body onLoad="runTest();"> |
| </body> |
| </html> |