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
--- 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"));
+});