summaryrefslogtreecommitdiffstats
path: root/sync
diff options
context:
space:
mode:
authormaybelle <maybelle@chromium.org>2016-01-26 06:12:39 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-26 14:13:41 +0000
commit6e7bc97a308959c65f768f10f95bc4700fb3d426 (patch)
tree9205e33b92869e1999b056fc0f7514f7c7e2f46d /sync
parent4208a052792bde3b964aa443201ee6c66906f423 (diff)
downloadchromium_src-6e7bc97a308959c65f768f10f95bc4700fb3d426.zip
chromium_src-6e7bc97a308959c65f768f10f95bc4700fb3d426.tar.gz
chromium_src-6e7bc97a308959c65f768f10f95bc4700fb3d426.tar.bz2
In case of an AuthException, start the recovery intent if it exists. This is a temporary fix to unblock devs while we work towards the real solution.
BUG=547048 Review URL: https://codereview.chromium.org/1630673002 Cr-Commit-Position: refs/heads/master@{#371505}
Diffstat (limited to 'sync')
-rw-r--r--sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java31
1 files changed, 24 insertions, 7 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 7e8e205..aaea7aa 100644
--- a/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java
+++ b/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java
@@ -9,6 +9,7 @@ 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;
@@ -298,13 +299,16 @@ public class AccountManagerHelper {
*/
public void getAuthToken(final Account account, final String authTokenType,
final GetAuthTokenCallback callback) {
- ConnectionRetry.runAuthTask(new AuthTask<String>() {
+ ConnectionRetry.runAuthTask(mApplicationContext, new AuthTask<String>() {
+ @Override
public String run() throws AuthException {
return mAccountManager.getAuthToken(account, authTokenType);
}
+ @Override
public void onSuccess(String token) {
callback.tokenAvailable(token);
}
+ @Override
public void onFailure(boolean isTransientError) {
callback.tokenUnavailable(isTransientError);
}
@@ -334,12 +338,15 @@ public class AccountManagerHelper {
if (authToken == null || authToken.isEmpty()) {
return;
}
- ConnectionRetry.runAuthTask(new AuthTask<Boolean>() {
+ ConnectionRetry.runAuthTask(mApplicationContext, new AuthTask<Boolean>() {
+ @Override
public Boolean run() throws AuthException {
mAccountManager.invalidateAuthToken(authToken);
return true;
}
+ @Override
public void onSuccess(Boolean result) {}
+ @Override
public void onFailure(boolean isTransientError) {
Log.e(TAG, "Failed to invalidate auth token: " + authToken);
}
@@ -367,15 +374,17 @@ 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(AuthTask<T> authTask) {
- new ConnectionRetry<T>(authTask).attempt();
+ public static <T> void runAuthTask(Context context, AuthTask<T> authTask) {
+ new ConnectionRetry<T>(context, authTask).attempt();
}
- private ConnectionRetry(AuthTask<T> authTask) {
+ private ConnectionRetry(Context context, AuthTask<T> authTask) {
+ mContext = context;
mAuthTask = authTask;
mNumTries = new AtomicInteger(0);
mIsTransientError = new AtomicBoolean(false);
@@ -394,9 +403,17 @@ public class AccountManagerHelper {
try {
return mAuthTask.run();
} catch (AuthException ex) {
- // TODO(547048): Handle the recovery intent if it is present.
- Log.e(TAG, "Failed to perform auth task", 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;
}