diff options
Diffstat (limited to 'devtools/client/aboutdebugging/components/addons/controls.js')
-rw-r--r-- | devtools/client/aboutdebugging/components/addons/controls.js | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/devtools/client/aboutdebugging/components/addons/controls.js b/devtools/client/aboutdebugging/components/addons/controls.js new file mode 100644 index 000000000..7f985528c --- /dev/null +++ b/devtools/client/aboutdebugging/components/addons/controls.js @@ -0,0 +1,97 @@ +/* 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/. */ + +/* eslint-env browser */ +/* globals AddonManager */ + +"use strict"; + +loader.lazyImporter(this, "AddonManager", + "resource://gre/modules/AddonManager.jsm"); + +const { Cc, Ci } = require("chrome"); +const { createFactory, createClass, DOM: dom, PropTypes } = + require("devtools/client/shared/vendor/react"); +const Services = require("Services"); +const AddonsInstallError = createFactory(require("./install-error")); + +const Strings = Services.strings.createBundle( + "chrome://devtools/locale/aboutdebugging.properties"); + +const MORE_INFO_URL = "https://developer.mozilla.org/docs/Tools" + + "/about:debugging#Enabling_add-on_debugging"; + +module.exports = createClass({ + displayName: "AddonsControls", + + propTypes: { + debugDisabled: PropTypes.bool + }, + + getInitialState() { + return { + installError: null, + }; + }, + + onEnableAddonDebuggingChange(event) { + let enabled = event.target.checked; + Services.prefs.setBoolPref("devtools.chrome.enabled", enabled); + Services.prefs.setBoolPref("devtools.debugger.remote-enabled", enabled); + }, + + loadAddonFromFile() { + this.setState({ installError: null }); + let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker); + fp.init(window, + Strings.GetStringFromName("selectAddonFromFile2"), + Ci.nsIFilePicker.modeOpen); + let res = fp.show(); + if (res == Ci.nsIFilePicker.returnCancel || !fp.file) { + return; + } + let file = fp.file; + // AddonManager.installTemporaryAddon accepts either + // addon directory or final xpi file. + if (!file.isDirectory() && !file.leafName.endsWith(".xpi")) { + file = file.parent; + } + + AddonManager.installTemporaryAddon(file) + .catch(e => { + console.error(e); + this.setState({ installError: e.message }); + }); + }, + + render() { + let { debugDisabled } = this.props; + + return dom.div({ className: "addons-top" }, + dom.div({ className: "addons-controls" }, + dom.div({ className: "addons-options toggle-container-with-text" }, + dom.input({ + id: "enable-addon-debugging", + type: "checkbox", + checked: !debugDisabled, + onChange: this.onEnableAddonDebuggingChange, + }), + dom.label({ + className: "addons-debugging-label", + htmlFor: "enable-addon-debugging", + title: Strings.GetStringFromName("addonDebugging.tooltip") + }, Strings.GetStringFromName("addonDebugging.label")), + "(", + dom.a({ href: MORE_INFO_URL, target: "_blank" }, + Strings.GetStringFromName("moreInfo")), + ")" + ), + dom.button({ + id: "load-addon-from-file", + onClick: this.loadAddonFromFile, + }, Strings.GetStringFromName("loadTemporaryAddon")) + ), + AddonsInstallError({ error: this.state.installError })); + } +}); |