tor-browser

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

ExpressionResultView.js (3341B)


      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 PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.mjs");
     12 
     13 const Accordion = createFactory(
     14  require("resource://devtools/client/shared/components/Accordion.js")
     15 );
     16 
     17 const Types = require("resource://devtools/client/inspector/extensions/types.js");
     18 
     19 const {
     20  REPS: { Grip },
     21  MODE,
     22 } = ChromeUtils.importESModule(
     23  "resource://devtools/client/shared/components/reps/index.mjs"
     24 );
     25 const {
     26  ObjectInspector: ObjectInspectorClass,
     27 } = require("resource://devtools/client/shared/components/object-inspector/index.js");
     28 
     29 loader.lazyRequireGetter(
     30  this,
     31  "LongStringFront",
     32  "resource://devtools/client/fronts/string.js",
     33  true
     34 );
     35 
     36 loader.lazyRequireGetter(
     37  this,
     38  "ObjectFront",
     39  "resource://devtools/client/fronts/object.js",
     40  true
     41 );
     42 
     43 const ObjectInspector = createFactory(ObjectInspectorClass);
     44 
     45 class ObjectValueGripView extends PureComponent {
     46  static get propTypes() {
     47    return {
     48      rootTitle: PropTypes.string,
     49      expressionResult: PropTypes.oneOfType([
     50        PropTypes.string,
     51        PropTypes.number,
     52        PropTypes.object,
     53      ]).isRequired,
     54      // Helpers injected as props by extension-sidebar.js.
     55      serviceContainer: PropTypes.shape(Types.serviceContainer).isRequired,
     56    };
     57  }
     58 
     59  render() {
     60    const { expressionResult, serviceContainer, rootTitle } = this.props;
     61 
     62    const isFront =
     63      expressionResult instanceof ObjectFront ||
     64      expressionResult instanceof LongStringFront;
     65    const grip = isFront ? expressionResult.getGrip() : expressionResult;
     66 
     67    const objectInspectorProps = {
     68      autoExpandDepth: 1,
     69      mode: MODE.SHORT,
     70      // TODO: we disable focus since it's not currently working well in ObjectInspector.
     71      // Let's remove the property below when problem are fixed in OI.
     72      disabledFocus: true,
     73      roots: [
     74        {
     75          path: expressionResult?.actorID || JSON.stringify(expressionResult),
     76          contents: { value: grip, front: isFront ? expressionResult : null },
     77        },
     78      ],
     79      // TODO: evaluate if there should also be a serviceContainer.openLink.
     80    };
     81 
     82    if (expressionResult?.actorID) {
     83      Object.assign(objectInspectorProps, {
     84        onDOMNodeMouseOver: serviceContainer.highlightDomElement,
     85        onDOMNodeMouseOut: serviceContainer.unHighlightDomElement,
     86        onInspectIconClick(object, e) {
     87          // Stop the event propagation so we don't trigger ObjectInspector
     88          // expand/collapse.
     89          e.stopPropagation();
     90          serviceContainer.openNodeInInspector(object);
     91        },
     92        defaultRep: Grip,
     93      });
     94    }
     95 
     96    if (rootTitle) {
     97      return Accordion({
     98        items: [
     99          {
    100            component: ObjectInspector,
    101            componentProps: objectInspectorProps,
    102            header: rootTitle,
    103            id: rootTitle.replace(/\s/g, "-"),
    104            opened: true,
    105          },
    106        ],
    107      });
    108    }
    109 
    110    return ObjectInspector(objectInspectorProps);
    111  }
    112 }
    113 
    114 module.exports = ObjectValueGripView;