From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- .../browser/browser_focus_steal_from_chrome.js | 151 +++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 dom/tests/browser/browser_focus_steal_from_chrome.js (limited to 'dom/tests/browser/browser_focus_steal_from_chrome.js') diff --git a/dom/tests/browser/browser_focus_steal_from_chrome.js b/dom/tests/browser/browser_focus_steal_from_chrome.js new file mode 100644 index 000000000..37c2e1028 --- /dev/null +++ b/dom/tests/browser/browser_focus_steal_from_chrome.js @@ -0,0 +1,151 @@ +add_task(function* () { + requestLongerTimeout(2); + + let testingList = [ + { uri: "data:text/html,", + tagName: "INPUT", methodName: "focus" }, + { uri: "data:text/html,", + tagName: "INPUT", methodName: "select" }, + { uri: "data:text/html,anchor", + tagName: "A", methodName: "focus" }, + { uri: "data:text/html,", + tagName: "BUTTON", methodName: "focus" }, + { uri: "data:text/html,", + tagName: "SELECT", methodName: "focus" }, + { uri: "data:text/html,", + tagName: "TEXTAREA", methodName: "focus" }, + { uri: "data:text/html,", + tagName: "TEXTAREA", methodName: "select" }, + { uri: "data:text/html,", + tagName: "INPUT", methodName: "focus of label element" }, + { uri: "data:text/html,
legend
", + tagName: "INPUT", methodName: "focus of legend element" }, + { uri: "data:text/html," + + "", + tagName: "INPUT", methodName: "click event on the label element" }, + ]; + + yield BrowserTestUtils.withNewTab("about:blank", function*(bg) { + yield BrowserTestUtils.withNewTab("about:blank", function*(fg) { + for (let test of testingList) { + // Focus the foreground tab's content + fg.focus(); + + // Load the URIs. + yield BrowserTestUtils.loadURI(bg, test.uri); + yield BrowserTestUtils.browserLoaded(bg); + yield BrowserTestUtils.loadURI(fg, test.uri); + yield BrowserTestUtils.browserLoaded(fg); + + ok(true, "Test1: Both of the tabs are loaded"); + + // Confirm that the contents should be able to steal focus from content. + yield ContentTask.spawn(fg, test, test => { + return new Promise(res => { + function f() { + let e = content.document.activeElement; + if (e.tagName != test.tagName) { + setTimeout(f, 10); + } else { + is(Services.focus.focusedElement, e, + "the foreground tab's " + test.tagName + + " element isn't focused by the " + test.methodName + + " (Test1: content can steal focus)"); + res(); + } + } + f(); + }); + }); + + yield ContentTask.spawn(bg, test, test => { + return new Promise(res => { + function f() { + let e = content.document.activeElement; + if (e.tagName != test.tagName) { + setTimeout(f, 10); + } else { + isnot(Services.focus.focusedElement, e, + "the background tab's " + test.tagName + + " element is focused by the " + test.methodName + + " (Test1: content can steal focus)"); + res(); + } + } + f(); + }); + }); + + if (fg.isRemoteBrowser) { + is(Services.focus.focusedElement, fg, + "Focus should be on the content in the parent process"); + } + + // Focus chrome + document.getElementById("urlbar").focus(); + let originalFocus = Services.focus.focusedElement; + + // Load about:blank just to make sure that everything works nicely + yield BrowserTestUtils.loadURI(bg, "about:blank"); + yield BrowserTestUtils.browserLoaded(bg); + yield BrowserTestUtils.loadURI(fg, "about:blank"); + yield BrowserTestUtils.browserLoaded(fg); + + // Load the URIs. + yield BrowserTestUtils.loadURI(bg, test.uri); + yield BrowserTestUtils.browserLoaded(bg); + yield BrowserTestUtils.loadURI(fg, test.uri); + yield BrowserTestUtils.browserLoaded(fg); + + ok(true, "Test2: Both of the tabs are loaded"); + + // Confirm that the contents should be able to steal focus from content. + yield ContentTask.spawn(fg, test, test => { + return new Promise(res => { + function f() { + let e = content.document.activeElement; + if (e.tagName != test.tagName) { + setTimeout(f, 10); + } else { + isnot(Services.focus.focusedElement, e, + "the foreground tab's " + test.tagName + + " element is focused by the " + test.methodName + + " (Test2: content can NOT steal focus)"); + res(); + } + } + f(); + }); + }); + + yield ContentTask.spawn(bg, test, test => { + return new Promise(res => { + function f() { + let e = content.document.activeElement; + if (e.tagName != test.tagName) { + setTimeout(f, 10); + } else { + isnot(Services.focus.focusedElement, e, + "the background tab's " + test.tagName + + " element is focused by the " + test.methodName + + " (Test2: content can NOT steal focus)"); + res(); + } + } + f(); + }); + }); + + is(Services.focus.focusedElement, originalFocus, + "The parent process's focus has shifted " + + "(methodName = " + test.methodName + ")" + + " (Test2: content can NOT steal focus)"); + } + }); + }); +}); -- cgit v1.2.3