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;