blob: 294d0a5289760baf5eb4096b1ce15a7968d36c10 [file] [log] [blame]
<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>