summaryrefslogtreecommitdiffstats
path: root/dom/tests/browser/browser_focus_steal_from_chrome_during_mousedown.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/tests/browser/browser_focus_steal_from_chrome_during_mousedown.js')
-rw-r--r--dom/tests/browser/browser_focus_steal_from_chrome_during_mousedown.js45
1 files changed, 45 insertions, 0 deletions
diff --git a/dom/tests/browser/browser_focus_steal_from_chrome_during_mousedown.js b/dom/tests/browser/browser_focus_steal_from_chrome_during_mousedown.js
new file mode 100644
index 000000000..a21240872
--- /dev/null
+++ b/dom/tests/browser/browser_focus_steal_from_chrome_during_mousedown.js
@@ -0,0 +1,45 @@
+add_task(function* test() {
+ const kTestURI =
+ "data:text/html," +
+ "<script type=\"text/javascript\">" +
+ " function onMouseDown(aEvent) {" +
+ " document.getElementById('willBeFocused').focus();" +
+ " aEvent.preventDefault();" +
+ " }" +
+ "</script>" +
+ "<body id=\"body\">" +
+ "<button onmousedown=\"onMouseDown(event);\" style=\"width: 100px; height: 100px;\">click here</button>" +
+ "<input id=\"willBeFocused\"></body>";
+
+ 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);
+});