Backed out 5 changesets (bug 1314057) for devtools failures on browser_browser_toolbox_debugger.js . CLOSED TREE

Backed out changeset 9bb3fd62313e (bug 1314057)
Backed out changeset cdb30006eb31 (bug 1314057)
Backed out changeset 7691cbfeac6a (bug 1314057)
Backed out changeset 1b274560201f (bug 1314057)
Backed out changeset 059a19d11454 (bug 1314057)
This commit is contained in:
Narcis Beleuzu 2018-09-17 07:29:31 +03:00
Родитель 7c7f4d95f6
Коммит fdb058b01f
35 изменённых файлов: 370 добавлений и 198 удалений

Просмотреть файл

@ -12,7 +12,6 @@ support-files =
service-workers/simple.html
service-workers/simple-unicode.html
!/devtools/client/debugger/new/test/mochitest/helpers.js
!/devtools/client/debugger/new/test/mochitest/helpers/context.js
!/devtools/client/shared/test/frame-script-utils.js
!/devtools/client/shared/test/shared-head.js
!/devtools/client/shared/test/telemetry-test-helpers.js

Просмотреть файл

@ -8,11 +8,6 @@ Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/debugger/new/test/mochitest/helpers.js",
this);
/* import-globals-from ../../debugger/new/test/mochitest/helpers/context.js */
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/debugger/new/test/mochitest/helpers/context.js",
this);
const TAB_URL = URL_ROOT + "service-workers/debug.html";
add_task(async function() {

Просмотреть файл

@ -17,7 +17,6 @@ support-files =
head.js
!/devtools/client/shared/test/frame-script-utils.js
!/devtools/client/shared/test/shared-head.js
!/devtools/client/debugger/new/test/mochitest/helpers/context.js
!/devtools/client/shared/test/telemetry-test-helpers.js
[browser_canvas-actor-test-01.js]

Просмотреть файл

@ -5,7 +5,11 @@
* Tests if the a function call's stack is properly displayed in the UI.
*/
requestLongerTimeout(2);
// Force the old debugger UI since it's directly used (see Bug 1301705)
Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", false);
registerCleanupFunction(function() {
Services.prefs.clearUserPref("devtools.debugger.new-debugger-frontend");
});
async function ifTestingSupported() {
const { target, panel } = await initCanvasDebuggerFrontend(SIMPLE_CANVAS_DEEP_STACK_URL);
@ -66,8 +70,12 @@ async function ifTestingSupported() {
await jumpedToSource;
const toolbox = await gDevTools.getToolbox(target);
const dbg = createDebuggerContext(toolbox);
await validateDebuggerLocation(dbg, SIMPLE_CANVAS_DEEP_STACK_URL, 26);
const { panelWin: { DebuggerView: view } } = toolbox.getPanel("jsdebugger");
is(view.Sources.selectedValue, getSourceActor(view.Sources, SIMPLE_CANVAS_DEEP_STACK_URL),
"The expected source was shown in the debugger.");
is(view.editor.getCursor().line, 25,
"The expected source line is highlighted in the debugger.");
await teardown(panel);
finish();

Просмотреть файл

@ -6,7 +6,11 @@
* and jumping to source in the debugger for the topmost call item works.
*/
requestLongerTimeout(2);
// Force the old debugger UI since it's directly used (see Bug 1301705)
Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", false);
registerCleanupFunction(function() {
Services.prefs.clearUserPref("devtools.debugger.new-debugger-frontend");
});
async function ifTestingSupported() {
const { target, panel } = await initCanvasDebuggerFrontend(SIMPLE_CANVAS_DEEP_STACK_URL);
@ -41,8 +45,12 @@ async function ifTestingSupported() {
await jumpedToSource;
const toolbox = await gDevTools.getToolbox(target);
const dbg = createDebuggerContext(toolbox);
await validateDebuggerLocation(dbg, SIMPLE_CANVAS_DEEP_STACK_URL, 24);
const { panelWin: { DebuggerView: view } } = toolbox.getPanel("jsdebugger");
is(view.Sources.selectedValue, getSourceActor(view.Sources, SIMPLE_CANVAS_DEEP_STACK_URL),
"The expected source was shown in the debugger.");
is(view.editor.getCursor().line, 23,
"The expected source line is highlighted in the debugger.");
await teardown(panel);
finish();

Просмотреть файл

@ -3,7 +3,6 @@
/* eslint no-unused-vars: [2, {"vars": "local"}] */
/* import-globals-from ../../shared/test/shared-head.js */
/* import-globals-from ../../debugger/new/test/mochitest/helpers/context.js */
"use strict";
@ -12,11 +11,6 @@ Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/shared/test/shared-head.js",
this);
// Import helpers for the new debugger
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/debugger/new/test/mochitest/helpers/context.js",
this);
var { generateUUID } = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator);
var { DebuggerClient } = require("devtools/shared/client/debugger-client");
@ -179,13 +173,3 @@ function getSourceActor(aSources, aURL) {
const item = aSources.getItemForAttachment(a => a.source.url === aURL);
return item ? item.value : null;
}
async function validateDebuggerLocation(dbg, url, line) {
const location = dbg.selectors.getSelectedLocation(dbg.getState());
const sourceUrl = dbg.selectors.getSelectedSource(dbg.getState()).url;
is(sourceUrl, url,
"The expected source was shown in the debugger.");
is(location.line, line,
"The expected source line is highlighted in the debugger.");
}

Просмотреть файл

@ -5,7 +5,6 @@ skip-if = (os == 'linux' && debug && bits == 32)
support-files =
head.js
helpers.js
helpers/context.js
!/devtools/client/shared/test/shared-head.js
!/devtools/client/shared/test/telemetry-test-helpers.js
## START-SOURCEMAPPED-FIXTURES - Generated by examples/sourcemapped/build.js

Просмотреть файл

@ -6,11 +6,6 @@
* required from other panel test files.
*/
// Import helpers for the new debugger
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/debugger/new/test/mochitest/helpers/context.js",
this);
var { Toolbox } = require("devtools/client/framework/toolbox");
var { Task } = require("devtools/shared/task");
var asyncStorage = require("devtools/shared/async-storage");
@ -467,6 +462,23 @@ function isSelectedFrameSelected(dbg, state) {
return source.id == sourceId;
}
function createDebuggerContext(toolbox) {
const panel = toolbox.getPanel("jsdebugger");
const win = panel.panelWin;
const { store, client, selectors, actions } = panel.getVarsForTests();
return {
actions: actions,
selectors: selectors,
getState: store.getState,
store: store,
client: client,
toolbox: toolbox,
win: win,
panel: panel
};
}
/**
* Clear all the debugger related preferences.
*/

Просмотреть файл

@ -1,23 +0,0 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
/**
* Helper method to create a "dbg" context for other tools to use
*/
function createDebuggerContext(toolbox) {
const panel = toolbox.getPanel("jsdebugger");
const win = panel.panelWin;
const { store, client, selectors, actions } = panel.getVarsForTests();
return {
actions: actions,
selectors: selectors,
getState: store.getState,
store: store,
client: client,
toolbox: toolbox,
win: win,
panel: panel
};
}

Просмотреть файл

@ -51,6 +51,12 @@ function setupKeyBindingsTest() {
}
add_task(async function() {
// Use the new debugger frontend because the old one swallows the netmonitor shortcut:
// https://bugzilla.mozilla.org/show_bug.cgi?id=1370442#c7
await SpecialPowers.pushPrefEnv({set: [
["devtools.debugger.new-debugger-frontend", true]
]});
await addTab(TEST_URL);
await new Promise(done => waitForFocus(done));

Просмотреть файл

@ -21,6 +21,8 @@ const JS_URL = `${URL_ROOT}code_binary_search.js`;
const COFFEE_URL = `${URL_ROOT}code_binary_search.coffee`;
add_task(async function() {
await pushPref("devtools.debugger.new-debugger-frontend", true);
const toolbox = await openNewTabAndToolbox(PAGE_URL, "jsdebugger");
const service = toolbox.sourceMapURLService;

Просмотреть файл

@ -16,6 +16,8 @@ const JS_URL = `${URL_ROOT}code_binary_search_absolute.js`;
const ORIGINAL_URL = `${URL_ROOT}code_binary_search.coffee`;
add_task(async function() {
await pushPref("devtools.debugger.new-debugger-frontend", true);
const toolbox = await openNewTabAndToolbox(PAGE_URL, "jsdebugger");
const service = toolbox.sourceMapURLService;

Просмотреть файл

@ -18,6 +18,8 @@ const JS_URL = `${TEST_ROOT}code_inline_bundle.js`;
const ORIGINAL_URL = "webpack:///code_inline_original.js";
add_task(async function() {
await pushPref("devtools.debugger.new-debugger-frontend", true);
const toolbox = await openNewTabAndToolbox(PAGE_URL, "jsdebugger");
const service = toolbox.sourceMapURLService;

Просмотреть файл

@ -16,6 +16,8 @@ const GENERATED_LINE = 86;
const ORIGINAL_LINE = 13;
add_task(async function() {
await pushPref("devtools.debugger.new-debugger-frontend", true);
// Start with the empty page, then navigate, so that we can properly
// listen for new sources arriving.
const toolbox = await openNewTabAndToolbox(INITIAL_URL, "webconsole");

Просмотреть файл

@ -14,6 +14,12 @@ let panelWin = null;
const URL = "data:text/html;charset=utf8,test split console key delegation";
// Force the old debugger UI since it's directly used (see Bug 1301705)
Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", false);
registerCleanupFunction(function() {
Services.prefs.clearUserPref("devtools.debugger.new-debugger-frontend");
});
add_task(async function() {
const tab = await addTab(URL);
const target = TargetFactory.forTab(tab);

Просмотреть файл

@ -11,6 +11,12 @@
var URL = `${URL_ROOT}doc_viewsource.html`;
var JS_URL = `${URL_ROOT}code_math.js`;
// Force the old debugger UI since it's directly used (see Bug 1301705)
Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", false);
registerCleanupFunction(function() {
Services.prefs.clearUserPref("devtools.debugger.new-debugger-frontend");
});
async function viewSource() {
const toolbox = await openNewTabAndToolbox(URL);
@ -20,7 +26,14 @@ async function viewSource() {
ok(debuggerPanel, "The debugger panel was opened.");
is(toolbox.currentToolId, "jsdebugger", "The debugger panel was selected.");
assertSelectedLocationInDebugger(debuggerPanel, 2, undefined);
const { DebuggerView } = debuggerPanel.panelWin;
const Sources = DebuggerView.Sources;
is(Sources.selectedValue, getSourceActor(Sources, JS_URL),
"The correct source is shown in the debugger.");
is(DebuggerView.editor.getCursor().line + 1, 2,
"The correct line is highlighted in the debugger's source editor.");
await closeToolboxAndTab(toolbox);
finish();
}

Просмотреть файл

@ -10,9 +10,26 @@
var URL = `${URL_ROOT}doc_viewsource.html`;
var JS_URL = `${URL_ROOT}code_math.js`;
// Force the old debugger UI since it's directly used (see Bug 1301705)
Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", false);
registerCleanupFunction(function() {
Services.prefs.clearUserPref("devtools.debugger.new-debugger-frontend");
});
async function viewSource() {
const toolbox = await openNewTabAndToolbox(URL);
await toolbox.selectTool("jsdebugger");
const { panelWin: debuggerWin } = await toolbox.selectTool("jsdebugger");
const debuggerEvents = debuggerWin.EVENTS;
const { DebuggerView } = debuggerWin;
const Sources = DebuggerView.Sources;
await debuggerWin.once(debuggerEvents.SOURCE_SHOWN);
ok("A source was shown in the debugger.");
is(Sources.selectedValue, getSourceActor(Sources, JS_URL),
"The correct source is initially shown in the debugger.");
is(DebuggerView.editor.getCursor().line, 0,
"The correct line is initially highlighted in the debugger's source editor.");
await toolbox.viewSourceInDebugger(JS_URL, 2);
@ -20,7 +37,10 @@ async function viewSource() {
ok(debuggerPanel, "The debugger panel was opened.");
is(toolbox.currentToolId, "jsdebugger", "The debugger panel was selected.");
assertSelectedLocationInDebugger(debuggerPanel, 2, undefined);
is(Sources.selectedValue, getSourceActor(Sources, JS_URL),
"The correct source is shown in the debugger.");
is(DebuggerView.editor.getCursor().line + 1, 2,
"The correct line is highlighted in the debugger's source editor.");
await closeToolboxAndTab(toolbox);
finish();

Просмотреть файл

@ -371,11 +371,3 @@ async function resizeWindow(toolbox, width, height) {
hostWindow.resizeTo(toWidth, toHeight);
await onResize;
}
function assertSelectedLocationInDebugger(debuggerPanel, line, column) {
const location = debuggerPanel._selectors.getSelectedLocation(
debuggerPanel._getState()
);
is(location.line, line);
is(location.column, column);
}

Просмотреть файл

@ -368,6 +368,11 @@ OptionsPanel.prototype = {
// Labels for these new buttons are nightly only and mostly intended for working on
// devtools.
const prefDefinitions = [{
pref: "devtools.debugger.new-debugger-frontend",
label: L10N.getStr("toolbox.options.enableNewDebugger.label"),
id: "devtools-new-debugger",
parentId: "debugger-options"
}, {
pref: "devtools.performance.new-panel-enabled",
label: "Enable new performance recorder (then re-open DevTools)",
id: "devtools-new-performance",

Просмотреть файл

@ -108,6 +108,7 @@ function setPrefDefaults() {
Services.prefs.setBoolPref("devtools.command-button-noautohide.enabled", true);
// Bug 1225160 - Using source maps with browser debugging can lead to a crash
Services.prefs.setBoolPref("devtools.debugger.source-maps-enabled", false);
Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", true);
Services.prefs.setBoolPref("devtools.preference.new-panel-enabled", false);
Services.prefs.setBoolPref("layout.css.emulate-moz-box-with-flex", false);

Просмотреть файл

@ -70,7 +70,6 @@ support-files =
lib_react_with_addons_15.4.1.js
react_external_listeners.js
!/devtools/client/debugger/new/test/mochitest/helpers.js
!/devtools/client/debugger/new/test/mochitest/helpers/context.js
!/devtools/client/inspector/test/head.js
!/devtools/client/inspector/test/shared-head.js
!/devtools/client/shared/test/shared-head.js

Просмотреть файл

@ -15,11 +15,6 @@ Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/debugger/new/test/mochitest/helpers.js",
this);
/* import-globals-from ../../../debugger/new/test/mochitest/helpers/context.js */
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/debugger/new/test/mochitest/helpers/context.js",
this);
const TEST_URL = `data:text/html;charset=utf-8,` + encodeURIComponent(`
<test-component></test-component>
<other-component>some-content</other-component>

Просмотреть файл

@ -6,6 +6,7 @@
var Services = require("Services");
var { gDevTools } = require("devtools/client/framework/devtools");
var { getSourceText } = require("devtools/client/debugger/content/queries");
/**
* Tries to open a Stylesheet file in the Style Editor. If the file is not
@ -50,14 +51,73 @@ exports.viewSourceInStyleEditor = async function(toolbox, sourceURL,
*/
exports.viewSourceInDebugger = async function(toolbox, sourceURL, sourceLine,
reason = "unknown") {
// If the Debugger was already open, switch to it and try to show the
// source immediately. Otherwise, initialize it and wait for the sources
// to be added first.
const debuggerAlreadyOpen = toolbox.getPanel("jsdebugger");
const dbg = await toolbox.loadTool("jsdebugger");
const source = dbg.getSource(sourceURL);
if (source) {
// New debugger frontend
if (Services.prefs.getBoolPref("devtools.debugger.new-debugger-frontend")) {
const source = dbg.getSource(sourceURL);
if (source) {
await toolbox.selectTool("jsdebugger", reason);
dbg.selectSource(sourceURL, sourceLine);
return true;
}
exports.viewSource(toolbox, sourceURL, sourceLine);
return false;
}
const win = dbg.panelWin;
// Old debugger frontend
if (!debuggerAlreadyOpen) {
await win.DebuggerController.waitForSourcesLoaded();
}
const { DebuggerView } = win;
const { Sources } = DebuggerView;
const item = Sources.getItemForAttachment(a => a.source.url === sourceURL);
if (item) {
await toolbox.selectTool("jsdebugger", reason);
dbg.selectSource(sourceURL, sourceLine);
// Determine if the source has already finished loading. There's two cases
// in which we need to wait for the source to be shown:
// 1) The requested source is not yet selected and will be shown once it is
// selected and loaded
// 2) The requested source is selected BUT the source text is still loading.
const { actor } = item.attachment.source;
const state = win.DebuggerController.getState();
// (1) Is the source selected?
const selected = state.sources.selectedSource;
const isSelected = selected === actor;
// (2) Has the source text finished loading?
let isLoading = false;
// Only check if the source is loading when the source is already selected.
// If the source is not selected, we will select it below and the already
// pending load will be cancelled and this check is useless.
if (isSelected) {
const sourceTextInfo = getSourceText(state, selected);
isLoading = sourceTextInfo && sourceTextInfo.loading;
}
// Select the requested source
DebuggerView.setEditorLocation(actor, sourceLine, { noDebug: true });
// Wait for it to load
if (!isSelected || isLoading) {
await win.DebuggerController.waitForSourceShown(sourceURL);
}
return true;
}
// If not found, still attempt to open in View Source
exports.viewSource(toolbox, sourceURL, sourceLine);
return false;
};

Просмотреть файл

@ -156,8 +156,6 @@ support-files =
!/devtools/client/netmonitor/test/sjs_cors-test-server.sjs
!/image/test/mochitest/blue.png
!/devtools/client/shared/test/shared-head.js
!/devtools/client/debugger/new/test/mochitest/helpers.js
!/devtools/client/debugger/new/test/mochitest/helpers/context.js
!/devtools/client/shared/test/telemetry-test-helpers.js
!/devtools/client/shared/test/test-actor.js
!/devtools/client/shared/test/test-actor-registry.js
@ -253,6 +251,7 @@ tags = mcb
[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
[browser_webconsole_console_api_iframe.js]
[browser_webconsole_console_dir.js]

Просмотреть файл

@ -8,12 +8,6 @@
"use strict";
// Import helpers for the new debugger
/* import-globals-from ../../../debugger/new/test/mochitest/helpers.js */
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/debugger/new/test/mochitest/helpers.js",
this);
const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
"test/mochitest/test-autocomplete-in-stackframe.html";
@ -27,6 +21,9 @@ add_task(async function() {
});
async function performTests() {
// Force the old debugger UI since it's directly used (see Bug 1301705)
await pushPref("devtools.debugger.new-debugger-frontend", false);
const { jsterm } = await openNewTabAndConsole(TEST_URI);
const {
autocompletePopup: popup,
@ -63,12 +60,10 @@ async function performTests() {
`"foo1Obj.prop2." gave the expected suggestions`);
info("Opening Debugger");
await openDebugger();
const dbg = createDebuggerContext(toolbox);
const {panel} = await openDebugger();
info("Waiting for pause");
await pauseDebugger(dbg);
const stackFrames = dbg.selectors.getCallStackFrames(dbg.getState());
const stackFrames = await pauseDebugger(panel);
info("Opening Console again");
await toolbox.selectTool("webconsole");
@ -82,7 +77,7 @@ async function performTests() {
await openDebugger();
// Select the frame for the `firstCall` function.
await dbg.actions.selectFrame(stackFrames[1]);
stackFrames.selectFrame(1);
info("openConsole");
await toolbox.selectTool("webconsole");
@ -114,10 +109,18 @@ function getPopupLabels(popup) {
return popup.getItems().map(item => item.label);
}
async function pauseDebugger(dbg) {
info("Waiting for debugger to pause");
ContentTask.spawn(gBrowser.selectedBrowser, {}, async function() {
content.wrappedJSObject.firstCall();
function pauseDebugger(debuggerPanel) {
const debuggerWin = debuggerPanel.panelWin;
const debuggerController = debuggerWin.DebuggerController;
const thread = debuggerController.activeThread;
return new Promise(resolve => {
thread.addOneTimeListener("framesadded", () =>
resolve(debuggerController.StackFrames));
info("firstCall()");
ContentTask.spawn(gBrowser.selectedBrowser, {}, function() {
content.wrappedJSObject.firstCall();
});
});
await waitForPaused(dbg);
}

Просмотреть файл

@ -7,27 +7,19 @@
"use strict";
// Import helpers for the new debugger
/* import-globals-from ../../../debugger/new/test/mochitest/helpers.js */
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/debugger/new/test/mochitest/helpers.js",
this);
requestLongerTimeout(5);
const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
"test/mochitest/" +
"test-click-function-to-source.html";
const TEST_SCRIPT_URI = "http://example.com/browser/devtools/client/webconsole/" +
"test/mochitest/" +
"test-click-function-to-source.js";
// Force the old debugger UI since it's directly used (see Bug 1301705)
pushPref("devtools.debugger.new-debugger-frontend", false);
add_task(async function() {
const hud = await openNewTabAndConsole(TEST_URI);
info("Open the Debugger panel.");
await openDebugger();
const {panel} = await openDebugger();
const panelWin = panel.panelWin;
info("And right after come back to the Console panel.");
await openConsole();
@ -42,13 +34,13 @@ add_task(async function() {
ok(jumpIcon, "A jump to definition button is rendered, as expected");
info("Click on the jump to definition button.");
const onEditorLocationSet = panelWin.once(panelWin.EVENTS.EDITOR_LOCATION_SET);
jumpIcon.click();
await onEditorLocationSet;
const toolbox = gDevTools.getToolbox(hud.target);
const dbg = createDebuggerContext(toolbox);
await waitForSelectedSource(dbg, TEST_SCRIPT_URI);
const pendingLocation = dbg.selectors.getPendingSelectedLocation(dbg.getState());
const {line} = pendingLocation;
is(line, 9, "Debugger is open at the expected line");
const {editor} = panelWin.DebuggerView;
const {line, ch} = editor.getCursor();
// Source editor starts counting line and column numbers from 0.
is(line, 8, "Debugger is open at the expected line");
is(ch, 0, "Debugger is open at the expected character");
});

Просмотреть файл

@ -0,0 +1,104 @@
/* -*- 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/ */
// XXX Remove this when the file is migrated to the new frontend.
/* eslint-disable no-undef */
// Check that inspecting a closure in the variables view sidebar works when
// execution is paused.
"use strict";
const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
"test/mochitest/test-closures.html";
var gWebConsole, gJSTerm, gVariablesView;
// Force the old debugger UI since it's directly used (see Bug 1301705)
Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", false);
registerCleanupFunction(function() {
Services.prefs.clearUserPref("devtools.debugger.new-debugger-frontend");
});
function test() {
registerCleanupFunction(() => {
gWebConsole = gJSTerm = gVariablesView = null;
});
function fetchScopes(hud, toolbox, panelWin, deferred) {
panelWin.once(panelWin.EVENTS.FETCHED_SCOPES, () => {
ok(true, "Scopes were fetched");
toolbox.selectTool("webconsole").then(() => consoleOpened(hud));
deferred.resolve();
});
}
loadTab(TEST_URI).then(() => {
openConsole().then((hud) => {
openDebugger().then(({ toolbox, panelWin }) => {
const deferred = defer();
fetchScopes(hud, toolbox, panelWin, deferred);
// eslint-disable-next-line
ContentTask.spawn(gBrowser.selectedBrowser, {}, () => {
const button = content.document.querySelector("button");
ok(button, "button element found");
button.click();
});
return deferred.promise;
});
});
});
}
function consoleOpened(hud) {
gWebConsole = hud;
gJSTerm = hud.jsterm;
gJSTerm.execute("window.george.getName");
waitForMessages({
webconsole: gWebConsole,
messages: [{
text: "getName()",
category: CATEGORY_OUTPUT,
objects: true,
}],
}).then(onExecuteGetName);
}
function onExecuteGetName(results) {
const clickable = results[0].clickableElements[0];
ok(clickable, "clickable object found");
gJSTerm.once("variablesview-fetched", onGetNameFetch);
const contextMenu =
gWebConsole.iframeWindow.document.getElementById("output-contextmenu");
waitForContextMenu(contextMenu, clickable, () => {
const openInVarView = contextMenu.querySelector("#menu_openInVarView");
ok(openInVarView.disabled === false,
"the \"Open In Variables View\" context menu item should be clickable");
// EventUtils.synthesizeMouseAtCenter seems to fail here in Mac OSX
openInVarView.click();
});
}
function onGetNameFetch(view) {
gVariablesView = view._variablesView;
ok(gVariablesView, "variables view object");
findVariableViewProperties(view, [
{ name: /_pfactory/, value: "" },
], { webconsole: gWebConsole }).then(onExpandClosure);
}
function onExpandClosure(results) {
const prop = results[0].matchedProp;
ok(prop, "matched the name property in the variables view");
gVariablesView.window.focus();
gJSTerm.once("sidebar-closed", finishTest);
EventUtils.synthesizeKey("VK_ESCAPE", {}, gVariablesView.window);
}

Просмотреть файл

@ -8,16 +8,13 @@
"use strict";
// Import helpers for the new debugger
/* import-globals-from ../../../debugger/new/test/mochitest/helpers.js */
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/debugger/new/test/mochitest/helpers.js",
this);
const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
"test/mochitest/test-eval-in-stackframe.html";
add_task(async function() {
// Force the old debugger UI since it's directly used (see Bug 1301705).
await pushPref("devtools.debugger.new-debugger-frontend", false);
info("open the console");
const hud = await openNewTabAndConsole(TEST_URI);
const {jsterm} = hud;
@ -35,9 +32,8 @@ add_task(async function() {
ok(true, "'newFoo' is displayed after adding `foo2`");
info("Open the debugger and then select the console again");
await openDebugger();
const toolbox = gDevTools.getToolbox(hud.target);
const dbg = createDebuggerContext(toolbox);
const {panel} = await openDebugger();
const {activeThread, StackFrames: stackFrames} = panel.panelWin.DebuggerController;
await openConsole();
@ -48,9 +44,13 @@ add_task(async function() {
info("Select the debugger again");
await openDebugger();
await pauseDebugger(dbg);
const stackFrames = dbg.selectors.getCallStackFrames(dbg.getState());
const onFirstCallFramesAdded = activeThread.addOneTimeListener("framesadded");
// firstCall calls secondCall, which has a debugger statement, so we'll be paused.
ContentTask.spawn(gBrowser.selectedBrowser, {}, function() {
content.wrappedJSObject.firstCall();
});
await onFirstCallFramesAdded;
info("frames added, select the console again");
await openConsole();
@ -62,9 +62,7 @@ add_task(async function() {
info("select the debugger and select the frame (1)");
await openDebugger();
await dbg.actions.selectFrame(stackFrames[1]);
stackFrames.selectFrame(1);
await openConsole();
info("Check `foo + foo2 + foo3` value when paused on a given frame");
@ -84,11 +82,3 @@ add_task(async function() {
ok(!content.wrappedJSObject.foo3, "`foo3` was not added to the content window");
});
});
async function pauseDebugger(dbg) {
info("Waiting for debugger to pause");
ContentTask.spawn(gBrowser.selectedBrowser, {}, async function() {
content.wrappedJSObject.firstCall();
});
await waitForPaused(dbg);
}

Просмотреть файл

@ -9,26 +9,22 @@
"use strict";
// Import helpers for the new debugger
/* import-globals-from ../../../debugger/new/test/mochitest/helpers.js */
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/debugger/new/test/mochitest/helpers.js",
this);
const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
"test/mochitest/test-eval-in-stackframe.html";
add_task(async function() {
// Force the old debugger UI since it's directly used (see Bug 1301705).
await pushPref("devtools.debugger.new-debugger-frontend", false);
info("open the console");
const hud = await openNewTabAndConsole(TEST_URI);
const {jsterm} = hud;
info("open the debugger");
await openDebugger();
const toolbox = gDevTools.getToolbox(hud.target);
const dbg = createDebuggerContext(toolbox);
const {panel} = await openDebugger();
const {activeThread} = panel.panelWin.DebuggerController;
const onFirstCallFramesAdded = activeThread.addOneTimeListener("framesadded");
// firstCall calls secondCall, which has a debugger statement, so we'll be paused.
const onFirstCallMessageReceived = waitForMessage(hud, "undefined");
@ -40,7 +36,7 @@ add_task(async function() {
jsterm.execute("firstCall()");
info("Waiting for a frame to be added");
await waitForPaused(dbg);
await onFirstCallFramesAdded;
info("frames added, select the console again");
await openConsole();
@ -61,7 +57,7 @@ add_task(async function() {
ok(firstCallEvaluationResult === unresolvedSymbol, "firstCall was not evaluated yet");
info("Resuming the thread");
dbg.actions.resume(dbg.getState());
activeThread.resume();
message = await onFirstCallMessageReceived;
ok(firstCallEvaluationResult !== unresolvedSymbol,

Просмотреть файл

@ -19,6 +19,9 @@ const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
"test/mochitest/test-location-debugger-link.html";
add_task(async function() {
// Force the new debugger UI, in case this gets uplifted with the old
// debugger still turned on
await pushPref("devtools.debugger.new-debugger-frontend", true);
await pushPref("devtools.webconsole.filter.error", true);
await pushPref("devtools.webconsole.filter.log", true);

Просмотреть файл

@ -8,16 +8,12 @@
"use strict";
// Import helpers for the new debugger
/* import-globals-from ../../../debugger/new/test/mochitest/helpers.js */
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/debugger/new/test/mochitest/helpers.js",
this);
const TEST_URI = "https://example.com/browser/devtools/client/webconsole/" +
"test/mochitest/test-eval-in-stackframe.html";
add_task(async function() {
// Force the old debugger UI since it's directly used (see Bug 1301705)
await pushPref("devtools.debugger.new-debugger-frontend", false);
const hud = await openNewTabAndConsole(TEST_URI);
info("Switch to the debugger");
@ -28,9 +24,7 @@ add_task(async function() {
await gDevTools.showToolbox(target, "inspector");
info("Call firstCall() and wait for the debugger statement to be reached.");
const toolbox = gDevTools.getToolbox(target);
const dbg = createDebuggerContext(toolbox);
await pauseDebugger(dbg);
await waitForFrameAdded();
info("Switch back to the console");
await gDevTools.showToolbox(target, "webconsole");
@ -69,10 +63,16 @@ add_task(async function() {
ok(oiNodes[2].textContent.includes(`<prototype>: Object { \u2026 }`));
});
async function pauseDebugger(dbg) {
info("Waiting for debugger to pause");
ContentTask.spawn(gBrowser.selectedBrowser, {}, async function() {
content.wrappedJSObject.firstCall();
async function waitForFrameAdded() {
const target = TargetFactory.forTab(gBrowser.selectedTab);
const toolbox = gDevTools.getToolbox(target);
const thread = toolbox.threadClient;
info("Waiting for framesadded");
await new Promise(resolve => {
thread.addOneTimeListener("framesadded", resolve);
ContentTask.spawn(gBrowser.selectedBrowser, {}, async function() {
content.wrappedJSObject.firstCall();
});
});
await waitForPaused(dbg);
}

Просмотреть файл

@ -8,28 +8,32 @@
"use strict";
// Import helpers for the new debugger
/* import-globals-from ../../../debugger/new/test/mochitest/helpers.js */
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/debugger/new/test/mochitest/helpers.js",
this);
const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
"test/mochitest/" +
"test-closure-optimized-out.html";
add_task(async function() {
// Force the old debugger UI since it's directly used (see Bug 1301705)
await pushPref("devtools.debugger.new-debugger-frontend", false);
const hud = await openNewTabAndConsole(TEST_URI);
await openDebugger();
const { toolbox, panel: debuggerPanel } = await openDebugger();
const toolbox = gDevTools.getToolbox(hud.target);
const dbg = createDebuggerContext(toolbox);
const sources = debuggerPanel.panelWin.DebuggerView.Sources;
await debuggerPanel.addBreakpoint({ actor: sources.values[0], line: 18 });
await ensureThreadClientState(debuggerPanel, "resumed");
await addBreakpoint(dbg, "test-closure-optimized-out.html", 18);
await waitForThreadEvents(dbg, "resumed");
const { FETCHED_SCOPES } = debuggerPanel.panelWin.EVENTS;
const fetchedScopes = debuggerPanel.panelWin.once(FETCHED_SCOPES);
// Cause the debuggee to pause
await pauseDebugger(dbg);
ContentTask.spawn(gBrowser.selectedBrowser, {}, async function() {
const button = content.document.querySelector("button");
button.click();
});
await fetchedScopes;
ok(true, "Scopes were fetched");
await toolbox.selectTool("webconsole");
@ -43,11 +47,13 @@ add_task(async function() {
ok(true, "Optimized out message logged");
});
async function pauseDebugger(dbg) {
info("Waiting for debugger to pause");
ContentTask.spawn(gBrowser.selectedBrowser, {}, async function() {
const button = content.document.querySelector("button");
button.click();
});
await waitForPaused(dbg);
// Debugger helper functions adapted from devtools/client/debugger/test/head.js.
async function ensureThreadClientState(debuggerPanel, state) {
const thread = debuggerPanel.panelWin.gThreadClient;
info(`Thread is: '${thread.state}'.`);
if (thread.state != state) {
info("Waiting for thread event: '${state}'.");
await thread.addOneTimeListener(state);
}
}

Просмотреть файл

@ -25,6 +25,9 @@ const PAGE_URL = `data:text/html,
</html>`;
add_task(async function() {
// Force the new debugger UI, in case this gets uplifted with the old
// debugger still turned on
await pushPref("devtools.debugger.new-debugger-frontend", true);
await pushPref("devtools.source-map.client-service.enabled", true);
const hud = await openNewTabAndConsole(PAGE_URL);

Просмотреть файл

@ -19,8 +19,12 @@ const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
"test-stacktrace-location-debugger-link.html";
add_task(async function() {
// Force the new debugger UI, in case this gets uplifted with the old
// debugger still turned on
Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", true);
Services.prefs.setBoolPref("devtools.webconsole.filter.log", true);
registerCleanupFunction(async function() {
Services.prefs.clearUserPref("devtools.debugger.new-debugger-frontend");
Services.prefs.clearUserPref("devtools.webconsole.filter.log");
});

Просмотреть файл

@ -19,12 +19,6 @@ Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/shared/test/shared-head.js",
this);
// Import helpers for the new debugger
/* import-globals-from ../../../debugger/new/test/mochitest/helpers/context.js */
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/debugger/new/test/mochitest/helpers/context.js",
this);
var {HUDService} = require("devtools/client/webconsole/hudservice");
var WCUL10n = require("devtools/client/webconsole/webconsole-l10n");
const DOCS_GA_PARAMS = `?${new URLSearchParams({
@ -541,17 +535,9 @@ async function openDebugger(options = {}) {
const panel = toolbox.getCurrentPanel();
// Do not clear VariableView lazily so it doesn't disturb test ending.
if (panel._view) {
panel._view.Variables.lazyEmpty = false;
}
panel._view.Variables.lazyEmpty = false;
// Old debugger
if (panel.panelWin && panel.panelWin.DebuggerController) {
await panel.panelWin.DebuggerController.waitForSourcesLoaded();
} else {
// New debugger
await toolbox.threadClient.getSources();
}
await panel.panelWin.DebuggerController.waitForSourcesLoaded();
return {target, toolbox, panel};
}