94 lines
2.3 KiB
JavaScript
94 lines
2.3 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
"use strict";
|
|
|
|
const { Task } = require("devtools/shared/task");
|
|
var { LocalizationHelper } = require("devtools/shared/l10n");
|
|
|
|
const DBG_STRINGS_URI = "devtools/client/locales/debugger.properties";
|
|
var L10N = new LocalizationHelper(DBG_STRINGS_URI);
|
|
|
|
function DebuggerPanel(iframeWindow, toolbox) {
|
|
this.panelWin = iframeWindow;
|
|
this.panelWin.L10N = L10N;
|
|
this.toolbox = toolbox;
|
|
}
|
|
|
|
DebuggerPanel.prototype = {
|
|
open: async function() {
|
|
if (!this.toolbox.target.isRemote) {
|
|
await this.toolbox.target.makeRemote();
|
|
}
|
|
|
|
const {
|
|
actions,
|
|
store,
|
|
selectors,
|
|
client
|
|
} = await this.panelWin.Debugger.bootstrap({
|
|
threadClient: this.toolbox.threadClient,
|
|
tabTarget: this.toolbox.target,
|
|
debuggerClient: this.toolbox.target._client,
|
|
sourceMaps: this.toolbox.sourceMapService
|
|
});
|
|
|
|
this._actions = actions;
|
|
this._store = store;
|
|
this._selectors = selectors;
|
|
this._client = client;
|
|
this.isReady = true;
|
|
return this;
|
|
},
|
|
|
|
getVarsForTests() {
|
|
return {
|
|
store: this._store,
|
|
selectors: this._selectors,
|
|
actions: this._actions,
|
|
client: this._client
|
|
};
|
|
},
|
|
|
|
_getState: function() {
|
|
return this._store.getState();
|
|
},
|
|
|
|
getFrames: function() {
|
|
let frames = this._selectors.getFrames(this._getState());
|
|
|
|
// Frames is null when the debugger is not paused.
|
|
if (!frames) {
|
|
return {
|
|
frames: [],
|
|
selected: -1
|
|
};
|
|
}
|
|
|
|
frames = frames.toJS();
|
|
const selectedFrame = this._selectors.getSelectedFrame(this._getState());
|
|
const selected = frames.findIndex(frame => frame.id == selectedFrame.id);
|
|
|
|
frames.forEach(frame => {
|
|
frame.actor = frame.id;
|
|
});
|
|
|
|
return { frames, selected };
|
|
},
|
|
|
|
selectSource(sourceURL, sourceLine) {
|
|
this._actions.selectSourceURL(sourceURL, { line: sourceLine });
|
|
},
|
|
|
|
getSource(sourceURL) {
|
|
return this._selectors.getSourceByURL(this._getState(), sourceURL);
|
|
},
|
|
|
|
destroy: function() {
|
|
this.panelWin.Debugger.destroy();
|
|
this.emit("destroyed");
|
|
}
|
|
};
|
|
|
|
exports.DebuggerPanel = DebuggerPanel;
|