summaryrefslogtreecommitdiffstats
path: root/testing/mochitest/tests/browser/browser_waitForFocus.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/mochitest/tests/browser/browser_waitForFocus.js')
-rw-r--r--testing/mochitest/tests/browser/browser_waitForFocus.js160
1 files changed, 160 insertions, 0 deletions
diff --git a/testing/mochitest/tests/browser/browser_waitForFocus.js b/testing/mochitest/tests/browser/browser_waitForFocus.js
new file mode 100644
index 0000000000..b41b07f423
--- /dev/null
+++ b/testing/mochitest/tests/browser/browser_waitForFocus.js
@@ -0,0 +1,160 @@
+const gBaseURL = "https://example.com/browser/testing/mochitest/tests/browser/";
+
+function promiseTabLoadEvent(tab, url) {
+ let promise = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, url);
+ if (url) {
+ tab.linkedBrowser.loadURI(Services.io.newURI(url));
+ }
+ return promise;
+}
+
+// Load a new blank tab
+add_task(async function () {
+ await BrowserTestUtils.openNewForegroundTab(gBrowser);
+
+ gURLBar.focus();
+
+ let browser = gBrowser.selectedBrowser;
+ await SimpleTest.promiseFocus(browser, true);
+
+ is(
+ document.activeElement,
+ browser,
+ "Browser is focused when about:blank is loaded"
+ );
+
+ gBrowser.removeCurrentTab();
+ gURLBar.focus();
+});
+
+add_task(async function () {
+ await BrowserTestUtils.openNewForegroundTab(gBrowser);
+
+ gURLBar.focus();
+
+ let browser = gBrowser.selectedBrowser;
+ // If we're running in e10s, we don't have access to the content
+ // window, so only test window arguments in non-e10s mode.
+ if (browser.contentWindow) {
+ await SimpleTest.promiseFocus(browser.contentWindow, true);
+
+ is(
+ document.activeElement,
+ browser,
+ "Browser is focused when about:blank is loaded"
+ );
+ }
+
+ gBrowser.removeCurrentTab();
+ gURLBar.focus();
+});
+
+// Load a tab with a subframe inside it and wait until the subframe is focused
+add_task(async function () {
+ let tab = BrowserTestUtils.addTab(gBrowser);
+ gBrowser.selectedTab = tab;
+
+ let browser = gBrowser.getBrowserForTab(tab);
+ // If we're running in e10s, we don't have access to the content
+ // window, so only test <iframe> arguments in non-e10s mode.
+ if (browser.contentWindow) {
+ await promiseTabLoadEvent(tab, gBaseURL + "waitForFocusPage.html");
+
+ await SimpleTest.promiseFocus(browser.contentWindow);
+
+ is(
+ document.activeElement,
+ browser,
+ "Browser is focused when page is loaded"
+ );
+
+ await SimpleTest.promiseFocus(browser.contentWindow.frames[0]);
+
+ is(
+ browser.contentWindow.document.activeElement.localName,
+ "iframe",
+ "Child iframe is focused"
+ );
+ }
+
+ gBrowser.removeCurrentTab();
+});
+
+// Pass a browser to promiseFocus
+add_task(async function () {
+ await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ gBaseURL + "waitForFocusPage.html"
+ );
+
+ gURLBar.focus();
+
+ await SimpleTest.promiseFocus(gBrowser.selectedBrowser);
+
+ is(
+ document.activeElement,
+ gBrowser.selectedBrowser,
+ "Browser is focused when promiseFocus is passed a browser"
+ );
+
+ gBrowser.removeCurrentTab();
+});
+
+// Tests focusing the sidebar, which is in a parent process subframe
+// and then switching the focus to another window.
+add_task(async function () {
+ await SidebarUI.show("viewBookmarksSidebar");
+
+ gURLBar.focus();
+
+ // Focus the sidebar.
+ await SimpleTest.promiseFocus(SidebarUI.browser);
+ is(
+ document.activeElement,
+ document.getElementById("sidebar"),
+ "sidebar focused"
+ );
+ ok(
+ document.activeElement.contentDocument.hasFocus(),
+ "sidebar document hasFocus"
+ );
+
+ // Focus the sidebar again, which should cause no change.
+ await SimpleTest.promiseFocus(SidebarUI.browser);
+ is(
+ document.activeElement,
+ document.getElementById("sidebar"),
+ "sidebar focused"
+ );
+ ok(
+ document.activeElement.contentDocument.hasFocus(),
+ "sidebar document hasFocus"
+ );
+
+ // Focus another window. The sidebar should no longer be focused.
+ let window2 = await BrowserTestUtils.openNewBrowserWindow();
+ is(
+ document.activeElement,
+ document.getElementById("sidebar"),
+ "sidebar focused after window 2 opened"
+ );
+ ok(
+ !document.activeElement.contentDocument.hasFocus(),
+ "sidebar document hasFocus after window 2 opened"
+ );
+
+ // Focus the first window again and the sidebar should be focused again.
+ await SimpleTest.promiseFocus(window);
+ is(
+ document.activeElement,
+ document.getElementById("sidebar"),
+ "sidebar focused after window1 refocused"
+ );
+ ok(
+ document.activeElement.contentDocument.hasFocus(),
+ "sidebar document hasFocus after window1 refocused"
+ );
+
+ await BrowserTestUtils.closeWindow(window2);
+ await SidebarUI.hide();
+});