| <!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"); |
| |
| // Clear any existing CSP or security origin for the isolated world to |
| // prevent side effects from other tests. |
| testRunner.setIsolatedWorldInfo(1, null, null); |
| 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> |