tor-browser

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

common.js (2826B)


      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 class SourceLocation {
      8  /**
      9   * A SourceLocation represents a location in a source.
     10   *
     11   * @param SourceActor actor
     12   *        A SourceActor representing a source.
     13   * @param Number line
     14   *        A line within the given source.
     15   * @param Number column
     16   *        A column within the given line.
     17   */
     18  constructor(actor, line, column) {
     19    this._connection = actor ? actor.conn : null;
     20    this._actorID = actor ? actor.actorID : undefined;
     21    this._line = line;
     22    this._column = column;
     23  }
     24 
     25  get sourceActor() {
     26    return this._connection ? this._connection.getActor(this._actorID) : null;
     27  }
     28 
     29  get url() {
     30    return this.sourceActor.url;
     31  }
     32 
     33  get line() {
     34    return this._line;
     35  }
     36 
     37  get column() {
     38    return this._column;
     39  }
     40 
     41  get sourceUrl() {
     42    return this.sourceActor.url;
     43  }
     44 
     45  equals(other) {
     46    return (
     47      this.sourceActor.url == other.sourceActor.url &&
     48      this.line === other.line &&
     49      (this.column === undefined ||
     50        other.column === undefined ||
     51        this.column === other.column)
     52    );
     53  }
     54 
     55  toJSON() {
     56    return {
     57      source: this.sourceActor.form(),
     58      line: this.line,
     59      column: this.column,
     60    };
     61  }
     62 }
     63 
     64 exports.SourceLocation = SourceLocation;
     65 
     66 /**
     67 * A method decorator that ensures the actor is in the expected state before
     68 * proceeding. If the actor is not in the expected state, the decorated method
     69 * returns a rejected promise.
     70 *
     71 * The actor's state must be at this.state property.
     72 *
     73 * @param String expectedState
     74 *        The expected state.
     75 * @param String activity
     76 *        Additional info about what's going on.
     77 * @param Function methodFunc
     78 *        The actor method to proceed with when the actor is in the expected
     79 *        state.
     80 *
     81 * @returns Function
     82 *          The decorated method.
     83 */
     84 function expectState(expectedState, methodFunc, activity) {
     85  return function (...args) {
     86    if (this.state !== expectedState) {
     87      const msg =
     88        `Wrong state while ${activity}:` +
     89        `Expected '${expectedState}', ` +
     90        `but current state is '${this.state}'.`;
     91      return Promise.reject(new Error(msg));
     92    }
     93 
     94    return methodFunc.apply(this, args);
     95  };
     96 }
     97 
     98 exports.expectState = expectState;
     99 
    100 /**
    101 * Autobind method from a `bridge` property set on some actors where the
    102 * implementation is delegated to a separate class, and where `bridge` points
    103 * to an instance of this class.
    104 */
    105 function actorBridgeWithSpec(methodName) {
    106  return function () {
    107    return this.bridge[methodName].apply(this.bridge, arguments);
    108  };
    109 }
    110 exports.actorBridgeWithSpec = actorBridgeWithSpec;