Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/sync/ProfileSyncService.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/ProfileSyncService.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/ProfileSyncService.java |
| index 7874dff69f02e25f669be4151ab65869aa158510..7502f100299b0fd7f02d95163716bac95674f611 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/ProfileSyncService.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/ProfileSyncService.java |
| @@ -5,6 +5,7 @@ |
| package org.chromium.chrome.browser.sync; |
| import android.accounts.Account; |
| +import android.accounts.AccountManager; |
|
nyquist
2013/03/25 21:01:21
Should not import this.
Patrick Dubroy
2013/03/25 21:15:49
Done.
|
| import android.content.Context; |
| import android.os.AsyncTask; |
| import android.util.Log; |
| @@ -89,6 +90,11 @@ public class ProfileSyncService { |
| mNativeProfileSyncServiceAndroid = nativeInit(); |
| } |
| + @CalledByNative |
| + private static int getProfileSyncServiceAndroid(Context context) { |
| + return get(context).mNativeProfileSyncServiceAndroid; |
| + } |
| + |
| /** |
| * If we are currently in the process of setting up sync, this method clears the |
| * sync setup in progress flag. |
| @@ -163,23 +169,29 @@ public class ProfileSyncService { |
| } |
| } |
| - /** |
| - * Requests a new auth token from the AccountManager. Invalidates the old token |
| - * if |invalidAuthToken| is not empty. |
| - */ |
| - @CalledByNative |
| - public void getNewAuthToken(final String username, final String invalidAuthToken) { |
| + private Account getAccountOrNullFromUsername(String username) { |
| if (username == null) { |
| Log.e(TAG, "username is null"); |
| - return; |
| + return null; |
| } |
| final AccountManagerHelper accountManagerHelper = AccountManagerHelper.get(mContext); |
| final Account account = accountManagerHelper.getAccountFromName(username); |
| if (account == null) { |
| Log.e(TAG, "Account not found for provided username."); |
| - return; |
| + return null; |
| } |
| + return account; |
| + } |
| + |
| + /** |
| + * Requests a new auth token from the AccountManager. Invalidates the old token |
| + * if |invalidAuthToken| is not empty. |
| + */ |
| + @CalledByNative |
| + public void getNewAuthToken(final String username, final String invalidAuthToken) { |
| + final Account account = getAccountOrNullFromUsername(username); |
| + if (account == null) return; |
| // Since this is blocking, do it in the background. |
| new AsyncTask<Void, Void, String>() { |
| @@ -187,15 +199,14 @@ public class ProfileSyncService { |
| @Override |
| public String doInBackground(Void... params) { |
| // Invalidate our old auth token and fetch a new one. |
| + AccountManagerHelper accountManagerHelper = AccountManagerHelper.get(mContext); |
| return accountManagerHelper.getNewAuthToken( |
| - account, invalidAuthToken, SyncStatusHelper.AUTH_TOKEN_TYPE_SYNC); |
| + account, invalidAuthToken, SyncStatusHelper.AUTH_TOKEN_TYPE_SYNC); |
| } |
| @Override |
| public void onPostExecute(String authToken) { |
| if (authToken == null) { |
| - // DO NOT COMMIT do we really need this TODO? We trigger a call to |
| - // requestSyncFromNativeChrome() when an account changes and sync is setup. |
| // TODO(sync): Need to hook LOGIN_ACCOUNTS_CHANGED_ACTION (http://b/5354713). |
| Log.d(TAG, "Auth token for sync was null."); |
| } else { |
| @@ -206,6 +217,48 @@ public class ProfileSyncService { |
| }.execute(); |
| } |
| + /** |
| + * Called by native to invalidate an OAuth2 token. |
| + */ |
| + @CalledByNative |
| + public void invalidateOAuth2AuthToken(String scope, String access_token) { |
|
nyquist
2013/03/25 21:01:21
camelCase
Patrick Dubroy
2013/03/25 21:15:49
Done.
|
| + AccountManager.get(mContext).invalidateAuthToken(scope, access_token); |
|
nyquist
2013/03/25 21:01:21
Do not use the AccountManager directly. Always go
Patrick Dubroy
2013/03/25 21:15:49
Done.
|
| + } |
| + |
| + /** |
| + * Called by native to retrieve OAuth2 tokens. |
| + * |
| + * @param username the native username (full address) |
| + * @param scope the scope to get an auth token for (without Android-style 'oauth2:' prefix). |
| + * @param oldAuthToken if provided, the token will be invalidated before getting a new token. |
| + * @param nativeCallback the pointer to the native callback that should be run upon completion. |
| + */ |
| + @CalledByNative |
| + public void getOAuth2AuthToken( |
| + String username, String scope, final int nativeCallback) { |
|
nyquist
2013/03/25 21:01:21
Nit: Does this fit on the line above?
Patrick Dubroy
2013/03/25 21:15:49
Done.
|
| + final Account account = getAccountOrNullFromUsername(username); |
| + if (account == null) { |
| + nativeOAuth2TokenFetched( |
| + mNativeProfileSyncServiceAndroid, nativeCallback, null, false); |
| + return; |
| + } |
| + final String oauth2Scope = "oauth2:" + scope; |
| + |
| + new AsyncTask<Void, Void, String>() { |
| + @Override |
| + public String doInBackground(Void... params) { |
| + AccountManagerHelper accountManagerHelper = AccountManagerHelper.get(mContext); |
| + return accountManagerHelper.getAuthTokenFromBackground(account, oauth2Scope); |
| + } |
| + |
| + @Override |
| + public void onPostExecute(String authToken) { |
| + nativeOAuth2TokenFetched( |
| + mNativeProfileSyncServiceAndroid, nativeCallback, authToken, authToken != null); |
| + } |
| + }.execute(); |
| + } |
| + |
| /** |
| * Checks if a password or a passphrase is required for decryption of sync data. |
| * <p/> |
| @@ -534,4 +587,7 @@ public class ProfileSyncService { |
| private native boolean nativeIsSessionSyncEnabled(int nativeProfileSyncServiceAndroid); |
| private native boolean nativeHasUnrecoverableError(int nativeProfileSyncServiceAndroid); |
| private native String nativeGetAboutInfoForTest(int nativeProfileSyncServiceAndroid); |
| + private native void nativeOAuth2TokenFetched( |
| + int nativeProfileSyncServiceAndroid, int nativeCallback, String authToken, |
| + boolean result); |
| } |