tor-browser

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

SecurityState.js (2330B)


      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  Component,
      9 } = require("resource://devtools/client/shared/vendor/react.mjs");
     10 const {
     11  div,
     12 } = require("resource://devtools/client/shared/vendor/react-dom-factories.js");
     13 const PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.mjs");
     14 const {
     15  L10N,
     16 } = require("resource://devtools/client/netmonitor/src/utils/l10n.js");
     17 const {
     18  propertiesEqual,
     19 } = require("resource://devtools/client/netmonitor/src/utils/request-utils.js");
     20 
     21 const UPDATED_DOMAIN_PROPS = ["remoteAddress", "securityState", "urlDetails"];
     22 
     23 class SecurityState extends Component {
     24  static get propTypes() {
     25    return {
     26      item: PropTypes.object.isRequired,
     27      onSecurityIconMouseDown: PropTypes.func.isRequired,
     28    };
     29  }
     30 
     31  shouldComponentUpdate(nextProps) {
     32    return !propertiesEqual(
     33      UPDATED_DOMAIN_PROPS,
     34      this.props.item,
     35      nextProps.item
     36    );
     37  }
     38 
     39  render() {
     40    const { item, onSecurityIconMouseDown } = this.props;
     41 
     42    const {
     43      securityState,
     44      urlDetails: { host, isLocal },
     45    } = item;
     46    const iconClassList = ["requests-security-state-icon"];
     47 
     48    let iconTitle;
     49    let realSecurityState = securityState;
     50 
     51    // Locally delivered files such as http://localhost and file:// paths
     52    // are considered to have been delivered securely.
     53    if (
     54      isLocal ||
     55      (host?.endsWith(".onion") &&
     56        Services.prefs.getBoolPref("dom.securecontext.allowlist_onions", false))
     57    ) {
     58      realSecurityState = "secure";
     59    }
     60 
     61    if (realSecurityState) {
     62      iconClassList.push(`security-state-${realSecurityState}`);
     63      iconTitle = L10N.getStr(`netmonitor.security.state.${realSecurityState}`);
     64    }
     65 
     66    return div(
     67      { className: "requests-security-icon-group" },
     68      div({
     69        className: iconClassList.join(" "),
     70        onMouseDown: onSecurityIconMouseDown,
     71        title: iconTitle,
     72      }),
     73      item.isThirdPartyTrackingResource &&
     74        div({
     75          className: "tracking-resource",
     76          title: L10N.getStr("netmonitor.trackingResource.tooltip"),
     77        })
     78    );
     79  }
     80 }
     81 
     82 module.exports = SecurityState;