<!DOCTYPE HTML> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=976673 --> <head> <meta charset="utf-8"> <title>Test for Bug 976673</title> <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> </head> <body> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=976673">Mozilla Bug 976673</a> <p id="display"></p> <div id="content" style="display: none"> </div> <pre id="test"> </pre> <input id="input" onfocus="event.target.value = event.type;" onblur="event.target.value = event.type;"> <button id="button">set focus</button> <iframe id="iframe" src="http://example.org:80/tests/dom/base/test/iframe_bug976673.html"></iframe> <script> SimpleTest.waitForExplicitFinish(); // In e10s mode, ContentCacheInChild tries to retrieve selected text and // caret position when IMEContentObserver notifies IME of focus. At this time, // we hit assertion in nsContentIterator. SimpleTest.expectAssertions(0, 6); window.addEventListener("mousedown", function (aEvent) { aEvent.preventDefault(); }, false); function testSetFocus(aEventType, aCallback) { var description = "Setting focus from " + aEventType + " handler: "; var iframe = document.getElementById("iframe"); iframe.contentWindow.focus(); window.addEventListener("message", function (aEvent) { window.removeEventListener("message", arguments.callee, false); is(aEvent.data, "input-value: focus", description + "<input> in the iframe should get focus"); var input = document.getElementById("input"); input.value = ""; var button = document.getElementById("button"); var movingFocus = false; button.addEventListener(aEventType, function (aEvent) { movingFocus = true; input.focus(); aEvent.preventDefault(); button.removeEventListener(aEventType, arguments.callee, true); }, true); synthesizeMouseAtCenter(button, {}); window.addEventListener("message", function (aEvent) { window.removeEventListener("message", arguments.callee, false); if (movingFocus) { is(aEvent.data, "input-value: blur", description + "<input> in the iframe should get blur"); is(input.value, "focus", description + "<input> in the parent should get focus"); } else { is(aEvent.data, "input-value: focus", description + "<input> in the iframe should keep having focus"); } setTimeout(aCallback, 0); }, false); iframe.contentWindow.postMessage("check", "*"); }, false); iframe.contentWindow.postMessage("init", "*"); } function runTests() { testSetFocus("mousedown", function () { testSetFocus("mouseup", function () { testSetFocus("click", function () { testSetFocus("DoNothing", // testing wihout moving focus by script function () { SimpleTest.finish(); }); }); }); }); } SimpleTest.waitForFocus(runTests); </script> </body> </html>