RequestListColumnUrl.js (3192B)
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 createFactory, 10 } = require("resource://devtools/client/shared/vendor/react.mjs"); 11 const { 12 connect, 13 } = require("resource://devtools/client/shared/vendor/react-redux.js"); 14 const { 15 td, 16 } = require("resource://devtools/client/shared/vendor/react-dom-factories.js"); 17 const PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.mjs"); 18 const { 19 getFormattedIPAndPort, 20 } = require("resource://devtools/client/netmonitor/src/utils/format-utils.js"); 21 const { 22 getUrlToolTip, 23 propertiesEqual, 24 } = require("resource://devtools/client/netmonitor/src/utils/request-utils.js"); 25 const SecurityState = createFactory( 26 require("resource://devtools/client/netmonitor/src/components/SecurityState.js") 27 ); 28 const { 29 getOverriddenUrl, 30 } = require("resource://devtools/client/netmonitor/src/selectors/index.js"); 31 const { truncateString } = require("resource://devtools/shared/string.js"); 32 const { 33 MAX_UI_STRING_LENGTH, 34 } = require("resource://devtools/client/netmonitor/src/constants.js"); 35 36 const UPDATED_FILE_PROPS = ["remoteAddress", "securityState", "urlDetails"]; 37 38 class RequestListColumnUrl extends Component { 39 static get propTypes() { 40 return { 41 isOverridden: PropTypes.bool.isRequired, 42 item: PropTypes.object.isRequired, 43 onSecurityIconMouseDown: PropTypes.func.isRequired, 44 overriddenUrl: PropTypes.string, 45 }; 46 } 47 48 shouldComponentUpdate(nextProps) { 49 return ( 50 !propertiesEqual(UPDATED_FILE_PROPS, this.props.item, nextProps.item) || 51 nextProps.overriddenUrl !== this.props.overriddenUrl 52 ); 53 } 54 55 render() { 56 const { 57 isOverridden, 58 item: { urlDetails }, 59 overriddenUrl, 60 } = this.props; 61 62 const { item, onSecurityIconMouseDown } = this.props; 63 64 const { 65 remoteAddress, 66 remotePort, 67 urlDetails: { isLocal }, 68 } = item; 69 70 // deals with returning whole url 71 const originalURL = urlDetails.url; 72 const urlToolTip = getUrlToolTip(urlDetails); 73 74 // Build extra content for the title if this is a remote address. 75 const remoteAddressTitle = remoteAddress 76 ? ` (${getFormattedIPAndPort(remoteAddress, remotePort)})` 77 : ""; 78 79 // Build extra content for the title if the request is overridden. 80 const overrideTitle = isOverridden ? ` → ${overriddenUrl}` : ""; 81 82 return td( 83 { 84 className: "requests-list-column requests-list-url", 85 title: 86 truncateString(urlToolTip, MAX_UI_STRING_LENGTH) + 87 remoteAddressTitle + 88 overrideTitle, 89 }, 90 SecurityState({ item, onSecurityIconMouseDown, isLocal }), 91 truncateString(originalURL, MAX_UI_STRING_LENGTH) 92 ); 93 } 94 } 95 96 module.exports = connect( 97 (state, props) => { 98 const overriddenUrl = getOverriddenUrl(state, props.item.urlDetails.url); 99 return { 100 isOverridden: !!overriddenUrl, 101 overriddenUrl, 102 }; 103 }, 104 {}, 105 undefined, 106 { storeKey: "toolbox-store" } 107 )(RequestListColumnUrl);