tor-browser

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

GlobalState.sys.mjs (1850B)


      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 file,
      3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 const EXPORTED_METHODS = [
      6  "getState",
      7  "clear",
      8  "get",
      9  "set",
     10  "delete",
     11  "setFromState",
     12 ];
     13 
     14 /**
     15 * Module that contains global session data.
     16 */
     17 export function GlobalState() {
     18  let internal = new GlobalStateInternal();
     19  let external = {};
     20  for (let method of EXPORTED_METHODS) {
     21    external[method] = internal[method].bind(internal);
     22  }
     23  return Object.freeze(external);
     24 }
     25 
     26 function GlobalStateInternal() {
     27  // Storage for global state.
     28  this.state = {};
     29 }
     30 
     31 GlobalStateInternal.prototype = {
     32  /**
     33   * Get all value from the global state.
     34   */
     35  getState() {
     36    return this.state;
     37  },
     38 
     39  /**
     40   * Clear all currently stored global state.
     41   */
     42  clear() {
     43    this.state = {};
     44  },
     45 
     46  /**
     47   * Retrieve a value from the global state.
     48   *
     49   * @param aKey
     50   *        A key the value is stored under.
     51   * @return The value stored at aKey, or an empty string if no value is set.
     52   */
     53  get(aKey) {
     54    return this.state[aKey] || "";
     55  },
     56 
     57  /**
     58   * Set a global value.
     59   *
     60   * @param aKey
     61   *        A key to store the value under.
     62   */
     63  set(aKey, aStringValue) {
     64    this.state[aKey] = aStringValue;
     65  },
     66 
     67  /**
     68   * Delete a global value.
     69   *
     70   * @param aKey
     71   *        A key to delete the value for.
     72   */
     73  delete(aKey) {
     74    delete this.state[aKey];
     75  },
     76 
     77  /**
     78   * Set the current global state from a state object. Any previous global
     79   * state will be removed, even if the new state does not contain a matching
     80   * key.
     81   *
     82   * @param aState
     83   *        A state object to extract global state from to be set.
     84   */
     85  setFromState(aState) {
     86    this.state = (aState && aState.global) || {};
     87  },
     88 };