tor-browser

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

Bug422543Child.sys.mjs (1924B)


      1 class SHistoryListener {
      2  constructor() {
      3    this.retval = true;
      4    this.last = "initial";
      5  }
      6 
      7  OnHistoryNewEntry() {
      8    this.last = "newentry";
      9  }
     10 
     11  OnHistoryGotoIndex() {
     12    this.last = "gotoindex";
     13  }
     14 
     15  OnHistoryPurge() {
     16    this.last = "purge";
     17  }
     18 
     19  OnHistoryReload() {
     20    this.last = "reload";
     21    return this.retval;
     22  }
     23 
     24  OnHistoryReplaceEntry() {}
     25 }
     26 SHistoryListener.prototype.QueryInterface = ChromeUtils.generateQI([
     27  "nsISHistoryListener",
     28  "nsISupportsWeakReference",
     29 ]);
     30 
     31 let listeners;
     32 
     33 export class Bug422543Child extends JSWindowActorChild {
     34  constructor() {
     35    super();
     36  }
     37 
     38  actorCreated() {
     39    if (listeners) {
     40      return;
     41    }
     42 
     43    this.shistory = this.docShell.nsIWebNavigation.sessionHistory;
     44    listeners = [new SHistoryListener(), new SHistoryListener()];
     45 
     46    for (let listener of listeners) {
     47      this.shistory.legacySHistory.addSHistoryListener(listener);
     48    }
     49  }
     50 
     51  cleanup() {
     52    for (let listener of listeners) {
     53      this.shistory.legacySHistory.removeSHistoryListener(listener);
     54    }
     55    this.shistory = null;
     56    listeners = null;
     57    return {};
     58  }
     59 
     60  getListenerStatus() {
     61    return listeners.map(l => l.last);
     62  }
     63 
     64  resetListeners() {
     65    for (let listener of listeners) {
     66      listener.last = "initial";
     67    }
     68 
     69    return {};
     70  }
     71 
     72  notifyReload() {
     73    let history = this.shistory.legacySHistory;
     74    let rval = history.notifyOnHistoryReload();
     75    return { rval };
     76  }
     77 
     78  setRetval({ num, val }) {
     79    listeners[num].retval = val;
     80    return {};
     81  }
     82 
     83  receiveMessage(msg) {
     84    switch (msg.name) {
     85      case "cleanup":
     86        return this.cleanup();
     87      case "getListenerStatus":
     88        return this.getListenerStatus();
     89      case "notifyReload":
     90        return this.notifyReload();
     91      case "resetListeners":
     92        return this.resetListeners();
     93      case "setRetval":
     94        return this.setRetval(msg.data);
     95    }
     96    return null;
     97  }
     98 }