Bug 1413089 - Fix intermittent browser_ext_themes_dynamic_getCurrent.js. r=mixedpuppy draft
authorTim Nguyen <ntim.bugs@gmail.com>
Fri, 12 Jan 2018 22:25:31 +0000
changeset 719931 82f788e57079010075ffde8c35d6b448da09c896
parent 719211 6705010893cd6d0a72f6adbcb81a92f052a041c2
child 745928 94b48d2780c6109fb49e5ee85e32cc4d7320c333
push id95396
push userbmo:ntim.bugs@gmail.com
push dateFri, 12 Jan 2018 22:26:07 +0000
reviewersmixedpuppy
bugs1413089
milestone59.0a1
Bug 1413089 - Fix intermittent browser_ext_themes_dynamic_getCurrent.js. r=mixedpuppy MozReview-Commit-ID: MylrmgEfz9
toolkit/components/extensions/test/browser/browser_ext_themes_dynamic_getCurrent.js
--- a/toolkit/components/extensions/test/browser/browser_ext_themes_dynamic_getCurrent.js
+++ b/toolkit/components/extensions/test/browser/browser_ext_themes_dynamic_getCurrent.js
@@ -32,16 +32,28 @@ add_task(async function test_get_current
           "headerURL": "image2.png",
         },
         "colors": {
           "accentcolor": ACCENT_COLOR_2,
           "textcolor": TEXT_COLOR_2,
         },
       };
 
+      function promiseWindowChanged(winId) {
+        return new Promise(resolve => {
+          let listener = windowId => {
+            if (windowId === winId) {
+              browser.windows.onFocusChanged.removeListener(listener);
+              resolve();
+            }
+          };
+          browser.windows.onFocusChanged.addListener(listener);
+        });
+      }
+
       function testTheme1(returnedTheme) {
         browser.test.assertTrue(
           returnedTheme.images.headerURL.includes("image1.png"),
           "Theme 1 header URL should be applied");
         browser.test.assertEq(
           ACCENT_COLOR_1, returnedTheme.colors.accentcolor,
           "Theme 1 accent color should be applied");
         browser.test.assertEq(
@@ -78,35 +90,41 @@ add_task(async function test_get_current
       browser.test.log("Testing getCurrent() with after theme.update(windowId)");
       const secondWin = await browser.windows.create();
       await browser.theme.update(secondWin.id, theme2);
       testTheme2(await browser.theme.getCurrent());
       testTheme1(await browser.theme.getCurrent(firstWin.id));
       testTheme2(await browser.theme.getCurrent(secondWin.id));
 
       browser.test.log("Testing getCurrent() after window focus change");
+      let focusChanged = promiseWindowChanged(firstWin.id);
       await browser.windows.update(firstWin.id, {focused: true});
+      await focusChanged;
       testTheme1(await browser.theme.getCurrent());
       testTheme1(await browser.theme.getCurrent(firstWin.id));
       testTheme2(await browser.theme.getCurrent(secondWin.id));
 
       browser.test.log("Testing getCurrent() after another window focus change");
+      focusChanged = promiseWindowChanged(secondWin.id);
       await browser.windows.update(secondWin.id, {focused: true});
+      await focusChanged;
       testTheme2(await browser.theme.getCurrent());
       testTheme1(await browser.theme.getCurrent(firstWin.id));
       testTheme2(await browser.theme.getCurrent(secondWin.id));
 
       browser.test.log("Testing getCurrent() after theme.reset(windowId)");
       await browser.theme.reset(firstWin.id);
       testTheme2(await browser.theme.getCurrent());
       testEmptyTheme(await browser.theme.getCurrent(firstWin.id));
       testTheme2(await browser.theme.getCurrent(secondWin.id));
 
       browser.test.log("Testing getCurrent() after reset and window focus change");
+      focusChanged = promiseWindowChanged(firstWin.id);
       await browser.windows.update(firstWin.id, {focused: true});
+      await focusChanged;
       testEmptyTheme(await browser.theme.getCurrent());
       testEmptyTheme(await browser.theme.getCurrent(firstWin.id));
       testTheme2(await browser.theme.getCurrent(secondWin.id));
 
       browser.test.log("Testing getCurrent() after theme.update(windowId)");
       await browser.theme.update(firstWin.id, theme1);
       testTheme1(await browser.theme.getCurrent());
       testTheme1(await browser.theme.getCurrent(firstWin.id));