Bug 1437845 - Enable browser_console_dead_objects.js in new frontend r?bgrins draft
authorMichael Ratcliffe <mratcliffe@mozilla.com>
Thu, 01 Mar 2018 13:31:58 +0000
changeset 761880 43c3fa169fa03144cd989ee768e4d4d578ba08bf
parent 761775 be57c2e7eaece816b87c7cc1028b9db1ab0415d4
child 761892 cd4d9ad84c93393c049c21dc0b0e6a25fa37af16
child 761901 b2d4488ac3078e3b745105dd596d45a3a1402205
child 762380 e9959e3558e51e54691f074f93178ad27c1630e5
push id101025
push userbmo:mratcliffe@mozilla.com
push dateThu, 01 Mar 2018 16:06:26 +0000
reviewersbgrins
bugs1437845
milestone60.0a1
Bug 1437845 - Enable browser_console_dead_objects.js in new frontend r?bgrins Now works in both non-E10S and E10S modes. MozReview-Commit-ID: 1W3d7XcZzfc
devtools/client/webconsole/new-console-output/test/mochitest/browser.ini
devtools/client/webconsole/new-console-output/test/mochitest/browser_console_dead_objects.js
--- a/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini
@@ -169,17 +169,16 @@ skip-if = true # Bug 1437806
 [browser_console_addonsdk_loader_exception.js]
 skip-if = true # Bug 1437807
 [browser_console_clear_method.js]
 skip-if = true # Bug 1437843
 [browser_console_consolejsm_output.js]
 skip-if = true # Bug 1437844
 [browser_console_context_menu_entries.js]
 [browser_console_dead_objects.js]
-skip-if = true # Bug 1437845
 [browser_console_error_source_click.js]
 [browser_console_filters.js]
 [browser_console_nsiconsolemessage.js]
 [browser_console_open_or_focus.js]
 [browser_console_restore.js]
 [browser_console_webconsole_ctrlw_close_tab.js]
 [browser_console_webconsole_iframe_messages.js]
 [browser_console_webconsole_private_browsing.js]
--- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_console_dead_objects.js
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_console_dead_objects.js
@@ -1,95 +1,43 @@
 /* -*- 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/ */
 
+/* import-globals-from head.js */
+
 // Check that Dead Objects do not break the Web/Browser Consoles.
-// See bug 883649.
-// This test does:
-// - opens a new tab,
-// - opens the Browser Console,
-// - stores a reference to the content document of the tab on the chrome
-//   window object,
-// - closes the tab,
-// - tries to use the object that was pointing to the now-defunct content
-// document. This is the dead object.
+//
+// This test:
+// - Opens the Browser Console.
+// - Creates a sandbox.
+// - Stores a reference to the sandbox on the chrome window object.
+// - Nukes the sandbox
+// - Tries to use the sandbox. This is the dead object.
 
 "use strict";
 
-const TEST_URI = "data:text/html;charset=utf8,<p>dead objects!";
-
-function test() {
-  let hud = null;
+add_task(async function () {
+  let hud = await HUDService.toggleBrowserConsole();
+  ok(hud, "browser console opened");
 
-  registerCleanupFunction(() => {
-    Services.prefs.clearUserPref("devtools.chrome.enabled");
-  });
-
-  Task.spawn(runner).then(finishTest);
-
-  function* runner() {
-    Services.prefs.setBoolPref("devtools.chrome.enabled", true);
-    yield loadTab(TEST_URI);
-    let browser = gBrowser.selectedBrowser;
-    let winID = browser.outerWindowID;
+  let jsterm = hud.jsterm;
 
-    info("open the browser console");
-
-    hud = yield HUDService.toggleBrowserConsole();
-    ok(hud, "browser console opened");
-
-    let jsterm = hud.jsterm;
-
-    jsterm.clearOutput();
+  // Add the reference to the nuked sandbox.
+  await jsterm.execute("window.nukedSandbox = Cu.Sandbox(null);" +
+                       "Cu.nukeSandbox(nukedSandbox);");
 
-    // Add the reference to the content document.
-    yield jsterm.execute("Cu = Components.utils;" +
-                  "Cu.import('resource://gre/modules/Services.jsm');" +
-                  "chromeWindow = Services.wm.getMostRecentWindow('" +
-                  "navigator:browser');" +
-                  "foobarzTezt = chromeWindow.content.document;" +
-                  "delete chromeWindow");
-
-    gBrowser.removeCurrentTab();
+  await jsterm.execute("nukedSandbox");
+  await waitFor(() => findMessage(hud, "DeadObject", ".objectTitle"));
 
-    yield TestUtils.topicObserved("outer-window-nuked", (subject, data) => {
-      let id = subject.QueryInterface(Ci.nsISupportsPRUint64).data;
-      return id == winID;
-    });
-
-    let msg = yield jsterm.execute("foobarzTezt");
-
-    isnot(hud.outputNode.textContent.indexOf("DeadObject"), -1,
-          "dead object found");
-
-    jsterm.setInputValue("foobarzTezt");
-
-    for (let c of ".hello") {
-      EventUtils.synthesizeKey(c, {}, hud.iframeWindow);
-    }
-
-    yield jsterm.execute();
-
-    isnot(hud.outputNode.textContent.indexOf("can't access dead object"), -1,
-          "'cannot access dead object' message found");
+  jsterm.execute("nukedSandbox.hello");
+  let msg = await waitFor(() => findMessage(hud, "can't access dead object"));
 
-    // Click the second execute output.
-    let clickable = msg.querySelector("a");
-    ok(clickable, "clickable object found");
-    isnot(clickable.textContent.indexOf("DeadObject"), -1,
-          "message text check");
-
-    msg.scrollIntoView();
+  // Check that the link contains an anchor. We can't click on the link because
+  // clicking links from tests attempts to access an external URL and crashes
+  // Firefox.
+  let anchor = msg.querySelector("a");
+  is(anchor.textContent, "[Learn More]", "Link text is correct");
 
-    executeSoon(() => {
-      EventUtils.synthesizeMouseAtCenter(clickable, {}, hud.iframeWindow);
-    });
-
-    yield jsterm.once("variablesview-fetched");
-    ok(true, "variables view fetched");
-
-    msg = yield jsterm.execute("delete window.foobarzTezt; 2013-26");
-
-    isnot(msg.textContent.indexOf("1987"), -1, "result message found");
-  }
-}
+  await jsterm.execute("delete window.nukedSandbox; 2013-26");
+  await waitFor(() => findMessage(hud, "1987"));
+});