[tbb-commits] [tor-browser/tor-browser-68.1.0esr-9.0-1] Bug 25741 - TBA: Remove sync option from preferences

gk at torproject.org gk at torproject.org
Sat Aug 31 19:46:16 UTC 2019


commit da563f691147389df259b61f4f47c490257e8bf2
Author: Amogh Pradeep <amoghbl1 at gmail.com>
Date:   Fri Jul 17 13:27:07 2015 -0400

    Bug 25741 - TBA: Remove sync option from preferences
    
    We don't want this while the Sync subsystem is a proxy-bypass risk. We
    can drop this when the feature is patched (Bug 1314778).
    
    Signed-off-by: Amogh Pradeep <amoghbl1 at gmail.com>
    
    Also:
    Bug 28507 - Don't call Push and Sync services during Sanitize
    Bug 30086 - Prevent Sync-related crashes on Android
    Bug 25741 - TBA: Only include Firefox Account permissions if we want them (using MOZ_ACCOUNT)
    Bug 25741 - TBA: Neuter Firefox Accounts
---
 .../android/app/src/main/res/xml/preferences.xml   |  6 --
 mobile/android/base/AndroidManifest.xml.in         |  4 ++
 .../android/base/FennecManifest_permissions.xml.in |  2 +
 .../base/java/org/mozilla/gecko/BrowserApp.java    |  8 ---
 .../mozilla/gecko/home/CombinedHistoryPanel.java   | 14 +++--
 .../overlays/service/sharemethods/SendTab.java     |  6 +-
 .../base/locales/en-US/torbrowser_strings.dtd      |  2 +
 mobile/android/base/strings.xml.in                 |  2 +
 mobile/android/modules/Sanitizer.jsm               | 47 ++++++++------
 .../org/mozilla/gecko/fxa/FirefoxAccounts.java     | 73 +++++++++++++---------
 .../gecko/fxa/authenticator/AndroidFxAccount.java  | 13 +++-
 11 files changed, 107 insertions(+), 70 deletions(-)

diff --git a/mobile/android/app/src/main/res/xml/preferences.xml b/mobile/android/app/src/main/res/xml/preferences.xml
index a9cec32ca3ef..f9c5c9e1ac53 100644
--- a/mobile/android/app/src/main/res/xml/preferences.xml
+++ b/mobile/android/app/src/main/res/xml/preferences.xml
@@ -9,12 +9,6 @@
                   xmlns:gecko="http://schemas.android.com/apk/res-auto"
                   android:enabled="false">
 
-    <org.mozilla.gecko.preferences.SyncPreference android:key="android.not_a_preference.sync"
-                                                  android:title="@string/pref_sync"
-                                                  android:icon="@drawable/sync_avatar_default"
-                                                  android:summary="@string/pref_sync_summary"
-                                                  android:persistent="false" />
-
     <org.mozilla.gecko.preferences.DefaultBrowserPreference
             android:key="android.not_a_preference.default_browser.link"
             android:persistent="false"
diff --git a/mobile/android/base/AndroidManifest.xml.in b/mobile/android/base/AndroidManifest.xml.in
index 17a34703e6e7..e61a3411b2e0 100644
--- a/mobile/android/base/AndroidManifest.xml.in
+++ b/mobile/android/base/AndroidManifest.xml.in
@@ -291,7 +291,9 @@
             </intent-filter>
         </receiver>
 
+#ifdef MOZ_ACCOUNT
 #include ../services/manifests/FxAccountAndroidManifest_activities.xml.in
+#endif
 
 #ifdef MOZ_CRASHREPORTER
         <activity android:name="org.mozilla.gecko.CrashReporterActivity"
@@ -504,7 +506,9 @@
             </intent-filter>
         </service>
 
+#ifdef MOZ_ACCOUNT
 #include ../services/manifests/FxAccountAndroidManifest_services.xml.in
+#endif
 
         <service
             android:name="org.mozilla.gecko.tabqueue.TabReceivedService"
diff --git a/mobile/android/base/FennecManifest_permissions.xml.in b/mobile/android/base/FennecManifest_permissions.xml.in
index ffa6d27a8b0d..f3e43bb4e3ca 100644
--- a/mobile/android/base/FennecManifest_permissions.xml.in
+++ b/mobile/android/base/FennecManifest_permissions.xml.in
@@ -1,5 +1,7 @@
 
+#ifdef MOZ_ACCOUNT
 #include ../services/manifests/FxAccountAndroidManifest_permissions.xml.in
+#endif
 
 <!-- Bug 1261302: we have two new permissions to request,
      RECEIVE_BOOT_COMPLETED and the permission for push.  We want to ask for
diff --git a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
index 7d4c03f7e5d2..80981eb87136 100644
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -303,8 +303,6 @@ public class BrowserApp extends GeckoApp
 
     private ReadingListHelper mReadingListHelper;
 
-    private AccountsHelper mAccountsHelper;
-
     private ExtensionPermissionsHelper mExtensionPermissionsHelper;
 
     // The tab to be selected on editing mode exit.
@@ -839,7 +837,6 @@ public class BrowserApp extends GeckoApp
 
         mSharedPreferencesHelper = new SharedPreferencesHelper(appContext);
         mReadingListHelper = new ReadingListHelper(appContext, profile);
-        mAccountsHelper = new AccountsHelper(appContext, profile);
         mExtensionPermissionsHelper = new ExtensionPermissionsHelper(this);
 
         if (AppConstants.MOZ_ANDROID_BEAM) {
@@ -1575,11 +1572,6 @@ public class BrowserApp extends GeckoApp
             mReadingListHelper = null;
         }
 
-        if (mAccountsHelper != null) {
-            mAccountsHelper.uninit();
-            mAccountsHelper = null;
-        }
-
         if (mExtensionPermissionsHelper != null) {
             mExtensionPermissionsHelper.uninit();
             mExtensionPermissionsHelper = null;
diff --git a/mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryPanel.java b/mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryPanel.java
index 4080317cd65a..39905dd950de 100644
--- a/mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryPanel.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryPanel.java
@@ -244,10 +244,16 @@ public class CombinedHistoryPanel extends HomeFragment implements RemoteClientsD
         syncSetupButton.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                Telemetry.sendUIEvent(TelemetryContract.Event.ACTION, TelemetryContract.Method.BUTTON, "history_syncsetup");
-                // This Activity will redirect to the correct Activity as needed.
-                final Intent intent = new Intent(FxAccountConstants.ACTION_FXA_GET_STARTED);
-                startActivity(intent);
+                // Tell the user this action is not supported
+                final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
+                dialogBuilder.setMessage(R.string.sync_not_supported);
+                dialogBuilder.setNegativeButton(R.string.button_cancel, new AlertDialog.OnClickListener() {
+                    @Override
+                    public void onClick(final DialogInterface dialog, final int which) {
+                        dialog.dismiss();
+                    }
+                });
+                dialogBuilder.show();
             }
         });
 
diff --git a/mobile/android/base/java/org/mozilla/gecko/overlays/service/sharemethods/SendTab.java b/mobile/android/base/java/org/mozilla/gecko/overlays/service/sharemethods/SendTab.java
index 9382c2ec15f9..5babb74c4f88 100644
--- a/mobile/android/base/java/org/mozilla/gecko/overlays/service/sharemethods/SendTab.java
+++ b/mobile/android/base/java/org/mozilla/gecko/overlays/service/sharemethods/SendTab.java
@@ -165,7 +165,8 @@ public class SendTab extends ShareMethod {
         }
 
         // Have registered UIs offer to set up a Firefox Account.
-        setOverrideIntentAction(FxAccountConstants.ACTION_FXA_GET_STARTED);
+        // Comment for Tor Browser
+        //setOverrideIntentAction(FxAccountConstants.ACTION_FXA_GET_STARTED);
     }
 
     /**
@@ -187,7 +188,8 @@ public class SendTab extends ShareMethod {
         if (validGUIDs.isEmpty()) {
             // Guess we'd better override. We have no clients.
             // This does the broadcast for us.
-            setOverrideIntentAction(FxAccountConstants.ACTION_FXA_GET_STARTED);
+            // Comment for Tor Browser
+            //setOverrideIntentAction(FxAccountConstants.ACTION_FXA_GET_STARTED);
             return;
         }
 
diff --git a/mobile/android/base/locales/en-US/torbrowser_strings.dtd b/mobile/android/base/locales/en-US/torbrowser_strings.dtd
index d23acc8a033a..b43134a0260b 100644
--- a/mobile/android/base/locales/en-US/torbrowser_strings.dtd
+++ b/mobile/android/base/locales/en-US/torbrowser_strings.dtd
@@ -3,3 +3,5 @@
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <!ENTITY firstrun_urlbar_subtext2 "A modern mobile browser from The Tor Project, the non-profit committed to a free and open web.">
+
+<!ENTITY sync_not_supported "Sync is not currently supported in Tor Browser on Android">
diff --git a/mobile/android/base/strings.xml.in b/mobile/android/base/strings.xml.in
index c328bd6b512a..5453bed65e71 100644
--- a/mobile/android/base/strings.xml.in
+++ b/mobile/android/base/strings.xml.in
@@ -54,6 +54,8 @@
 
   <string name="firstrun_welcome_restricted">&onboard_start_restricted1;</string>
 
+  <string name="sync_not_supported">&sync_not_supported;</string>
+
   <string name="bookmarks_title">&bookmarks_title;</string>
   <string name="history_title">&history_title;</string>
 
diff --git a/mobile/android/modules/Sanitizer.jsm b/mobile/android/modules/Sanitizer.jsm
index f244e4a2008b..d3538d49e07f 100644
--- a/mobile/android/modules/Sanitizer.jsm
+++ b/mobile/android/modules/Sanitizer.jsm
@@ -183,18 +183,22 @@ Sanitizer.prototype = {
         sss.clearAll();
 
         // Clear push subscriptions
-        await new Promise((resolve, reject) => {
-          let push = Cc["@mozilla.org/push/Service;1"].getService(
-            Ci.nsIPushService
-          );
-          push.clearForDomain("*", status => {
-            if (Components.isSuccessCode(status)) {
-              resolve();
-            } else {
-              reject(new Error("Error clearing push subscriptions: " + status));
-            }
-          });
-        });
+        //await new Promise((resolve, reject) => {
+        //  let push = Cc["@mozilla.org/push/Service;1"].getService(
+        //    Ci.nsIPushService
+        //  );
+        //  push.clearForDomain("*", status => {
+        //    if (Components.isSuccessCode(status)) {
+        //      resolve();
+        //    } else {
+        //      reject(new Error("Error clearing push subscriptions: " + status));
+        //    }
+        //  });
+        //});
+
+        // Avoid throwing an error because Ci.nsIPushService isn't implemented
+        // All other clearing actions should succeed if we arrive here.
+        Promise.resolve();
         TelemetryStopwatch.finish("FX_SANITIZE_SITESETTINGS", refObj);
       },
 
@@ -491,14 +495,17 @@ Sanitizer.prototype = {
       },
 
       canClear: function(aCallback) {
-        Accounts.anySyncAccountsExist()
-          .then(aCallback)
-          .catch(function(err) {
-            Cu.reportError("Java-side synced tabs clearing failed: " + err);
-            aCallback(false);
-          });
-      },
-    },
+        //Accounts.anySyncAccountsExist()
+        //  .then(aCallback)
+        //  .catch(function(err) {
+        //    Cu.reportError("Java-side synced tabs clearing failed: " + err);
+        //    aCallback(false);
+        //  });
+
+        // We can't clear syncedTabs because Sync is non-functional
+        aCallback(false);
+      }
+    }
   },
 };
 
diff --git a/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/FirefoxAccounts.java b/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/FirefoxAccounts.java
index 74b10c477237..a207f9b237ad 100644
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/FirefoxAccounts.java
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/FirefoxAccounts.java
@@ -7,6 +7,7 @@ package org.mozilla.gecko.fxa;
 import java.io.File;
 import java.util.concurrent.CountDownLatch;
 
+import org.mozilla.gecko.AppConstants;
 import org.mozilla.gecko.background.common.log.Logger;
 import org.mozilla.gecko.fxa.authenticator.AccountPickler;
 import org.mozilla.gecko.fxa.authenticator.AndroidFxAccount;
@@ -49,15 +50,22 @@ public class FirefoxAccounts {
    * @return Firefox account objects.
    */
   public static Account[] getFirefoxAccounts(final Context context) {
-    final Account[] accounts =
-        AccountManager.get(context).getAccountsByType(FxAccountConstants.ACCOUNT_TYPE);
-    if (accounts.length > 0) {
-      FirefoxAccountsUtils.optionallySeparateAccountsDuringFirstRun(context, accounts);
-      return accounts;
-    }
+    if (AppConstants.isTorBrowser()) {
+      return new Account[0];
+    } else {
+      // TBA: Conditionally disable this at run-time.
+      // XXX This will throw a java.lang.SecurityException because we don't declare
+      // the android.permission.GET_ACCOUNTS permission.
+      final Account[] accounts =
+          AccountManager.get(context).getAccountsByType(FxAccountConstants.ACCOUNT_TYPE);
+      if (accounts.length > 0) {
+        FirefoxAccountsUtils.optionallySeparateAccountsDuringFirstRun(context, accounts);
+        return accounts;
+      }
 
-    final Account pickledAccount = getPickledAccount(context);
-    return (pickledAccount != null) ? new Account[] {pickledAccount} : new Account[0];
+      final Account pickledAccount = getPickledAccount(context);
+      return (pickledAccount != null) ? new Account[] {pickledAccount} : new Account[0];
+    }
   }
 
   private static Account getPickledAccount(final Context context) {
@@ -111,9 +119,14 @@ public class FirefoxAccounts {
   }
 
   public static void logSyncOptions(Bundle syncOptions) {
-    final boolean scheduleNow = syncOptions.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF, false);
+    if (AppConstants.isTorBrowser()) {
+      // Don't log an erroneous message, this'll only confuse someone looking at the logs.
+      return;
+    } else {
+      final boolean scheduleNow = syncOptions.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF, false);
 
-    Logger.info(LOG_TAG, "Sync options -- scheduling now: " + scheduleNow);
+      Logger.info(LOG_TAG, "Sync options -- scheduling now: " + scheduleNow);
+    }
   }
 
   public static void requestImmediateSync(final Account account, String[] stagesToSync, String[] stagesToSkip, boolean ignoreSettings) {
@@ -145,28 +158,32 @@ public class FirefoxAccounts {
    * @param stagesToSkip stage names to skip.
    */
   protected static void requestSync(final Account account, final Bundle syncOptions, String[] stagesToSync, String[] stagesToSkip) {
-    if (account == null) {
-      throw new IllegalArgumentException("account must not be null");
-    }
-    if (syncOptions == null) {
-      throw new IllegalArgumentException("syncOptions must not be null");
-    }
+    if (AppConstants.isTorBrowser()) {
+      return;
+    } else {
+      if (account == null) {
+        throw new IllegalArgumentException("account must not be null");
+      }
+      if (syncOptions == null) {
+        throw new IllegalArgumentException("syncOptions must not be null");
+      }
 
-    Utils.putStageNamesToSync(syncOptions, stagesToSync, stagesToSkip);
+      Utils.putStageNamesToSync(syncOptions, stagesToSync, stagesToSkip);
 
-    Logger.info(LOG_TAG, "Requesting sync.");
-    logSyncOptions(syncOptions);
+      Logger.info(LOG_TAG, "Requesting sync.");
+      logSyncOptions(syncOptions);
 
-    // We get strict mode warnings on some devices, so make the request on a
-    // background thread.
-    ThreadPool.run(new Runnable() {
-      @Override
-      public void run() {
-        for (String authority : AndroidFxAccount.DEFAULT_AUTHORITIES_TO_SYNC_AUTOMATICALLY_MAP.keySet()) {
-          ContentResolver.requestSync(account, authority, syncOptions);
+      // We get strict mode warnings on some devices, so make the request on a
+      // background thread.
+      ThreadPool.run(new Runnable() {
+        @Override
+        public void run() {
+          for (String authority : AndroidFxAccount.DEFAULT_AUTHORITIES_TO_SYNC_AUTOMATICALLY_MAP.keySet()) {
+            ContentResolver.requestSync(account, authority, syncOptions);
+          }
         }
-      }
-    });
+      });
+    }
   }
 
   /**
diff --git a/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/authenticator/AndroidFxAccount.java b/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/authenticator/AndroidFxAccount.java
index 4562559afc44..8d2b8bd2cd4a 100644
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/authenticator/AndroidFxAccount.java
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/authenticator/AndroidFxAccount.java
@@ -29,6 +29,7 @@ import android.support.v4.content.LocalBroadcastManager;
 import android.text.TextUtils;
 import android.util.Log;
 
+import org.mozilla.gecko.AppConstants;
 import org.mozilla.gecko.background.common.GlobalConstants;
 import org.mozilla.gecko.background.common.log.Logger;
 import org.mozilla.gecko.background.fxa.FxAccountUtils;
@@ -708,7 +709,11 @@ public class AndroidFxAccount {
    * @param ignoreSettings whether we should check if syncing is allowed via in-app or system settings.
    */
   public void requestImmediateSync(String[] stagesToSync, String[] stagesToSkip, boolean ignoreSettings) {
-    FirefoxAccounts.requestImmediateSync(getAndroidAccount(), stagesToSync, stagesToSkip, ignoreSettings);
+    if (AppConstants.isTorBrowser()) {
+      return;
+    } else {
+      FirefoxAccounts.requestImmediateSync(getAndroidAccount(), stagesToSync, stagesToSkip, ignoreSettings);
+    }
   }
 
   /**
@@ -719,7 +724,11 @@ public class AndroidFxAccount {
    * @param stagesToSkip stage names to skip; can be null to skip <b>no</b> known stages.
    */
   public void requestEventualSync(String[] stagesToSync, String[] stagesToSkip) {
-    FirefoxAccounts.requestEventualSync(getAndroidAccount(), stagesToSync, stagesToSkip);
+    if (AppConstants.isTorBrowser()) {
+      return;
+    } else {
+      FirefoxAccounts.requestEventualSync(getAndroidAccount(), stagesToSync, stagesToSkip);
+    }
   }
 
   public synchronized void setState(State state) {





More information about the tbb-commits mailing list