diff options
author | clamy@chromium.org <clamy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-15 17:47:08 +0000 |
---|---|---|
committer | clamy@chromium.org <clamy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-15 17:47:08 +0000 |
commit | 95523128a6a508287a87ffcfc74f221b1b29cbe2 (patch) | |
tree | 6df0a863a1c13570d86b37dcabe4aca0057d0080 /sync/android | |
parent | c032919dcaf3f150973de1904259a8afc742c3c1 (diff) | |
download | chromium_src-95523128a6a508287a87ffcfc74f221b1b29cbe2.zip chromium_src-95523128a6a508287a87ffcfc74f221b1b29cbe2.tar.gz chromium_src-95523128a6a508287a87ffcfc74f221b1b29cbe2.tar.bz2 |
Add retry function to getNewAuthToken
Created a new method for the AccountManagerHelper in Android, that fetches a new
token asynchronously, and will retry on network failures.
BUG=165687
Review URL: https://chromiumcodereview.appspot.com/12207112
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182749 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sync/android')
-rw-r--r-- | sync/android/java/src/org/chromium/sync/notifier/InvalidationService.java | 20 | ||||
-rw-r--r-- | sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java | 19 |
2 files changed, 32 insertions, 7 deletions
diff --git a/sync/android/java/src/org/chromium/sync/notifier/InvalidationService.java b/sync/android/java/src/org/chromium/sync/notifier/InvalidationService.java index e7f1d82..b867e80 100644 --- a/sync/android/java/src/org/chromium/sync/notifier/InvalidationService.java +++ b/sync/android/java/src/org/chromium/sync/notifier/InvalidationService.java @@ -187,7 +187,8 @@ public class InvalidationService extends AndroidListener { } @Override - public void requestAuthToken(PendingIntent pendingIntent, @Nullable String invalidAuthToken) { + public void requestAuthToken(final PendingIntent pendingIntent, + @Nullable String invalidAuthToken) { @Nullable Account account = SyncStatusHelper.get(this).getSignedInUser(); if (account == null) { // This should never happen, because this code should only be run if a user is @@ -198,11 +199,18 @@ public class InvalidationService extends AndroidListener { // Attempt to retrieve a token for the user. This method will also invalidate // invalidAuthToken if it is non-null. - String authToken = AccountManagerHelper.get(this).getNewAuthToken(account, invalidAuthToken, - SyncStatusHelper.AUTH_TOKEN_TYPE_SYNC); - if (authToken != null) { - setAuthToken(this, pendingIntent, authToken, SyncStatusHelper.AUTH_TOKEN_TYPE_SYNC); - } + AccountManagerHelper.get(this).getNewAuthTokenFromForeground( + account, invalidAuthToken, SyncStatusHelper.AUTH_TOKEN_TYPE_SYNC, + new AccountManagerHelper.GetAuthTokenCallback() { + @Override + public void tokenAvailable(String token) { + if (token != null) { + InvalidationService.setAuthToken( + InvalidationService.this.getApplicationContext(), pendingIntent, + token, SyncStatusHelper.AUTH_TOKEN_TYPE_SYNC); + } + } + }); } @Override 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 9e39d8e..5c1ec826 100644 --- a/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java +++ b/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java @@ -36,7 +36,7 @@ public class AccountManagerHelper { private static final String TAG = "AccountManagerHelper"; - private static final String GOOGLE_ACCOUNT_TYPE = "com.google"; + public static final String GOOGLE_ACCOUNT_TYPE = "com.google"; private static final Object lock = new Object(); @@ -267,6 +267,7 @@ public class AccountManagerHelper { * - Assumes that the account is a valid account. * - Should not be called on the main thread. */ + @Deprecated public String getNewAuthToken(Account account, String authToken, String authTokenType) { // TODO(dsmyers): consider reimplementing using an AccountManager function with an // explicit timeout. @@ -286,4 +287,20 @@ public class AccountManagerHelper { } return null; } + + /** + * Invalidates the old token (if non-null/non-empty) and asynchronously generates a new one. + * + * - Assumes that the account is a valid account. + */ + public void getNewAuthTokenFromForeground(Account account, String authToken, + String authTokenType, GetAuthTokenCallback callback) { + if (authToken != null && !authToken.isEmpty()) { + mAccountManager.invalidateAuthToken(GOOGLE_ACCOUNT_TYPE, authToken); + } + AtomicInteger numTries = new AtomicInteger(0); + AtomicBoolean errorEncountered = new AtomicBoolean(false); + getAuthTokenAsynchronously( + account, authTokenType, callback, numTries, errorEncountered, null); + } } |