tor-browser

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

walker.js (9060B)


      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 "use strict";
      5 
      6 const {
      7  Arg,
      8  Option,
      9  RetVal,
     10  generateActorSpec,
     11  types,
     12 } = require("resource://devtools/shared/protocol.js");
     13 
     14 types.addDictType("dommutation", {});
     15 
     16 types.addDictType("searchresult", {
     17  list: "domnodelist",
     18  // Right now there is isn't anything required for metadata,
     19  // but it's json so it can be extended with extra data.
     20  metadata: "array:json",
     21 });
     22 
     23 // Some common request/response templates for the dom walker
     24 
     25 var nodeArrayMethod = {
     26  request: {
     27    node: Arg(0, "domnode"),
     28    maxNodes: Option(1),
     29    center: Option(1, "domnode"),
     30    start: Option(1, "domnode"),
     31  },
     32  response: RetVal(
     33    types.addDictType("domtraversalarray", {
     34      nodes: "array:domnode",
     35    })
     36  ),
     37 };
     38 
     39 var traversalMethod = {
     40  request: {
     41    node: Arg(0, "domnode"),
     42  },
     43  response: {
     44    node: RetVal("nullable:domnode"),
     45  },
     46 };
     47 
     48 const walkerSpec = generateActorSpec({
     49  typeName: "domwalker",
     50 
     51  events: {
     52    "new-mutations": {
     53      type: "newMutations",
     54    },
     55    "root-available": {
     56      type: "root-available",
     57      node: Arg(0, "nullable:domnode"),
     58    },
     59    "root-destroyed": {
     60      type: "root-destroyed",
     61      node: Arg(0, "nullable:domnode"),
     62    },
     63    "picker-node-picked": {
     64      type: "pickerNodePicked",
     65      node: Arg(0, "disconnectedNode"),
     66    },
     67    "picker-node-previewed": {
     68      type: "pickerNodePreviewed",
     69      node: Arg(0, "disconnectedNode"),
     70    },
     71    "picker-node-hovered": {
     72      type: "pickerNodeHovered",
     73      node: Arg(0, "disconnectedNode"),
     74    },
     75    "picker-node-canceled": {
     76      type: "pickerNodeCanceled",
     77    },
     78    "display-change": {
     79      type: "display-change",
     80      nodes: Arg(0, "array:domnode"),
     81    },
     82    "scrollable-change": {
     83      type: "scrollable-change",
     84      nodes: Arg(0, "array:domnode"),
     85    },
     86    "overflow-change": {
     87      type: "overflow-change",
     88      nodes: Arg(0, "array:domnode"),
     89    },
     90    "container-type-change": {
     91      type: "container-type-change",
     92      nodes: Arg(0, "array:domnode"),
     93    },
     94    "anchor-name-change": {
     95      type: "anchor-name-change",
     96      nodes: Arg(0, "array:domnode"),
     97    },
     98    // The walker actor emits a useful "resize" event to its front to let
     99    // clients know when the browser window gets resized. This may be useful
    100    // for refreshing a DOM node's styles for example, since those may depend on
    101    // media-queries.
    102    resize: {
    103      type: "resize",
    104    },
    105  },
    106 
    107  methods: {
    108    release: {
    109      release: true,
    110    },
    111    document: {
    112      request: { node: Arg(0, "nullable:domnode") },
    113      response: { node: RetVal("domnode") },
    114    },
    115    documentElement: {
    116      request: { node: Arg(0, "nullable:domnode") },
    117      response: { node: RetVal("domnode") },
    118    },
    119    retainNode: {
    120      request: { node: Arg(0, "domnode") },
    121      response: {},
    122    },
    123    unretainNode: {
    124      request: { node: Arg(0, "domnode") },
    125      response: {},
    126    },
    127    releaseNode: {
    128      request: {
    129        node: Arg(0, "domnode"),
    130        force: Option(1),
    131      },
    132    },
    133    children: nodeArrayMethod,
    134    nextSibling: traversalMethod,
    135    previousSibling: traversalMethod,
    136    findInspectingNode: {
    137      request: {},
    138      response: RetVal("disconnectedNode"),
    139    },
    140    querySelector: {
    141      request: {
    142        node: Arg(0, "domnode"),
    143        selector: Arg(1),
    144      },
    145      response: RetVal("disconnectedNode"),
    146    },
    147    getIdrefNode: {
    148      request: {
    149        node: Arg(0, "domnode"),
    150        id: Arg(1),
    151      },
    152      response: RetVal("disconnectedNode"),
    153    },
    154    querySelectorAll: {
    155      request: {
    156        node: Arg(0, "domnode"),
    157        selector: Arg(1),
    158      },
    159      response: {
    160        list: RetVal("domnodelist"),
    161      },
    162    },
    163    search: {
    164      request: {
    165        query: Arg(0),
    166      },
    167      response: {
    168        list: RetVal("searchresult"),
    169      },
    170    },
    171    getSuggestionsForQuery: {
    172      request: {
    173        query: Arg(0),
    174        completing: Arg(1),
    175        selectorState: Arg(2),
    176      },
    177      response: {
    178        list: RetVal("array:array:string"),
    179      },
    180    },
    181    addPseudoClassLock: {
    182      request: {
    183        node: Arg(0, "domnode"),
    184        pseudoClass: Arg(1),
    185        parents: Option(2),
    186        enabled: Option(2, "boolean"),
    187      },
    188      response: {},
    189    },
    190    hideNode: {
    191      request: { node: Arg(0, "domnode") },
    192    },
    193    unhideNode: {
    194      request: { node: Arg(0, "domnode") },
    195    },
    196    removePseudoClassLock: {
    197      request: {
    198        node: Arg(0, "domnode"),
    199        pseudoClass: Arg(1),
    200        parents: Option(2),
    201      },
    202      response: {},
    203    },
    204    clearPseudoClassLocks: {
    205      request: {
    206        node: Arg(0, "nullable:domnode"),
    207      },
    208      response: {},
    209    },
    210    innerHTML: {
    211      request: {
    212        node: Arg(0, "domnode"),
    213      },
    214      response: {
    215        value: RetVal("longstring"),
    216      },
    217    },
    218    setInnerHTML: {
    219      request: {
    220        node: Arg(0, "domnode"),
    221        value: Arg(1, "string"),
    222      },
    223      response: {},
    224    },
    225    outerHTML: {
    226      request: {
    227        node: Arg(0, "domnode"),
    228      },
    229      response: {
    230        value: RetVal("longstring"),
    231      },
    232    },
    233    setOuterHTML: {
    234      request: {
    235        node: Arg(0, "domnode"),
    236        value: Arg(1, "string"),
    237      },
    238      response: {},
    239    },
    240    insertAdjacentHTML: {
    241      request: {
    242        node: Arg(0, "domnode"),
    243        position: Arg(1, "string"),
    244        value: Arg(2, "string"),
    245      },
    246      response: RetVal("disconnectedNodeArray"),
    247    },
    248    duplicateNode: {
    249      request: {
    250        node: Arg(0, "domnode"),
    251      },
    252      response: {},
    253    },
    254    removeNode: {
    255      request: {
    256        node: Arg(0, "domnode"),
    257      },
    258      response: {
    259        nextSibling: RetVal("nullable:domnode"),
    260      },
    261    },
    262    removeNodes: {
    263      request: {
    264        node: Arg(0, "array:domnode"),
    265      },
    266      response: {},
    267    },
    268    insertBefore: {
    269      request: {
    270        node: Arg(0, "domnode"),
    271        parent: Arg(1, "domnode"),
    272        sibling: Arg(2, "nullable:domnode"),
    273      },
    274      response: {},
    275    },
    276    editTagName: {
    277      request: {
    278        node: Arg(0, "domnode"),
    279        tagName: Arg(1, "string"),
    280      },
    281      response: {},
    282    },
    283    getMutations: {
    284      request: {
    285        cleanup: Option(0),
    286      },
    287      response: {
    288        mutations: RetVal("array:dommutation"),
    289      },
    290    },
    291    isInDOMTree: {
    292      request: { node: Arg(0, "domnode") },
    293      response: { attached: RetVal("boolean") },
    294    },
    295    getNodeActorFromWindowID: {
    296      request: {
    297        windowID: Arg(0, "string"),
    298      },
    299      response: {
    300        nodeFront: RetVal("nullable:disconnectedNode"),
    301      },
    302    },
    303    getNodeActorFromContentDomReference: {
    304      request: {
    305        contentDomReference: Arg(0, "json"),
    306      },
    307      response: {
    308        nodeFront: RetVal("nullable:disconnectedNode"),
    309      },
    310    },
    311    getStyleSheetOwnerNode: {
    312      request: {
    313        styleSheetActorID: Arg(0, "string"),
    314      },
    315      response: {
    316        ownerNode: RetVal("nullable:disconnectedNode"),
    317      },
    318    },
    319    getNodeFromActor: {
    320      request: {
    321        actorID: Arg(0, "string"),
    322        path: Arg(1, "array:string"),
    323      },
    324      response: {
    325        node: RetVal("nullable:disconnectedNode"),
    326      },
    327    },
    328    getLayoutInspector: {
    329      request: {},
    330      response: {
    331        actor: RetVal("layout"),
    332      },
    333    },
    334    getParentGridNode: {
    335      request: {
    336        node: Arg(0, "nullable:domnode"),
    337      },
    338      response: {
    339        node: RetVal("nullable:domnode"),
    340      },
    341    },
    342    getOffsetParent: {
    343      request: {
    344        node: Arg(0, "nullable:domnode"),
    345      },
    346      response: {
    347        node: RetVal("nullable:domnode"),
    348      },
    349    },
    350    setMutationBreakpoints: {
    351      request: {
    352        node: Arg(0, "nullable:domnode"),
    353        subtree: Option(1, "nullable:boolean"),
    354        removal: Option(1, "nullable:boolean"),
    355        attribute: Option(1, "nullable:boolean"),
    356      },
    357      response: {},
    358    },
    359    getEmbedderElement: {
    360      request: {
    361        browsingContextID: Arg(0, "string"),
    362      },
    363      response: {
    364        nodeFront: RetVal("disconnectedNode"),
    365      },
    366    },
    367    pick: {
    368      request: {
    369        doFocus: Arg(0, "nullable:boolean"),
    370        isLocalTab: Arg(1, "nullable:boolean"),
    371      },
    372    },
    373    cancelPick: {
    374      request: {},
    375      response: {},
    376    },
    377    clearPicker: {
    378      request: {},
    379      oneway: true,
    380    },
    381    watchRootNode: {
    382      request: {},
    383      response: {},
    384    },
    385    getOverflowCausingElements: {
    386      request: {
    387        node: Arg(0, "domnode"),
    388      },
    389      response: {
    390        list: RetVal("disconnectedNodeArray"),
    391      },
    392    },
    393    getScrollableAncestorNode: {
    394      request: {
    395        node: Arg(0, "domnode"),
    396      },
    397      response: {
    398        node: RetVal("nullable:domnode"),
    399      },
    400    },
    401  },
    402 });
    403 
    404 exports.walkerSpec = walkerSpec;