Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3252)

Unified Diff: chrome/browser/signin/oauth2_token_service_delegate_android.cc

Issue 1256283002: GAIA ID migration for Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: full version Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/signin/oauth2_token_service_delegate_android.cc
diff --git a/chrome/browser/signin/oauth2_token_service_delegate_android.cc b/chrome/browser/signin/oauth2_token_service_delegate_android.cc
index 8bd13bcd5224c6f838b5e26aedb4bc5d4474f0aa..028512510aabcc88f44223060902fd77c282e2fe 100644
--- a/chrome/browser/signin/oauth2_token_service_delegate_android.cc
+++ b/chrome/browser/signin/oauth2_token_service_delegate_android.cc
@@ -138,12 +138,38 @@ OAuth2TokenServiceDelegateAndroid::ErrorInfo::ErrorInfo(
const GoogleServiceAuthError& error)
: error(error) {}
-OAuth2TokenServiceDelegateAndroid::OAuth2TokenServiceDelegateAndroid() {
+OAuth2TokenServiceDelegateAndroid::OAuth2TokenServiceDelegateAndroid(
+ AccountTrackerService* account_tracker_service)
+ : account_tracker_service_(account_tracker_service),
+ fire_refresh_token_loaded_(RT_LOAD_NOT_START) {
DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::ctor";
+ DCHECK(account_tracker_service_);
JNIEnv* env = AttachCurrentThread();
base::android::ScopedJavaLocalRef<jobject> local_java_ref =
Java_OAuth2TokenService_create(env, reinterpret_cast<intptr_t>(this));
java_ref_.Reset(env, local_java_ref.obj());
+
+ if (account_tracker_service_->GetMigrationState() ==
+ AccountTrackerService::MIGRATION_IN_PROGRESS) {
+ std::vector<std::string> accounts = GetAccounts();
+ std::vector<std::string> accounts_id;
+ for (auto account_name : accounts) {
+ AccountTrackerService::AccountInfo account_info =
+ account_tracker_service_->FindAccountInfoByEmail(account_name);
+ DCHECK(!account_info.gaia.empty());
+ accounts_id.push_back(account_info.gaia);
+ }
+ ScopedJavaLocalRef<jobjectArray> java_accounts(
+ base::android::ToJavaArrayOfStrings(env, accounts_id));
+ Java_OAuth2TokenService_saveStoredAccounts(
+ env, base::android::GetApplicationContext(), java_accounts.obj());
+ }
+
+ if (!is_testing_profile_) {
+ Java_OAuth2TokenService_validateAccounts(
+ AttachCurrentThread(), java_ref_.obj(),
+ base::android::GetApplicationContext(), JNI_TRUE);
+ }
}
OAuth2TokenServiceDelegateAndroid::~OAuth2TokenServiceDelegateAndroid() {
@@ -169,20 +195,12 @@ static jobject GetForProfile(JNIEnv* env,
j_profile_android);
}
-void OAuth2TokenServiceDelegateAndroid::Initialize() {
- DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::Initialize";
- if (!is_testing_profile_) {
- Java_OAuth2TokenService_validateAccounts(
- AttachCurrentThread(), java_ref_.obj(),
- base::android::GetApplicationContext(), JNI_TRUE);
- }
-}
-
bool OAuth2TokenServiceDelegateAndroid::RefreshTokenIsAvailable(
const std::string& account_id) const {
+ std::string account_name = MapAccountIdToAccountName(account_id);
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jstring> j_account_id =
- ConvertUTF8ToJavaString(env, account_id);
+ ConvertUTF8ToJavaString(env, account_name);
jboolean refresh_token_is_available =
Java_OAuth2TokenService_hasOAuth2RefreshToken(
env, base::android::GetApplicationContext(), j_account_id.obj());
@@ -220,15 +238,15 @@ std::vector<std::string> OAuth2TokenServiceDelegateAndroid::GetAccounts() {
}
std::vector<std::string>
-OAuth2TokenServiceDelegateAndroid::GetSystemAccounts() {
- std::vector<std::string> accounts;
+OAuth2TokenServiceDelegateAndroid::GetSystemAccountNames() {
+ std::vector<std::string> account_names;
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jobjectArray> j_accounts =
- Java_OAuth2TokenService_getSystemAccounts(
+ Java_OAuth2TokenService_getSystemAccountNames(
env, base::android::GetApplicationContext());
base::android::AppendJavaStringArrayToStringVector(env, j_accounts.obj(),
- &accounts);
- return accounts;
+ &account_names);
+ return account_names;
}
OAuth2AccessTokenFetcher*
@@ -237,7 +255,8 @@ OAuth2TokenServiceDelegateAndroid::CreateAccessTokenFetcher(
net::URLRequestContextGetter* getter,
OAuth2AccessTokenConsumer* consumer) {
ValidateAccountId(account_id);
- return new AndroidAccessTokenFetcher(consumer, account_id);
+ return new AndroidAccessTokenFetcher(consumer,
+ MapAccountIdToAccountName(account_id));
}
void OAuth2TokenServiceDelegateAndroid::InvalidateAccessToken(
@@ -264,20 +283,21 @@ void OAuth2TokenServiceDelegateAndroid::ValidateAccounts(
signed_in_account = ConvertJavaStringToUTF8(env, j_current_acc);
if (!signed_in_account.empty())
signed_in_account = gaia::CanonicalizeEmail(signed_in_account);
- ValidateAccounts(signed_in_account, j_force_notifications != JNI_FALSE);
+ ValidateAccounts(MapAccountNameToAccountId(signed_in_account),
+ j_force_notifications != JNI_FALSE);
}
void OAuth2TokenServiceDelegateAndroid::ValidateAccounts(
const std::string& signed_in_account,
bool force_notifications) {
std::vector<std::string> prev_ids = GetAccounts();
- std::vector<std::string> curr_ids = GetSystemAccounts();
+ std::vector<std::string> curr_ids = GetSystemAccountNames();
std::vector<std::string> refreshed_ids;
std::vector<std::string> revoked_ids;
- // Canonicalize system accounts. |prev_ids| is already done.
for (size_t i = 0; i < curr_ids.size(); ++i)
- curr_ids[i] = gaia::CanonicalizeEmail(curr_ids[i]);
+ curr_ids[i] = MapAccountNameToAccountId(curr_ids[i]);
+
for (size_t i = 0; i < prev_ids.size(); ++i)
ValidateAccountId(prev_ids[i]);
@@ -308,6 +328,13 @@ void OAuth2TokenServiceDelegateAndroid::ValidateAccounts(
it != revoked_ids.end(); it++) {
FireRefreshTokenRevoked(*it);
}
+
+ if (fire_refresh_token_loaded_ == RT_WAIT_FOR_VALIDATION) {
+ fire_refresh_token_loaded_ = RT_LOADED;
+ FireRefreshTokensLoaded();
+ } else if (fire_refresh_token_loaded_ == RT_LOAD_NOT_START) {
+ fire_refresh_token_loaded_ = RT_HAS_BEEN_VALIDATED;
+ }
}
bool OAuth2TokenServiceDelegateAndroid::ValidateAccounts(
@@ -451,6 +478,32 @@ void OAuth2TokenServiceDelegateAndroid::RevokeAllCredentials() {
env, base::android::GetApplicationContext(), java_accounts.obj());
}
+void OAuth2TokenServiceDelegateAndroid::LoadCredentials(
+ const std::string& primary_account_id) {
+ if (fire_refresh_token_loaded_ == RT_HAS_BEEN_VALIDATED) {
+ fire_refresh_token_loaded_ = RT_LOADED;
+ FireRefreshTokensLoaded();
+ } else if (fire_refresh_token_loaded_ == RT_LOAD_NOT_START) {
+ fire_refresh_token_loaded_ = RT_WAIT_FOR_VALIDATION;
+ }
+}
+
+std::string OAuth2TokenServiceDelegateAndroid::MapAccountIdToAccountName(
+ const std::string& account_id) const {
+ std::string account_name =
+ account_tracker_service_->GetAccountInfo(account_id).email;
+ DCHECK(!account_name.empty() || account_id.empty());
+ return account_name;
+}
+
+std::string OAuth2TokenServiceDelegateAndroid::MapAccountNameToAccountId(
+ const std::string& account_name) const {
+ std::string account_id =
+ account_tracker_service_->FindAccountInfoByEmail(account_name).account_id;
+ DCHECK(!account_id.empty() || account_name.empty());
+ return account_id;
+}
+
// Called from Java when fetching of an OAuth2 token is finished. The
// |authToken| param is only valid when |result| is true.
void OAuth2TokenFetched(JNIEnv* env,

Powered by Google App Engine
This is Rietveld 408576698