tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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;