tor-browser

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

RequestListColumnFile.js (3138B)


      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 dom = require("resource://devtools/client/shared/vendor/react-dom-factories.js");
     11 const {
     12  L10N,
     13 } = require("resource://devtools/client/netmonitor/src/utils/l10n.js");
     14 const PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.mjs");
     15 const {
     16  connect,
     17 } = require("resource://devtools/client/shared/vendor/react-redux.js");
     18 const {
     19  getUrlToolTip,
     20  propertiesEqual,
     21 } = require("resource://devtools/client/netmonitor/src/utils/request-utils.js");
     22 const {
     23  getFormattedTime,
     24 } = require("resource://devtools/client/netmonitor/src/utils/format-utils.js");
     25 const { truncateString } = require("resource://devtools/shared/string.js");
     26 const {
     27  MAX_UI_STRING_LENGTH,
     28 } = require("resource://devtools/client/netmonitor/src/constants.js");
     29 const {
     30  getOverriddenUrl,
     31 } = require("resource://devtools/client/netmonitor/src/selectors/index.js");
     32 
     33 const UPDATED_FILE_PROPS = ["urlDetails", "waitingTime"];
     34 
     35 class RequestListColumnFile extends Component {
     36  static get propTypes() {
     37    return {
     38      item: PropTypes.object.isRequired,
     39      slowLimit: PropTypes.number,
     40      onWaterfallMouseDown: PropTypes.func,
     41      isOverridden: PropTypes.bool.isRequired,
     42      overriddenUrl: PropTypes.string,
     43    };
     44  }
     45 
     46  shouldComponentUpdate(nextProps) {
     47    return (
     48      !propertiesEqual(UPDATED_FILE_PROPS, this.props.item, nextProps.item) ||
     49      nextProps.overriddenUrl !== this.props.overriddenUrl
     50    );
     51  }
     52 
     53  render() {
     54    const {
     55      item: { urlDetails, waitingTime },
     56      isOverridden,
     57      slowLimit,
     58      onWaterfallMouseDown,
     59      overriddenUrl,
     60    } = this.props;
     61 
     62    const requestedFile = urlDetails.baseNameWithQuery;
     63    const fileToolTip = getUrlToolTip(urlDetails);
     64 
     65    const isSlow = slowLimit > 0 && !!waitingTime && waitingTime > slowLimit;
     66 
     67    // Build extra content for the title if the request is overridden.
     68    const overrideTitle = isOverridden ? ` → ${overriddenUrl}` : "";
     69 
     70    return dom.td(
     71      {
     72        className: "requests-list-column requests-list-file",
     73        title:
     74          truncateString(fileToolTip, MAX_UI_STRING_LENGTH) + overrideTitle,
     75      },
     76      dom.div({}, truncateString(requestedFile, MAX_UI_STRING_LENGTH)),
     77      isSlow &&
     78        dom.div({
     79          title: L10N.getFormatStr(
     80            "netmonitor.audits.slowIconTooltip",
     81            getFormattedTime(waitingTime),
     82            getFormattedTime(slowLimit)
     83          ),
     84          onMouseDown: onWaterfallMouseDown,
     85          className: "requests-list-slow-button",
     86        })
     87    );
     88  }
     89 }
     90 
     91 module.exports = connect(
     92  (state, props) => {
     93    const overriddenUrl = getOverriddenUrl(state, props.item.urlDetails?.url);
     94    return {
     95      isOverridden: !!overriddenUrl,
     96      overriddenUrl,
     97    };
     98  },
     99  {},
    100  undefined,
    101  { storeKey: "toolbox-store" }
    102 )(RequestListColumnFile);