Bug 1373011 - Re-enable browser/components/extensions/test/browser/browser_ext_windows_events.js, r?zombie r?aswan draft
authorBob Silverberg <bsilverberg@mozilla.com>
Fri, 16 Jun 2017 12:25:36 -0400
changeset 601341 eaeeaa4f15b0c68bc479e9321ac259b7b77709f3
parent 600616 f4e52135d9bdc6ce98bb37b450021445aed894ce
child 635213 4279a33babb977272baa53399957cfacec1cfef7
push id66012
push userbmo:bob.silverberg@gmail.com
push dateWed, 28 Jun 2017 17:06:47 +0000
reviewerszombie, aswan
bugs1373011
milestone56.0a1
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
browser/components/extensions/test/browser/browser-common.ini
browser/components/extensions/test/browser/browser_ext_windows_events.js
--- 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();
 });