tor-browser

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

RulesetsParent.sys.mjs (2432B)


      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 import {
      6  OnionAliasStore,
      7  OnionAliasStoreTopics,
      8 } from "moz-src:///browser/components/onionservices/OnionAliasStore.sys.mjs";
      9 
     10 const kShowWarningPref = "torbrowser.rulesets.show_warning";
     11 
     12 /**
     13 * This class relays the changes the user's changes from about:rulesets to the
     14 * rulesets database.
     15 */
     16 export class RulesetsParent extends JSWindowActorParent {
     17  constructor(...args) {
     18    super(...args);
     19 
     20    const self = this;
     21    this.observer = {
     22      observe(aSubject, aTopic) {
     23        const obj = aSubject?.wrappedJSObject;
     24        if (aTopic === OnionAliasStoreTopics.ChannelsChanged && obj) {
     25          self.sendAsyncMessage("rulesets:channels-change", obj);
     26        }
     27      },
     28    };
     29    Services.obs.addObserver(
     30      this.observer,
     31      OnionAliasStoreTopics.ChannelsChanged
     32    );
     33  }
     34 
     35  didDestroy() {
     36    Services.obs.removeObserver(
     37      this.observer,
     38      OnionAliasStoreTopics.ChannelsChanged
     39    );
     40  }
     41 
     42  async receiveMessage(message) {
     43    switch (message.name) {
     44      // RPMSendAsyncMessage
     45      case "rulesets:delete-channel":
     46        OnionAliasStore.deleteChannel(message.data);
     47        break;
     48      case "rulesets:enable-channel":
     49        OnionAliasStore.enableChannel(message.data.name, message.data.enabled);
     50        break;
     51      case "rulesets:set-show-warning":
     52        Services.prefs.setBoolPref(kShowWarningPref, message.data);
     53        break;
     54      // RPMSendQuery
     55      case "rulesets:get-channels":
     56        return OnionAliasStore.getChannels();
     57      case "rulesets:get-init-args":
     58        return {
     59          showWarning: Services.prefs.getBoolPref(kShowWarningPref, true),
     60        };
     61      case "rulesets:set-channel": {
     62        const ch = await OnionAliasStore.setChannel(message.data);
     63        return ch;
     64      }
     65      case "rulesets:update-channel":
     66        // We need to catch any error in this way, because in case of an
     67        // exception, RPMSendQuery does not return on the other side
     68        try {
     69          const channel = await OnionAliasStore.updateChannel(message.data);
     70          return channel;
     71        } catch (err) {
     72          console.error("Cannot update the channel", err);
     73          return { error: err.toString() };
     74        }
     75    }
     76    return undefined;
     77  }
     78 }