summaryrefslogtreecommitdiffstats
path: root/sync/android
diff options
context:
space:
mode:
authorclamy@chromium.org <clamy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-15 17:47:08 +0000
committerclamy@chromium.org <clamy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-15 17:47:08 +0000
commit95523128a6a508287a87ffcfc74f221b1b29cbe2 (patch)
tree6df0a863a1c13570d86b37dcabe4aca0057d0080 /sync/android
parentc032919dcaf3f150973de1904259a8afc742c3c1 (diff)
downloadchromium_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.java20
-rw-r--r--sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java19
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);
+ }
}