diff options
author | maybelle <maybelle@chromium.org> | 2016-01-26 06:12:39 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-26 14:13:41 +0000 |
commit | 6e7bc97a308959c65f768f10f95bc4700fb3d426 (patch) | |
tree | 9205e33b92869e1999b056fc0f7514f7c7e2f46d /sync | |
parent | 4208a052792bde3b964aa443201ee6c66906f423 (diff) | |
download | chromium_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.java | 31 |
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; } |