Bug 1373011 - Re-enable browser/components/extensions/test/browser/browser_ext_windows_events.js, r?zombie r?aswan
We intermittently receive an extra onFocusChanged event with a windowId of browser.windows.WINDOW_ID_NONE
when a window is closed. The test has been updated to ignore one of these events.
MozReview-Commit-ID: 8O1YvoKBvkH
--- a/browser/components/extensions/test/browser/browser-common.ini
+++ b/browser/components/extensions/test/browser/browser-common.ini
@@ -151,13 +151,12 @@ skip-if = debug || asan # Bug 1354681
[browser_ext_webNavigation_urlbar_transitions.js]
[browser_ext_windows.js]
[browser_ext_windows_create.js]
tags = fullscreen
[browser_ext_windows_create_params.js]
[browser_ext_windows_create_tabId.js]
[browser_ext_windows_create_url.js]
[browser_ext_windows_events.js]
-skip-if = os == 'mac' && debug # bug 1308068
[browser_ext_windows_size.js]
skip-if = os == 'mac' # Fails when windows are randomly opened in fullscreen mode
[browser_ext_windows_update.js]
tags = fullscreen
--- a/browser/components/extensions/test/browser/browser_ext_windows_events.js
+++ b/browser/components/extensions/test/browser/browser_ext_windows_events.js
@@ -11,107 +11,107 @@ add_task(async function testWindowsEvent
browser.test.assertTrue(Number.isInteger(window.id),
"Window object's id is an integer");
browser.test.assertEq("normal", window.type,
"Window object returned with the correct type");
browser.test.sendMessage("window-created", window.id);
});
- let lastWindowId, os;
- browser.windows.onFocusChanged.addListener(async windowId => {
- browser.test.log(`onFocusChange: windowId=${windowId} lastWindowId=${lastWindowId}`);
+ let lastWindowId;
+ browser.windows.onFocusChanged.addListener(async eventWindowId => {
+ browser.test.log(`onFocusChange: windowId=${eventWindowId} lastWindowId=${lastWindowId}`);
- if (windowId === browser.windows.WINDOW_ID_NONE && os === "linux") {
- browser.test.log("Ignoring a superfluous WINDOW_ID_NONE (blur) event on Linux");
- return;
- }
+ browser.test.assertTrue(lastWindowId !== eventWindowId,
+ "onFocusChanged fired once for the given window");
+ lastWindowId = eventWindowId;
- browser.test.assertTrue(lastWindowId !== windowId,
- "onFocusChanged fired once for the given window");
- lastWindowId = windowId;
-
- browser.test.assertTrue(Number.isInteger(windowId),
+ browser.test.assertTrue(Number.isInteger(eventWindowId),
"windowId is an integer");
let window = await browser.windows.getLastFocused();
-
- browser.test.assertEq(windowId, window.id,
- "Last focused window has the correct id");
- browser.test.sendMessage(`window-focus-changed`, window.id);
+ browser.test.sendMessage("window-focus-changed", {winId: eventWindowId, lastFocusedWindowId: window.id});
});
browser.windows.onRemoved.addListener(windowId => {
browser.test.log(`onRemoved: windowId=${windowId}`);
browser.test.assertTrue(Number.isInteger(windowId),
"windowId is an integer");
- browser.test.sendMessage(`window-removed`, windowId);
+ browser.test.sendMessage("window-removed", windowId);
browser.test.notifyPass("windows.events");
});
- browser.runtime.getPlatformInfo(info => {
- os = info.os;
- browser.test.sendMessage("ready");
- });
+ browser.test.sendMessage("ready", browser.windows.WINDOW_ID_NONE);
}
let extension = ExtensionTestUtils.loadExtension({
- background: `(${background})()`,
+ background,
});
await extension.startup();
- await extension.awaitMessage("ready");
+ const WINDOW_ID_NONE = await extension.awaitMessage("ready");
+
+ async function awaitFocusChanged() {
+ let windowInfo = await extension.awaitMessage("window-focus-changed");
+ if (windowInfo.winId === WINDOW_ID_NONE) {
+ info("Ignoring a superfluous WINDOW_ID_NONE (blur) event.");
+ windowInfo = await extension.awaitMessage("window-focus-changed");
+ }
+ is(windowInfo.winId, windowInfo.lastFocusedWindowId,
+ "Last focused window has the correct id");
+ return windowInfo.winId;
+ }
let {Management: {global: {windowTracker}}} = Cu.import("resource://gre/modules/Extension.jsm", {});
let currentWindow = window;
let currentWindowId = windowTracker.getId(currentWindow);
info(`Current window ID: ${currentWindowId}`);
- info(`Create browser window 1`);
+ info("Create browser window 1");
let win1 = await BrowserTestUtils.openNewBrowserWindow();
let win1Id = await extension.awaitMessage("window-created");
info(`Window 1 ID: ${win1Id}`);
// This shouldn't be necessary, but tests intermittently fail, so let's give
// it a try.
win1.focus();
- let winId = await extension.awaitMessage(`window-focus-changed`);
+ let winId = await awaitFocusChanged();
is(winId, win1Id, "Got focus change event for the correct window ID.");
- info(`Create browser window 2`);
+ info("Create browser window 2");
let win2 = await BrowserTestUtils.openNewBrowserWindow();
let win2Id = await extension.awaitMessage("window-created");
info(`Window 2 ID: ${win2Id}`);
win2.focus();
- winId = await extension.awaitMessage(`window-focus-changed`);
+ winId = await awaitFocusChanged();
is(winId, win2Id, "Got focus change event for the correct window ID.");
- info(`Focus browser window 1`);
+ info("Focus browser window 1");
await focusWindow(win1);
- winId = await extension.awaitMessage(`window-focus-changed`);
+ winId = await awaitFocusChanged();
is(winId, win1Id, "Got focus change event for the correct window ID.");
- info(`Close browser window 2`);
+ info("Close browser window 2");
await BrowserTestUtils.closeWindow(win2);
- winId = await extension.awaitMessage(`window-removed`);
+ winId = await extension.awaitMessage("window-removed");
is(winId, win2Id, "Got removed event for the correct window ID.");
- info(`Close browser window 1`);
+ info("Close browser window 1");
await BrowserTestUtils.closeWindow(win1);
currentWindow.focus();
- winId = await extension.awaitMessage(`window-removed`);
+ winId = await extension.awaitMessage("window-removed");
is(winId, win1Id, "Got removed event for the correct window ID.");
- winId = await extension.awaitMessage(`window-focus-changed`);
+ winId = await awaitFocusChanged();
is(winId, currentWindowId, "Got focus change event for the correct window ID.");
await extension.awaitFinish("windows.events");
await extension.unload();
});