Bug 1408934 - enable browser_webconsole_deactivateHUDForContext_unfocused_window.js;r=Honza draft
authorJulian Descottes <jdescottes@mozilla.com>
Fri, 01 Dec 2017 18:29:30 +0100
changeset 706973 f33fea6e792868bf9c5dcd18f8709953d69a3ce3
parent 706925 c8e3541dcf68da377c472d817f710e2c84823789
child 742813 4fdafa40200485da86012cb448c607290403f722
push id91974
push userjdescottes@mozilla.com
push dateMon, 04 Dec 2017 15:23:29 +0000
reviewersHonza
bugs1408934
milestone59.0a1
Bug 1408934 - enable browser_webconsole_deactivateHUDForContext_unfocused_window.js;r=Honza MozReview-Commit-ID: 8k5ISUxEPP7
devtools/client/webconsole/new-console-output/test/mochitest/browser.ini
devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_close_unfocused_window.js
devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_deactivateHUDForContext_unfocused_window.js
devtools/client/webconsole/new-console-output/test/mochitest/head.js
--- a/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini
@@ -230,22 +230,23 @@ subsuite = clipboard
 tags = mcb
 [browser_webconsole_batching.js]
 [browser_webconsole_block_mixedcontent_securityerrors.js]
 tags = mcb
 [browser_webconsole_cached_messages.js]
 [browser_webconsole_cd_iframe.js]
 [browser_webconsole_certificate_messages.js]
 [browser_webconsole_click_function_to_source.js]
-skip-if = true #	Bug 1406038
+skip-if = true # Bug 1406038
 [browser_webconsole_clickable_urls.js]
+[browser_webconsole_close_unfocused_window.js]
 [browser_webconsole_closing_after_completion.js]
 [browser_webconsole_close_sidebar.js]
 [browser_webconsole_closure_inspection.js]
-skip-if = true #	Bug 1405250
+skip-if = true # Bug 1405250
 [browser_webconsole_console_api_iframe.js]
 [browser_webconsole_console_dir.js]
 [browser_webconsole_console_dir_uninspectable.js]
 [browser_webconsole_console_group.js]
 [browser_webconsole_console_logging_workers_api.js]
 skip-if = true # Bug 1405252
 [browser_webconsole_console_table.js]
 [browser_webconsole_context_menu_copy_entire_message.js]
@@ -254,27 +255,25 @@ skip-if = (os == 'linux' && bits == 32 &
 [browser_webconsole_context_menu_copy_link_location.js]
 subsuite = clipboard
 skip-if = (os == 'linux' && bits == 32 && debug) # bug 1328915, disable linux32 debug devtools for timeouts
 [browser_webconsole_context_menu_copy_object.js]
 subsuite = clipboard
 [browser_webconsole_context_menu_open_url.js]
 [browser_webconsole_context_menu_store_as_global.js]
 [browser_webconsole_copy_link_location.js]
-skip-if = true #	Bug 1401944
+skip-if = true # Bug 1401944
 [browser_webconsole_csp_ignore_reflected_xss_message.js]
 skip-if = (e10s && debug) || (e10s && os == 'win') # Bug 1221499 enabled these on windows
 [browser_webconsole_cspro.js]
 skip-if = true # Bug 1408932
 # old console skip-if = e10s && (os == 'win' || os == 'mac') # Bug 1243967
 [browser_webconsole_ctrl_key_nav.js]
 skip-if = true # Bug 1408933
 # old console skip-if = os != "mac"
-[browser_webconsole_deactivateHUDForContext_unfocused_window.js]
-skip-if = true # Bug 1408934
 [browser_webconsole_document_focus.js]
 skip-if = true #	Bug 1404368
 [browser_webconsole_duplicate_errors.js]
 skip-if = true #	Bug 1403907
 [browser_webconsole_errors_after_page_reload.js]
 [browser_webconsole_eval_in_debugger_stackframe.js]
 skip-if = true # Bug 1408936
 [browser_webconsole_eval_in_debugger_stackframe2.js]
rename from devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_deactivateHUDForContext_unfocused_window.js
rename to devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_close_unfocused_window.js
--- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_deactivateHUDForContext_unfocused_window.js
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_close_unfocused_window.js
@@ -1,99 +1,44 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
-// See Bug 597103.
+// See Bug 597103. Check that closing the console on an unfocused window does not trigger
+// any error.
 
 const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
-                 "test/test-console.html";
-
-var tab1, tab2, win1, win2;
-var noErrors = true;
+                 "new-console-output/test/mochitest/test-console.html";
 
-function tab1Loaded() {
-  win2 = OpenBrowserWindow();
-  whenDelayedStartupFinished(win2, win2Loaded);
-}
+add_task(async function () {
+  let tab1 = await addTab(TEST_URI, {window});
 
-function win2Loaded() {
-  tab2 = win2.gBrowser.addTab(TEST_URI);
-  win2.gBrowser.selectedTab = tab2;
-  tab2.linkedBrowser.addEventListener("load", tab2Loaded, true);
-}
-
-function tab2Loaded(aEvent) {
-  tab2.linkedBrowser.removeEventListener(aEvent.type, tab2Loaded, true);
+  info("Open a second window");
+  let win2 = await openNewBrowserWindow();
 
-  let consolesOpened = 0;
-  function onWebConsoleOpen() {
-    consolesOpened++;
-    if (consolesOpened == 2) {
-      executeSoon(closeConsoles);
-    }
-  }
+  info("Add a test tab in the second window");
+  let tab2 = await addTab(TEST_URI, {window: win2});
+  win2.gBrowser.selectedTab = tab2;
 
-  function openConsoles() {
-    try {
-      let target1 = TargetFactory.forTab(tab1);
-      gDevTools.showToolbox(target1, "webconsole").then(onWebConsoleOpen);
-    } catch (ex) {
-      ok(false, "gDevTools.showToolbox(target1) exception: " + ex);
-      noErrors = false;
-    }
-
-    try {
-      let target2 = TargetFactory.forTab(tab2);
-      gDevTools.showToolbox(target2, "webconsole").then(onWebConsoleOpen);
-    } catch (ex) {
-      ok(false, "gDevTools.showToolbox(target2) exception: " + ex);
-      noErrors = false;
-    }
-  }
+  info("Open console in tabs located in different windows");
+  await openConsole(tab1);
+  await openConsole(tab2);
 
-  function closeConsoles() {
-    try {
-      let target1 = TargetFactory.forTab(tab1);
-      gDevTools.closeToolbox(target1).then(function () {
-        try {
-          let target2 = TargetFactory.forTab(tab2);
-          gDevTools.closeToolbox(target2).then(testEnd);
-        } catch (ex) {
-          ok(false, "gDevTools.closeToolbox(target2) exception: " + ex);
-          noErrors = false;
-        }
-      });
-    } catch (ex) {
-      ok(false, "gDevTools.closeToolbox(target1) exception: " + ex);
-      noErrors = false;
-    }
-  }
+  info("Close toolboxes in tabs located in different windows, one of them not focused");
+  await closeToolboxForTab(tab1);
+  await closeToolboxForTab(tab2);
 
-  function testEnd() {
-    ok(noErrors, "there were no errors");
+  info("Close the second window");
+  win2.close();
 
-    win1.gBrowser.removeTab(tab1);
-
-    Array.forEach(win2.gBrowser.tabs, function (aTab) {
-      win2.gBrowser.removeTab(aTab);
-    });
+  info("Close the test tab in the first window");
+  window.gBrowser.removeTab(tab1);
 
-    executeSoon(function () {
-      win2.close();
-      tab1 = tab2 = win1 = win2 = null;
-      finishTest();
-    });
-  }
+  ok(true, "No error was triggered during the test");
+});
 
-  openConsoles();
+function closeToolboxForTab(tab) {
+  let target = TargetFactory.forTab(tab);
+  return gDevTools.closeToolbox(target);
 }
-
-function test() {
-  loadTab(TEST_URI).then(() => {
-    tab1 = gBrowser.selectedTab;
-    win1 = window;
-    tab1Loaded();
-  });
-}
--- a/devtools/client/webconsole/new-console-output/test/mochitest/head.js
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/head.js
@@ -428,8 +428,27 @@ function simulateLinkClick(element) {
       window.openUILinkIn = oldOpenUILinkIn;
       resolve(link);
     };
 
     // Click on the link.
     element.click();
   });
 }
+
+/**
+ * Open a new browser window and return a promise that resolves when the new window has
+ * fired the "browser-delayed-startup-finished" event.
+ *
+ * @returns Promise
+ *          A Promise that resolves when the window is ready.
+ */
+function openNewBrowserWindow() {
+  let win = OpenBrowserWindow();
+  return new Promise(resolve => {
+    Services.obs.addObserver(function observer(subject, topic) {
+      if (win == subject) {
+        Services.obs.removeObserver(observer, topic);
+        resolve(win);
+      }
+    }, "browser-delayed-startup-finished");
+  });
+}