tor-browser

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

RunState.sys.mjs (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 file,
      3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 const STATE_STOPPED = 0;
      6 const STATE_RUNNING = 1;
      7 const STATE_QUITTING = 2;
      8 const STATE_CLOSING = 3;
      9 const STATE_CLOSED = 4;
     10 
     11 // We're initially stopped.
     12 var state = STATE_STOPPED;
     13 
     14 /**
     15 * This module keeps track of SessionStore's current run state. We will
     16 * always start out at STATE_STOPPED. After the session was read from disk and
     17 * the initial browser window has loaded we switch to STATE_RUNNING. On the
     18 * first notice that a browser shutdown was granted we switch to STATE_QUITTING.
     19 */
     20 export var RunState = Object.freeze({
     21  // If we're stopped then SessionStore hasn't been initialized yet. As soon
     22  // as the session is read from disk and the initial browser window has loaded
     23  // the run state will change to STATE_RUNNING.
     24  get isStopped() {
     25    return state == STATE_STOPPED;
     26  },
     27 
     28  // STATE_RUNNING is our default mode of operation that we'll spend most of
     29  // the time in. After the session was read from disk and the first browser
     30  // window has loaded we remain running until the browser quits.
     31  get isRunning() {
     32    return state == STATE_RUNNING;
     33  },
     34 
     35  // We will enter STATE_QUITTING as soon as we receive notice that a browser
     36  // shutdown was granted. SessionStore will use this information to prevent
     37  // us from collecting partial information while the browser is shutting down
     38  // as well as to allow a last single write to disk and block all writes after
     39  // that.
     40  get isQuitting() {
     41    return state >= STATE_QUITTING;
     42  },
     43 
     44  // We will enter STATE_CLOSING as soon as SessionStore is uninitialized.
     45  // The SessionFile module will know that a last write will happen in this
     46  // state and it can do some necessary cleanup.
     47  get isClosing() {
     48    return state == STATE_CLOSING;
     49  },
     50 
     51  // We will enter STATE_CLOSED as soon as SessionFile has written to disk for
     52  // the last time before shutdown and will not accept any further writes.
     53  get isClosed() {
     54    return state == STATE_CLOSED;
     55  },
     56 
     57  // Switch the run state to STATE_RUNNING. This must be called after the
     58  // session was read from, the initial browser window has loaded and we're
     59  // now ready to restore session data.
     60  setRunning() {
     61    if (this.isStopped) {
     62      state = STATE_RUNNING;
     63    }
     64  },
     65 
     66  // Switch the run state to STATE_CLOSING. This must be called *before* the
     67  // last SessionFile.write() call so that SessionFile knows we're closing and
     68  // can do some last cleanups and write a proper sessionstore.js file.
     69  setClosing() {
     70    if (this.isQuitting) {
     71      state = STATE_CLOSING;
     72    }
     73  },
     74 
     75  // Switch the run state to STATE_CLOSED. This must be called by SessionFile
     76  // after the last write to disk was accepted and no further writes will be
     77  // allowed. Any writes after this stage will cause exceptions.
     78  setClosed() {
     79    if (this.isClosing) {
     80      state = STATE_CLOSED;
     81    }
     82  },
     83 
     84  // Switch the run state to STATE_QUITTING. This should be called once we're
     85  // certain that the browser is going away and before we start collecting the
     86  // final window states to save in the session file.
     87  setQuitting() {
     88    if (this.isRunning) {
     89      state = STATE_QUITTING;
     90    }
     91  },
     92 });