Bug 1411565 - Use BrowserContentProcess for local and remote addon debugging
MozReview-Commit-ID: 1xrTeTURBA9
--- a/devtools/client/aboutdebugging/components/addons/Panel.js
+++ b/devtools/client/aboutdebugging/components/addons/Panel.js
@@ -88,18 +88,16 @@ class AddonsPanel extends Component {
updateAddonsList() {
this.props.client.listAddons()
.then(({addons}) => {
let extensions = addons.filter(addon => addon.debuggable).map(addon => {
return {
addonActor: addon.actor,
addonID: addon.id,
- // Forward the whole addon actor form for potential remote debugging.
- form: addon,
icon: addon.iconURL || ExtensionIcon,
manifestURL: addon.manifestURL,
name: addon.name,
temporarilyInstalled: addon.temporarilyInstalled,
url: addon.url,
warnings: addon.warnings,
};
});
--- a/devtools/client/aboutdebugging/components/addons/Target.js
+++ b/devtools/client/aboutdebugging/components/addons/Target.js
@@ -4,17 +4,17 @@
/* eslint-env browser */
"use strict";
const { Component } = require("devtools/client/shared/vendor/react");
const PropTypes = require("devtools/client/shared/vendor/react-prop-types");
const dom = require("devtools/client/shared/vendor/react-dom-factories");
-const { debugLocalAddon, debugRemoteAddon, isTemporaryID, parseFileUri, uninstallAddon } =
+const { debugAddon, isTemporaryID, parseFileUri, uninstallAddon } =
require("../../modules/addon");
const Services = require("Services");
loader.lazyImporter(this, "BrowserToolboxProcess",
"resource://devtools/client/framework/ToolboxProcess.jsm");
loader.lazyRequireGetter(this, "DebuggerClient",
"devtools/shared/client/debugger-client", true);
@@ -127,17 +127,16 @@ class AddonTarget extends Component {
static get propTypes() {
return {
client: PropTypes.instanceOf(DebuggerClient).isRequired,
connect: PropTypes.object,
debugDisabled: PropTypes.bool,
target: PropTypes.shape({
addonActor: PropTypes.string.isRequired,
addonID: PropTypes.string.isRequired,
- form: PropTypes.object.isRequired,
icon: PropTypes.string,
name: PropTypes.string.isRequired,
temporarilyInstalled: PropTypes.bool,
url: PropTypes.string,
warnings: PropTypes.array,
}).isRequired
};
}
@@ -145,23 +144,18 @@ class AddonTarget extends Component {
constructor(props) {
super(props);
this.debug = this.debug.bind(this);
this.uninstall = this.uninstall.bind(this);
this.reload = this.reload.bind(this);
}
debug() {
- let { client, connect, target } = this.props;
-
- if (connect.type === "REMOTE") {
- debugRemoteAddon(target.form, client);
- } else if (connect.type === "LOCAL") {
- debugLocalAddon(target.addonID);
- }
+ let { connect, target } = this.props;
+ debugAddon(target.addonID, connect.params);
}
uninstall() {
let { target } = this.props;
uninstallAddon(target.addonID);
}
reload() {
--- a/devtools/client/aboutdebugging/modules/addon.js
+++ b/devtools/client/aboutdebugging/modules/addon.js
@@ -4,76 +4,38 @@
"use strict";
loader.lazyImporter(this, "BrowserToolboxProcess",
"resource://devtools/client/framework/ToolboxProcess.jsm");
loader.lazyImporter(this, "AddonManager", "resource://gre/modules/AddonManager.jsm");
loader.lazyImporter(this, "AddonManagerPrivate", "resource://gre/modules/AddonManager.jsm");
-var {TargetFactory} = require("devtools/client/framework/target");
-var {Toolbox} = require("devtools/client/framework/toolbox");
-
-var {gDevTools} = require("devtools/client/framework/devtools");
-
-let browserToolboxProcess = null;
-let remoteAddonToolbox = null;
-function closeToolbox() {
- if (browserToolboxProcess) {
- browserToolboxProcess.close();
- }
-
- if (remoteAddonToolbox) {
- remoteAddonToolbox.destroy();
- }
-}
+let toolbox = null;
/**
- * Start debugging an addon in the current instance of Firefox.
+ * Start debugging an addon.
*
* @param {String} addonID
* String id of the addon to debug.
+ * @param {Object} options
+ * Additional connection options when connected to a remote runtime.
*/
-exports.debugLocalAddon = async function (addonID) {
- // Close previous addon debugging toolbox.
- closeToolbox();
-
- browserToolboxProcess = BrowserToolboxProcess.init({
- addonID,
- onClose: () => {
- browserToolboxProcess = null;
- }
- });
-};
+exports.debugAddon = async function (addonID, {host, port} = {}) {
+ if (toolbox) {
+ toolbox.close();
+ }
-/**
- * Start debugging an addon in a remote instance of Firefox.
- *
- * @param {Object} addonForm
- * Necessary to create an addon debugging target.
- * @param {DebuggerClient} client
- * Required for remote debugging.
- */
-exports.debugRemoteAddon = async function (addonForm, client) {
- // Close previous addon debugging toolbox.
- closeToolbox();
-
- let options = {
- form: addonForm,
- chrome: true,
- client,
- isTabActor: addonForm.isWebExtension
- };
-
- let target = await TargetFactory.forRemoteTab(options);
-
- let hostType = Toolbox.HostType.WINDOW;
- remoteAddonToolbox = await gDevTools.showToolbox(target, "webconsole", hostType);
- remoteAddonToolbox.once("destroy", () => {
- remoteAddonToolbox = null;
+ toolbox = BrowserToolboxProcess.init({
+ addonID,
+ host,
+ port,
+ onClose: () => {
+ toolbox = null;
+ }
});
};
exports.uninstallAddon = async function (addonID) {
let addon = await AddonManager.getAddonByID(addonID);
return addon && addon.uninstall();
};