add_task(function* test() { const kTestURI = "data:text/html," + "" + "" + "" + ""; let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, kTestURI); let fm = Components.classes["@mozilla.org/focus-manager;1"]. getService(Components.interfaces.nsIFocusManager); for (var button = 0; button < 3; button++) { // Set focus to a chrome element before synthesizing a mouse down event. document.getElementById("urlbar").focus(); is(fm.focusedElement, document.getElementById("urlbar").inputField, "Failed to move focus to search bar: button=" + button); // Synthesize mouse down event on browser object over the button, such that // the event propagates through both processes. EventUtils.synthesizeMouse(tab.linkedBrowser, 20, 20, { "button": button }, null); isnot(fm.focusedElement, document.getElementById("urlbar").inputField, "Failed to move focus away from search bar: button=" + button); yield ContentTask.spawn(tab.linkedBrowser, button, function (button) { let fm = Components.classes["@mozilla.org/focus-manager;1"]. getService(Components.interfaces.nsIFocusManager); Assert.equal(content.document.activeElement.id, "willBeFocused", "The input element isn't active element: button=" + button); Assert.equal(fm.focusedElement, content.document.activeElement, "The active element isn't focused element in App level: button=" + button); }); } gBrowser.removeTab(tab); });