TemporaryExtensionAdditionalActions.js (4855B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 "use strict"; 6 7 const { 8 createFactory, 9 PureComponent, 10 } = require("resource://devtools/client/shared/vendor/react.mjs"); 11 const dom = require("resource://devtools/client/shared/vendor/react-dom-factories.js"); 12 const PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.mjs"); 13 14 const FluentReact = require("resource://devtools/client/shared/vendor/fluent-react.js"); 15 const Localized = createFactory(FluentReact.Localized); 16 17 const Actions = require("resource://devtools/client/aboutdebugging/src/actions/index.js"); 18 const Types = require("resource://devtools/client/aboutdebugging/src/types/index.js"); 19 20 const DetailsLog = createFactory( 21 require("resource://devtools/client/aboutdebugging/src/components/shared/DetailsLog.js") 22 ); 23 const Message = createFactory( 24 require("resource://devtools/client/aboutdebugging/src/components/shared/Message.js") 25 ); 26 const { 27 MESSAGE_LEVEL, 28 } = require("resource://devtools/client/aboutdebugging/src/constants.js"); 29 30 /** 31 * This component provides components that reload/remove temporary extension. 32 */ 33 class TemporaryExtensionAdditionalActions extends PureComponent { 34 static get propTypes() { 35 return { 36 dispatch: PropTypes.func.isRequired, 37 target: Types.debugTarget.isRequired, 38 }; 39 } 40 41 reload() { 42 const { dispatch, target } = this.props; 43 dispatch(Actions.reloadTemporaryExtension(target.id)); 44 } 45 46 terminateBackgroundScript() { 47 const { dispatch, target } = this.props; 48 dispatch(Actions.terminateExtensionBackgroundScript(target.id)); 49 } 50 51 remove() { 52 const { dispatch, target } = this.props; 53 dispatch(Actions.removeTemporaryExtension(target.id)); 54 } 55 56 renderReloadError() { 57 const { reloadError } = this.props.target.details; 58 59 if (!reloadError) { 60 return null; 61 } 62 63 return Message( 64 { 65 className: "qa-temporary-extension-reload-error", 66 level: MESSAGE_LEVEL.ERROR, 67 key: "reload-error", 68 }, 69 DetailsLog( 70 { 71 type: MESSAGE_LEVEL.ERROR, 72 }, 73 dom.p( 74 { 75 className: "technical-text", 76 }, 77 reloadError 78 ) 79 ) 80 ); 81 } 82 83 renderTerminateBackgroundScriptError() { 84 const { lastTerminateBackgroundScriptError } = this.props.target.details; 85 86 if (!lastTerminateBackgroundScriptError) { 87 return null; 88 } 89 90 return Message( 91 { 92 className: "qa-temporary-extension-terminate-backgroundscript-error", 93 level: MESSAGE_LEVEL.ERROR, 94 key: "terminate-backgroundscript-error", 95 }, 96 DetailsLog( 97 { 98 type: MESSAGE_LEVEL.ERROR, 99 }, 100 dom.p( 101 { 102 className: "technical-text", 103 }, 104 lastTerminateBackgroundScriptError 105 ) 106 ) 107 ); 108 } 109 110 renderTerminateBackgroundScriptButton() { 111 const { persistentBackgroundScript } = this.props.target.details; 112 113 // For extensions with a non persistent background script 114 // also include a "terminate background script" action. 115 if (persistentBackgroundScript !== false) { 116 return null; 117 } 118 119 return Localized( 120 { 121 id: "about-debugging-tmp-extension-terminate-bgscript-button", 122 }, 123 dom.button( 124 { 125 className: 126 "default-button default-button--micro " + 127 "qa-temporary-extension-terminate-bgscript-button", 128 onClick: () => this.terminateBackgroundScript(), 129 }, 130 "Terminate Background Script" 131 ) 132 ); 133 } 134 135 renderRemoveButton() { 136 return Localized( 137 { 138 id: "about-debugging-tmp-extension-remove-button", 139 }, 140 dom.button( 141 { 142 className: 143 "default-button default-button--micro " + 144 "qa-temporary-extension-remove-button", 145 onClick: () => this.remove(), 146 }, 147 "Remove" 148 ) 149 ); 150 } 151 152 render() { 153 return [ 154 dom.div( 155 { 156 className: "toolbar toolbar--right-align", 157 key: "actions", 158 }, 159 this.renderTerminateBackgroundScriptButton(), 160 Localized( 161 { 162 id: "about-debugging-tmp-extension-reload-button", 163 }, 164 dom.button( 165 { 166 className: 167 "default-button default-button--micro " + 168 "qa-temporary-extension-reload-button", 169 onClick: () => this.reload(), 170 }, 171 "Reload" 172 ) 173 ), 174 this.renderRemoveButton() 175 ), 176 this.renderReloadError(), 177 this.renderTerminateBackgroundScriptError(), 178 ]; 179 } 180 } 181 182 module.exports = TemporaryExtensionAdditionalActions;