| <!DOCTYPE html> | |
| <html> | |
| <title>Test how event handlers work with isolated Worlds</title> | |
| <script> | |
| // This test is meaningless without testRunner. | |
| if (window.testRunner && window.eventSender) { | |
| testRunner.dumpAsText(); | |
| testRunner.waitUntilDone(); | |
| window.textAttributeEventsCount = 0; | |
| window.xhrEventsCount = 0; | |
| window.functionAttributeEventsCount = 0; | |
| window.addEventListener("message", function(message) | |
| { | |
| testRunner.notifyDone(); | |
| }, false); | |
| window.textAttributeEventsCallback = function() | |
| { | |
| if (textAttributeEventsCount++) | |
| document.getElementById("log").innerHTML += "PASS"; | |
| } | |
| function newTest(title) | |
| { | |
| document.getElementById("log").innerHTML += "<br>" + title + ": "; | |
| } | |
| function textAttributeEventListener() | |
| { | |
| window.textAttributeEventsCallback = function() | |
| { | |
| if (window.alreadyFailed) | |
| return; | |
| document.getElementById("log").innerHTML += "FAIL"; | |
| window.alreadyFailed = true; | |
| } | |
| var test = document.getElementById("test"); | |
| test.innerHTML = "<button id='button1' onclick='textAttributeEventsCallback()'></button>"; | |
| document.getElementById("button1").click(); | |
| } | |
| function functionAttributeEventListener() | |
| { | |
| var test = document.getElementById("test"); | |
| var button = test.appendChild(document.createElement("button")); | |
| window.functionAttributeEventsCount = 0; | |
| button.onclick = function() | |
| { | |
| if (window.functionAttributeEventsCount++) | |
| document.getElementById("log").innerHTML += "PASS"; | |
| } | |
| button.style.cssText = "width: 30px;height:30px"; | |
| button.click(); | |
| } | |
| function xhrEventListener() | |
| { | |
| window.xhrWorld = 1; | |
| var done; | |
| var xhr = new XMLHttpRequest(); | |
| xhr.open("GET", "anyfile", true); | |
| xhr.onreadystatechange = function() { | |
| if (done) | |
| return; | |
| done = true; | |
| document.getElementById("log").innerHTML += window.xhrWorld ? "PASS" : "FAIL"; | |
| window.postMessage("done", "*"); | |
| }; | |
| xhr.send(null); | |
| } | |
| function runTestInWorld(worldId, funcName) | |
| { | |
| testRunner.evaluateScriptInIsolatedWorld(worldId, String(eval(funcName)) + "\n" + funcName + "();"); | |
| } | |
| function runTest() | |
| { | |
| newTest("Text attribute event listeners should always fire in main world"); | |
| runTestInWorld(1, "textAttributeEventListener"); | |
| var button1 = document.getElementById("button1"); | |
| button1.click(); | |
| button1.parentElement.removeChild(button1); | |
| newTest("Function attribute event listeners should fire in the world where they were created"); | |
| runTestInWorld(1, "functionAttributeEventListener"); | |
| var testDiv = document.getElementById("test"); | |
| // Land somewhere on the button. | |
| eventSender.mouseMoveTo(testDiv.offsetLeft + 5, testDiv.offsetTop + 5); | |
| eventSender.mouseDown(); | |
| eventSender.mouseUp(); | |
| newTest("XHR attribute event listeners should fire in the world where they were created"); | |
| runTestInWorld(1, "xhrEventListener"); | |
| } | |
| } | |
| </script> | |
| <body onload="runTest()"> | |
| <div id="test"></div> | |
| <div id="log"></div> | |
| </body> | |
| </html> |