[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [Git][tpo/applications/tor-browser][tor-browser-115.7.0esr-13.5-1] 2 commits: fixup! Bug 40597: Implement TorSettings module



Title: GitLab

richard pushed to branch tor-browser-115.7.0esr-13.5-1 at The Tor Project / Applications / Tor Browser

Commits:

  • bb028644
    by Pier Angelo Vendrame at 2024-01-26T11:31:15+01:00
    fixup! Bug 40597: Implement TorSettings module
    
    Bug 42384: Use TorSettings's initialization promise to handle race
    conditions
    
    We now have a race condition for which the notification about
    TorSettings being ready is sent before TorConnect can observe this
    topic.
    A while ago, we introduced an initialization promise to TorSettings,
    therefore we can use it instead of Service.obs and avoid this race
    condition.
    
    Also, fixed quicksettings ignored in TorSettings.setSettings.
    
  • a48e4389
    by Pier Angelo Vendrame at 2024-01-26T11:35:10+01:00
    fixup! Bug 42247: Android helpers for the TorProvider
    
    Update the cached mSettings whenever someone one the GeckoView side
    changes any TorSettings settings.
    

4 changed files:

Changes:

  • mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorIntegrationAndroid.java
    ... ... @@ -47,6 +47,8 @@ public class TorIntegrationAndroid implements BundleEventListener {
    47 47
         private static final String EVENT_BOOTSTRAP_COMPLETE = "GeckoView:Tor:BootstrapComplete";
    
    48 48
         private static final String EVENT_BOOTSTRAP_ERROR = "GeckoView:Tor:BootstrapError";
    
    49 49
         private static final String EVENT_SETTINGS_OPEN = "GeckoView:Tor:OpenSettings";
    
    50
    +    private static final String EVENT_SETTINGS_READY = "GeckoView:Tor:SettingsReady";
    
    51
    +    private static final String EVENT_SETTINGS_CHANGED = "GeckoView:Tor:SettingsChanged";
    
    50 52
     
    
    51 53
         // Events we emit
    
    52 54
         private static final String EVENT_SETTINGS_GET = "GeckoView:Tor:SettingsGet";
    
    ... ... @@ -57,7 +59,6 @@ public class TorIntegrationAndroid implements BundleEventListener {
    57 59
         private static final String EVENT_BOOTSTRAP_BEGIN_AUTO = "GeckoView:Tor:BootstrapBeginAuto";
    
    58 60
         private static final String EVENT_BOOTSTRAP_CANCEL = "GeckoView:Tor:BootstrapCancel";
    
    59 61
         private static final String EVENT_BOOTSTRAP_GET_STATE = "GeckoView:Tor:BootstrapGetState";
    
    60
    -    private static final String EVENT_SETTINGS_READY = "GeckoView:Tor:SettingsReady";
    
    61 62
     
    
    62 63
         private static final String CONTROL_PORT_FILE = "/control-ipc";
    
    63 64
         private static final String SOCKS_FILE = "/socks-ipc";
    
    ... ... @@ -112,6 +113,7 @@ public class TorIntegrationAndroid implements BundleEventListener {
    112 113
                             EVENT_MEEK_START,
    
    113 114
                             EVENT_MEEK_STOP,
    
    114 115
                             EVENT_SETTINGS_READY,
    
    116
    +                        EVENT_SETTINGS_CHANGED,
    
    115 117
                             EVENT_BOOTSTRAP_STATE_CHANGED,
    
    116 118
                             EVENT_BOOTSTRAP_PROGRESS,
    
    117 119
                             EVENT_BOOTSTRAP_COMPLETE,
    
    ... ... @@ -136,6 +138,14 @@ public class TorIntegrationAndroid implements BundleEventListener {
    136 138
                 } catch(Exception e) {
    
    137 139
                     Log.e(TAG, "SettingsLoader error: "+ e.toString());
    
    138 140
                 }
    
    141
    +        } else if (EVENT_SETTINGS_CHANGED.equals(event)) {
    
    142
    +            GeckoBundle newSettings = message.getBundle("settings");
    
    143
    +            if (newSettings != null) {
    
    144
    +                // TODO: Should we notify listeners?
    
    145
    +                mSettings = new TorSettings(newSettings);
    
    146
    +            } else {
    
    147
    +                Log.w(TAG, "Ignoring a settings changed event that did not have the new settings.");
    
    148
    +            }
    
    139 149
             } else if (EVENT_BOOTSTRAP_STATE_CHANGED.equals(event)) {
    
    140 150
                 String state = message.getString("state");
    
    141 151
                 for (BootstrapStateChangeListener listener: mBootstrapStateListeners) {
    

  • toolkit/modules/TorAndroidIntegration.sys.mjs
    ... ... @@ -124,6 +124,15 @@ class TorAndroidIntegrationImpl {
    124 124
               settings: lazy.TorSettings.getSettings(),
    
    125 125
             });
    
    126 126
             break;
    
    127
    +      case lazy.TorSettingsTopics.SettingsChanged:
    
    128
    +        // For Android we push also the settings object to avoid a round trip on
    
    129
    +        // the event dispatcher.
    
    130
    +        lazy.EventDispatcher.instance.sendRequest({
    
    131
    +          type: EmittedEvents.settingsChanged,
    
    132
    +          changes: subj.wrappedJSObject.changes ?? [],
    
    133
    +          settings: lazy.TorSettings.getSettings(),
    
    134
    +        });
    
    135
    +        break;
    
    127 136
         }
    
    128 137
       }
    
    129 138
     
    

  • toolkit/modules/TorConnect.sys.mjs
    ... ... @@ -878,10 +878,11 @@ export const TorConnect = (() => {
    878 878
               console.log(`TorConnect: Observing topic '${addTopic}'`);
    
    879 879
             };
    
    880 880
     
    
    881
    +        TorSettings.initializedPromise.then(() => this._settingsInitialized());
    
    882
    +
    
    881 883
             // register the Tor topics we always care about
    
    882 884
             observeTopic(TorTopics.ProcessExited);
    
    883 885
             observeTopic(TorTopics.LogHasWarnOrErr);
    
    884
    -        observeTopic(TorSettingsTopics.Ready);
    
    885 886
           }
    
    886 887
         },
    
    887 888
     
    
    ... ... @@ -889,29 +890,6 @@ export const TorConnect = (() => {
    889 890
           console.log(`TorConnect: Observed ${topic}`);
    
    890 891
     
    
    891 892
           switch (topic) {
    
    892
    -        /* We need to wait until TorSettings have been loaded and applied before we can Quickstart */
    
    893
    -        case TorSettingsTopics.Ready: {
    
    894
    -          // tor-browser#41907: This is only a workaround to avoid users being
    
    895
    -          // bounced back to the initial panel without any explanation.
    
    896
    -          // Longer term we should disable the clickable elements, or find a UX
    
    897
    -          // to prevent this from happening (e.g., allow buttons to be clicked,
    
    898
    -          // but show an intermediate starting state, or a message that tor is
    
    899
    -          // starting while the butons are disabled, etc...).
    
    900
    -          if (this.state !== TorConnectState.Initial) {
    
    901
    -            console.warn(
    
    902
    -              "TorConnect: Seen the torsettings:ready after the state has already changed, ignoring the notification."
    
    903
    -            );
    
    904
    -            break;
    
    905
    -          }
    
    906
    -          if (this.shouldQuickStart) {
    
    907
    -            // Quickstart
    
    908
    -            this._changeState(TorConnectState.Bootstrapping);
    
    909
    -          } else {
    
    910
    -            // Configuring
    
    911
    -            this._changeState(TorConnectState.Configuring);
    
    912
    -          }
    
    913
    -          break;
    
    914
    -        }
    
    915 893
             case TorTopics.LogHasWarnOrErr: {
    
    916 894
               this._logHasWarningOrError = true;
    
    917 895
               break;
    
    ... ... @@ -941,6 +919,28 @@ export const TorConnect = (() => {
    941 919
           }
    
    942 920
         },
    
    943 921
     
    
    922
    +    _settingsInitialized() {
    
    923
    +      // tor-browser#41907: This is only a workaround to avoid users being
    
    924
    +      // bounced back to the initial panel without any explanation.
    
    925
    +      // Longer term we should disable the clickable elements, or find a UX
    
    926
    +      // to prevent this from happening (e.g., allow buttons to be clicked,
    
    927
    +      // but show an intermediate starting state, or a message that tor is
    
    928
    +      // starting while the butons are disabled, etc...).
    
    929
    +      if (this.state !== TorConnectState.Initial) {
    
    930
    +        console.warn(
    
    931
    +          "TorConnect: Seen the torsettings:ready after the state has already changed, ignoring the notification."
    
    932
    +        );
    
    933
    +        return;
    
    934
    +      }
    
    935
    +      if (this.shouldQuickStart) {
    
    936
    +        // Quickstart
    
    937
    +        this._changeState(TorConnectState.Bootstrapping);
    
    938
    +      } else {
    
    939
    +        // Configuring
    
    940
    +        this._changeState(TorConnectState.Configuring);
    
    941
    +      }
    
    942
    +    },
    
    943
    +
    
    944 944
         /*
    
    945 945
             Various getters
    
    946 946
             */
    

  • toolkit/modules/TorSettings.sys.mjs
    ... ... @@ -992,6 +992,10 @@ class TorSettingsImpl {
    992 992
         // Hold off on lots of notifications until all settings are changed.
    
    993 993
         this.freezeNotifications();
    
    994 994
         try {
    
    995
    +      if ("quickstart" in settings) {
    
    996
    +        this.quickstart.enabled = !!settings.quickstart.enabled;
    
    997
    +      }
    
    998
    +
    
    995 999
           if ("bridges" in settings) {
    
    996 1000
             this.bridges.enabled = !!settings.bridges.enabled;
    
    997 1001
             // Currently, disabling bridges in the UI does not remove the lines,
    

  • _______________________________________________
    tor-commits mailing list
    tor-commits@xxxxxxxxxxxxxxxxxxxx
    https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits