summaryrefslogtreecommitdiffstats
path: root/sync
diff options
context:
space:
mode:
authorbauerb <bauerb@chromium.org>2016-03-23 03:35:07 -0700
committerCommit bot <commit-bot@chromium.org>2016-03-23 10:36:41 +0000
commitc500ab5bb9c8b61fd0201309225456458d224f10 (patch)
tree4a2cdee4c49a218ffd287e5563bace1aa338f073 /sync
parent677cb2dc620458439bf754ead201b4756c53590d (diff)
downloadchromium_src-c500ab5bb9c8b61fd0201309225456458d224f10.zip
chromium_src-c500ab5bb9c8b61fd0201309225456458d224f10.tar.gz
chromium_src-c500ab5bb9c8b61fd0201309225456458d224f10.tar.bz2
Use GoogleAuthUtil.getTokenWithNotification() for getting Google auth tokens.
Showing a notification should be more user-friendly than immediately firing the recovery intent. BUG=547048 Review URL: https://codereview.chromium.org/1826523002 Cr-Commit-Position: refs/heads/master@{#382821}
Diffstat (limited to 'sync')
-rw-r--r--sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java22
-rw-r--r--sync/android/java/src/org/chromium/sync/signin/AuthException.java23
-rw-r--r--sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java19
3 files changed, 20 insertions, 44 deletions
diff --git a/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java b/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java
index aaea7aa..5543120 100644
--- a/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java
+++ b/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java
@@ -9,7 +9,6 @@ import android.Manifest;
import android.accounts.Account;
import android.accounts.AuthenticatorDescription;
import android.content.Context;
-import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Process;
@@ -299,7 +298,7 @@ public class AccountManagerHelper {
*/
public void getAuthToken(final Account account, final String authTokenType,
final GetAuthTokenCallback callback) {
- ConnectionRetry.runAuthTask(mApplicationContext, new AuthTask<String>() {
+ ConnectionRetry.runAuthTask(new AuthTask<String>() {
@Override
public String run() throws AuthException {
return mAccountManager.getAuthToken(account, authTokenType);
@@ -338,7 +337,7 @@ public class AccountManagerHelper {
if (authToken == null || authToken.isEmpty()) {
return;
}
- ConnectionRetry.runAuthTask(mApplicationContext, new AuthTask<Boolean>() {
+ ConnectionRetry.runAuthTask(new AuthTask<Boolean>() {
@Override
public Boolean run() throws AuthException {
mAccountManager.invalidateAuthToken(authToken);
@@ -374,17 +373,15 @@ public class AccountManagerHelper {
implements NetworkChangeNotifier.ConnectionTypeObserver {
private static final int MAX_TRIES = 3;
- private final Context mContext;
private final AuthTask<T> mAuthTask;
private final AtomicInteger mNumTries;
private final AtomicBoolean mIsTransientError;
- public static <T> void runAuthTask(Context context, AuthTask<T> authTask) {
- new ConnectionRetry<T>(context, authTask).attempt();
+ public static <T> void runAuthTask(AuthTask<T> authTask) {
+ new ConnectionRetry<T>(authTask).attempt();
}
- private ConnectionRetry(Context context, AuthTask<T> authTask) {
- mContext = context;
+ private ConnectionRetry(AuthTask<T> authTask) {
mAuthTask = authTask;
mNumTries = new AtomicInteger(0);
mIsTransientError = new AtomicBoolean(false);
@@ -405,15 +402,6 @@ public class AccountManagerHelper {
} catch (AuthException ex) {
Log.w(TAG, "Failed to perform auth task", ex);
mIsTransientError.set(ex.isTransientError());
-
- // TODO(547048): This will fire the intent indiscriminately. We should fix
- // this in the future to fire only once per user actionable intent to avoid
- // spamming the user.
- if (ex.getRecoveryIntent() != null) {
- Intent i = ex.getRecoveryIntent();
- i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- mContext.startActivity(i);
- }
}
return null;
}
diff --git a/sync/android/java/src/org/chromium/sync/signin/AuthException.java b/sync/android/java/src/org/chromium/sync/signin/AuthException.java
index 56e2ed1..a678b0c 100644
--- a/sync/android/java/src/org/chromium/sync/signin/AuthException.java
+++ b/sync/android/java/src/org/chromium/sync/signin/AuthException.java
@@ -4,43 +4,30 @@
package org.chromium.sync.signin;
-import android.content.Intent;
-
-/*
+/**
* AuthException abstracts away authenticator specific exceptions behind a single interface.
* It is used for passing information that is useful for better handling of errors.
*/
public class AuthException extends Exception {
private final boolean mIsTransientError;
- private final Intent mRecoveryIntent;
- /*
+ /**
* A simple constructor that stores all the error handling information and makes it available to
* the handler.
* @param isTransientError Whether the error is transient and we can retry.
- * @param recoveryIntent An intent that can be used to recover from this error.
* Thus, a user recoverable error is not transient, since it requires explicit user handling
* before retry.
*/
- public AuthException(boolean isTransientError, Intent recoveryIntent, Exception exception) {
+ public AuthException(boolean isTransientError, Exception exception) {
super(exception);
- assert !isTransientError || recoveryIntent == null;
+ assert !isTransientError;
mIsTransientError = isTransientError;
- mRecoveryIntent = recoveryIntent;
}
- /*
+ /**
* @return Whether the error is transient and we can retry.
*/
public boolean isTransientError() {
return mIsTransientError;
}
-
- /*
- * @return An intent that can be used to recover from this error if it is recoverabale by user
- * intervention, else {@code null}.
- */
- public Intent getRecoveryIntent() {
- return mRecoveryIntent;
- }
}
diff --git a/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java b/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java
index f291ef58..bc9630c 100644
--- a/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java
+++ b/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java
@@ -18,7 +18,6 @@ import android.os.SystemClock;
import com.google.android.gms.auth.GoogleAuthException;
import com.google.android.gms.auth.GoogleAuthUtil;
import com.google.android.gms.auth.GooglePlayServicesAvailabilityException;
-import com.google.android.gms.auth.UserRecoverableAuthException;
import org.chromium.base.Callback;
import org.chromium.base.Log;
@@ -78,13 +77,15 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate {
assert !ThreadUtils.runningOnUiThread();
assert AccountManagerHelper.GOOGLE_ACCOUNT_TYPE.equals(account.type);
try {
- return GoogleAuthUtil.getToken(mApplicationContext, account, authTokenScope);
- } catch (UserRecoverableAuthException ex) {
- throw new AuthException(false /* isTransientError */, ex.getIntent(), ex);
+ return GoogleAuthUtil.getTokenWithNotification(mApplicationContext, account,
+ authTokenScope, null);
} catch (GoogleAuthException ex) {
- throw new AuthException(false /* isTransientError */, null, ex);
+ // This case includes a UserRecoverableNotifiedException, but most clients will have
+ // their own retry mechanism anyway.
+ // TODO(bauerb): Investigate integrating the callback with ConnectionRetry.
+ throw new AuthException(false /* isTransientError */, ex);
} catch (IOException ex) {
- throw new AuthException(true /* isTransientError */, null, ex);
+ throw new AuthException(true /* isTransientError */, ex);
}
}
@@ -93,11 +94,11 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate {
try {
GoogleAuthUtil.clearToken(mApplicationContext, authToken);
} catch (GooglePlayServicesAvailabilityException ex) {
- throw new AuthException(false /* isTransientError */, null, ex);
+ throw new AuthException(false /* isTransientError */, ex);
} catch (GoogleAuthException ex) {
- throw new AuthException(false /* isTransientError */, null, ex);
+ throw new AuthException(false /* isTransientError */, ex);
} catch (IOException ex) {
- throw new AuthException(true /* isTransientError */, null, ex);
+ throw new AuthException(true /* isTransientError */, ex);
}
}