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

Side by Side Diff: chrome/browser/signin/oauth2_token_service_delegate_android.cc

Issue 2784353002: Android: Remove GetApplicationContext part 2 (Closed)
Patch Set: Fix tests Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/signin/oauth2_token_service_delegate_android.h" 5 #include "chrome/browser/signin/oauth2_token_service_delegate_android.h"
6 6
7 #include "base/android/context_utils.h"
8 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
9 #include "base/android/jni_array.h" 8 #include "base/android/jni_array.h"
10 #include "base/android/jni_string.h" 9 #include "base/android/jni_string.h"
11 #include "base/bind.h" 10 #include "base/bind.h"
12 #include "base/logging.h" 11 #include "base/logging.h"
13 #include "base/macros.h" 12 #include "base/macros.h"
14 #include "base/metrics/histogram_macros.h" 13 #include "base/metrics/histogram_macros.h"
15 #include "base/stl_util.h" 14 #include "base/stl_util.h"
16 #include "chrome/browser/profiles/profile_android.h" 15 #include "chrome/browser/profiles/profile_android.h"
17 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 16 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 ScopedJavaLocalRef<jstring> j_username = 87 ScopedJavaLocalRef<jstring> j_username =
89 ConvertUTF8ToJavaString(env, account_id_); 88 ConvertUTF8ToJavaString(env, account_id_);
90 ScopedJavaLocalRef<jstring> j_scope = ConvertUTF8ToJavaString(env, scope); 89 ScopedJavaLocalRef<jstring> j_scope = ConvertUTF8ToJavaString(env, scope);
91 std::unique_ptr<FetchOAuth2TokenCallback> heap_callback( 90 std::unique_ptr<FetchOAuth2TokenCallback> heap_callback(
92 new FetchOAuth2TokenCallback( 91 new FetchOAuth2TokenCallback(
93 base::Bind(&AndroidAccessTokenFetcher::OnAccessTokenResponse, 92 base::Bind(&AndroidAccessTokenFetcher::OnAccessTokenResponse,
94 weak_factory_.GetWeakPtr()))); 93 weak_factory_.GetWeakPtr())));
95 94
96 // Call into Java to get a new token. 95 // Call into Java to get a new token.
97 Java_OAuth2TokenService_getOAuth2AuthToken( 96 Java_OAuth2TokenService_getOAuth2AuthToken(
98 env, base::android::GetApplicationContext(), j_username, j_scope, 97 env, j_username, j_scope,
99 reinterpret_cast<intptr_t>(heap_callback.release())); 98 reinterpret_cast<intptr_t>(heap_callback.release()));
100 } 99 }
101 100
102 void AndroidAccessTokenFetcher::CancelRequest() { 101 void AndroidAccessTokenFetcher::CancelRequest() {
103 request_was_cancelled_ = true; 102 request_was_cancelled_ = true;
104 } 103 }
105 104
106 void AndroidAccessTokenFetcher::OnAccessTokenResponse( 105 void AndroidAccessTokenFetcher::OnAccessTokenResponse(
107 const GoogleServiceAuthError& error, 106 const GoogleServiceAuthError& error,
108 const std::string& access_token, 107 const std::string& access_token,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 : error(error) {} 144 : error(error) {}
146 145
147 OAuth2TokenServiceDelegateAndroid::OAuth2TokenServiceDelegateAndroid( 146 OAuth2TokenServiceDelegateAndroid::OAuth2TokenServiceDelegateAndroid(
148 AccountTrackerService* account_tracker_service) 147 AccountTrackerService* account_tracker_service)
149 : account_tracker_service_(account_tracker_service), 148 : account_tracker_service_(account_tracker_service),
150 fire_refresh_token_loaded_(RT_LOAD_NOT_START) { 149 fire_refresh_token_loaded_(RT_LOAD_NOT_START) {
151 DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::ctor"; 150 DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::ctor";
152 DCHECK(account_tracker_service_); 151 DCHECK(account_tracker_service_);
153 JNIEnv* env = AttachCurrentThread(); 152 JNIEnv* env = AttachCurrentThread();
154 base::android::ScopedJavaLocalRef<jobject> local_java_ref = 153 base::android::ScopedJavaLocalRef<jobject> local_java_ref =
155 Java_OAuth2TokenService_create(env, 154 Java_OAuth2TokenService_create(env, reinterpret_cast<intptr_t>(this));
156 base::android::GetApplicationContext(),
157 reinterpret_cast<intptr_t>(this));
158 java_ref_.Reset(env, local_java_ref.obj()); 155 java_ref_.Reset(env, local_java_ref.obj());
159 156
160 if (account_tracker_service_->GetMigrationState() == 157 if (account_tracker_service_->GetMigrationState() ==
161 AccountTrackerService::MIGRATION_IN_PROGRESS) { 158 AccountTrackerService::MIGRATION_IN_PROGRESS) {
162 std::vector<std::string> accounts = GetAccounts(); 159 std::vector<std::string> accounts = GetAccounts();
163 std::vector<std::string> accounts_id; 160 std::vector<std::string> accounts_id;
164 for (auto account_name : accounts) { 161 for (auto account_name : accounts) {
165 AccountInfo account_info = 162 AccountInfo account_info =
166 account_tracker_service_->FindAccountInfoByEmail(account_name); 163 account_tracker_service_->FindAccountInfoByEmail(account_name);
167 DCHECK(!account_info.gaia.empty()); 164 DCHECK(!account_info.gaia.empty());
168 accounts_id.push_back(account_info.gaia); 165 accounts_id.push_back(account_info.gaia);
169 } 166 }
170 ScopedJavaLocalRef<jobjectArray> java_accounts( 167 ScopedJavaLocalRef<jobjectArray> java_accounts(
171 base::android::ToJavaArrayOfStrings(env, accounts_id)); 168 base::android::ToJavaArrayOfStrings(env, accounts_id));
172 Java_OAuth2TokenService_saveStoredAccounts( 169 Java_OAuth2TokenService_saveStoredAccounts(env, java_accounts);
173 env, base::android::GetApplicationContext(), java_accounts);
174 } 170 }
175 171
176 if (!is_testing_profile_) { 172 if (!is_testing_profile_) {
177 Java_OAuth2TokenService_validateAccounts( 173 Java_OAuth2TokenService_validateAccounts(AttachCurrentThread(), java_ref_,
178 AttachCurrentThread(), java_ref_, 174 JNI_TRUE);
179 base::android::GetApplicationContext(), JNI_TRUE);
180 } 175 }
181 } 176 }
182 177
183 OAuth2TokenServiceDelegateAndroid::~OAuth2TokenServiceDelegateAndroid() { 178 OAuth2TokenServiceDelegateAndroid::~OAuth2TokenServiceDelegateAndroid() {
184 } 179 }
185 180
186 // static 181 // static
187 ScopedJavaLocalRef<jobject> OAuth2TokenServiceDelegateAndroid::GetForProfile( 182 ScopedJavaLocalRef<jobject> OAuth2TokenServiceDelegateAndroid::GetForProfile(
188 JNIEnv* env, 183 JNIEnv* env,
189 jclass clazz, 184 jclass clazz,
(...skipping 16 matching lines...) Expand all
206 201
207 bool OAuth2TokenServiceDelegateAndroid::RefreshTokenIsAvailable( 202 bool OAuth2TokenServiceDelegateAndroid::RefreshTokenIsAvailable(
208 const std::string& account_id) const { 203 const std::string& account_id) const {
209 DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::RefreshTokenIsAvailable" 204 DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::RefreshTokenIsAvailable"
210 << " account= " << account_id; 205 << " account= " << account_id;
211 std::string account_name = MapAccountIdToAccountName(account_id); 206 std::string account_name = MapAccountIdToAccountName(account_id);
212 JNIEnv* env = AttachCurrentThread(); 207 JNIEnv* env = AttachCurrentThread();
213 ScopedJavaLocalRef<jstring> j_account_id = 208 ScopedJavaLocalRef<jstring> j_account_id =
214 ConvertUTF8ToJavaString(env, account_name); 209 ConvertUTF8ToJavaString(env, account_name);
215 jboolean refresh_token_is_available = 210 jboolean refresh_token_is_available =
216 Java_OAuth2TokenService_hasOAuth2RefreshToken( 211 Java_OAuth2TokenService_hasOAuth2RefreshToken(env, j_account_id);
217 env, base::android::GetApplicationContext(), j_account_id);
218 return refresh_token_is_available == JNI_TRUE; 212 return refresh_token_is_available == JNI_TRUE;
219 } 213 }
220 214
221 bool OAuth2TokenServiceDelegateAndroid::RefreshTokenHasError( 215 bool OAuth2TokenServiceDelegateAndroid::RefreshTokenHasError(
222 const std::string& account_id) const { 216 const std::string& account_id) const {
223 auto it = errors_.find(account_id); 217 auto it = errors_.find(account_id);
224 // TODO(rogerta): should we distinguish between transient and persistent? 218 // TODO(rogerta): should we distinguish between transient and persistent?
225 return it == errors_.end() ? false : IsError(it->second.error); 219 return it == errors_.end() ? false : IsError(it->second.error);
226 } 220 }
227 221
228 void OAuth2TokenServiceDelegateAndroid::UpdateAuthError( 222 void OAuth2TokenServiceDelegateAndroid::UpdateAuthError(
229 const std::string& account_id, 223 const std::string& account_id,
230 const GoogleServiceAuthError& error) { 224 const GoogleServiceAuthError& error) {
231 DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::UpdateAuthError" 225 DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::UpdateAuthError"
232 << " account=" << account_id 226 << " account=" << account_id
233 << " error=" << error.ToString(); 227 << " error=" << error.ToString();
234 if (error.state() == GoogleServiceAuthError::NONE) { 228 if (error.state() == GoogleServiceAuthError::NONE) {
235 errors_.erase(account_id); 229 errors_.erase(account_id);
236 } else { 230 } else {
237 // TODO(rogerta): should we distinguish between transient and persistent? 231 // TODO(rogerta): should we distinguish between transient and persistent?
238 errors_[account_id] = ErrorInfo(error); 232 errors_[account_id] = ErrorInfo(error);
239 } 233 }
240 } 234 }
241 235
242 std::vector<std::string> OAuth2TokenServiceDelegateAndroid::GetAccounts() { 236 std::vector<std::string> OAuth2TokenServiceDelegateAndroid::GetAccounts() {
243 std::vector<std::string> accounts; 237 std::vector<std::string> accounts;
244 JNIEnv* env = AttachCurrentThread(); 238 JNIEnv* env = AttachCurrentThread();
245 ScopedJavaLocalRef<jobjectArray> j_accounts = 239 ScopedJavaLocalRef<jobjectArray> j_accounts =
246 Java_OAuth2TokenService_getAccounts( 240 Java_OAuth2TokenService_getAccounts(env);
247 env, base::android::GetApplicationContext());
248 // TODO(fgorski): We may decide to filter out some of the accounts. 241 // TODO(fgorski): We may decide to filter out some of the accounts.
249 base::android::AppendJavaStringArrayToStringVector(env, j_accounts.obj(), 242 base::android::AppendJavaStringArrayToStringVector(env, j_accounts.obj(),
250 &accounts); 243 &accounts);
251 return accounts; 244 return accounts;
252 } 245 }
253 246
254 std::vector<std::string> 247 std::vector<std::string>
255 OAuth2TokenServiceDelegateAndroid::GetSystemAccountNames() { 248 OAuth2TokenServiceDelegateAndroid::GetSystemAccountNames() {
256 std::vector<std::string> account_names; 249 std::vector<std::string> account_names;
257 JNIEnv* env = AttachCurrentThread(); 250 JNIEnv* env = AttachCurrentThread();
258 ScopedJavaLocalRef<jobjectArray> j_accounts = 251 ScopedJavaLocalRef<jobjectArray> j_accounts =
259 Java_OAuth2TokenService_getSystemAccountNames( 252 Java_OAuth2TokenService_getSystemAccountNames(env);
260 env, base::android::GetApplicationContext());
261 base::android::AppendJavaStringArrayToStringVector(env, j_accounts.obj(), 253 base::android::AppendJavaStringArrayToStringVector(env, j_accounts.obj(),
262 &account_names); 254 &account_names);
263 return account_names; 255 return account_names;
264 } 256 }
265 257
266 OAuth2AccessTokenFetcher* 258 OAuth2AccessTokenFetcher*
267 OAuth2TokenServiceDelegateAndroid::CreateAccessTokenFetcher( 259 OAuth2TokenServiceDelegateAndroid::CreateAccessTokenFetcher(
268 const std::string& account_id, 260 const std::string& account_id,
269 net::URLRequestContextGetter* getter, 261 net::URLRequestContextGetter* getter,
270 OAuth2AccessTokenConsumer* consumer) { 262 OAuth2AccessTokenConsumer* consumer) {
271 DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::CreateAccessTokenFetcher" 263 DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::CreateAccessTokenFetcher"
272 << " account= " << account_id; 264 << " account= " << account_id;
273 ValidateAccountId(account_id); 265 ValidateAccountId(account_id);
274 return new AndroidAccessTokenFetcher(consumer, 266 return new AndroidAccessTokenFetcher(consumer,
275 MapAccountIdToAccountName(account_id)); 267 MapAccountIdToAccountName(account_id));
276 } 268 }
277 269
278 void OAuth2TokenServiceDelegateAndroid::InvalidateAccessToken( 270 void OAuth2TokenServiceDelegateAndroid::InvalidateAccessToken(
279 const std::string& account_id, 271 const std::string& account_id,
280 const std::string& client_id, 272 const std::string& client_id,
281 const OAuth2TokenService::ScopeSet& scopes, 273 const OAuth2TokenService::ScopeSet& scopes,
282 const std::string& access_token) { 274 const std::string& access_token) {
283 ValidateAccountId(account_id); 275 ValidateAccountId(account_id);
284 JNIEnv* env = AttachCurrentThread(); 276 JNIEnv* env = AttachCurrentThread();
285 ScopedJavaLocalRef<jstring> j_access_token = 277 ScopedJavaLocalRef<jstring> j_access_token =
286 ConvertUTF8ToJavaString(env, access_token); 278 ConvertUTF8ToJavaString(env, access_token);
287 Java_OAuth2TokenService_invalidateOAuth2AuthToken( 279 Java_OAuth2TokenService_invalidateOAuth2AuthToken(env, j_access_token);
288 env, base::android::GetApplicationContext(), j_access_token);
289 } 280 }
290 281
291 void OAuth2TokenServiceDelegateAndroid::ValidateAccounts( 282 void OAuth2TokenServiceDelegateAndroid::ValidateAccounts(
292 JNIEnv* env, 283 JNIEnv* env,
293 const JavaParamRef<jobject>& obj, 284 const JavaParamRef<jobject>& obj,
294 const JavaParamRef<jstring>& j_current_acc, 285 const JavaParamRef<jstring>& j_current_acc,
295 jboolean j_force_notifications) { 286 jboolean j_force_notifications) {
296 std::string signed_in_account_name; 287 std::string signed_in_account_name;
297 DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::ValidateAccounts from java"; 288 DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::ValidateAccounts from java";
298 if (j_current_acc) 289 if (j_current_acc)
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 ScopedJavaLocalRef<jobjectArray> java_accounts; 330 ScopedJavaLocalRef<jobjectArray> java_accounts;
340 if (currently_signed_in) { 331 if (currently_signed_in) {
341 java_accounts = base::android::ToJavaArrayOfStrings(env, curr_ids); 332 java_accounts = base::android::ToJavaArrayOfStrings(env, curr_ids);
342 } else { 333 } else {
343 java_accounts = 334 java_accounts =
344 base::android::ToJavaArrayOfStrings(env, std::vector<std::string>()); 335 base::android::ToJavaArrayOfStrings(env, std::vector<std::string>());
345 } 336 }
346 337
347 // Save the current accounts in the token service before calling 338 // Save the current accounts in the token service before calling
348 // FireRefreshToken* methods. 339 // FireRefreshToken* methods.
349 Java_OAuth2TokenService_saveStoredAccounts( 340 Java_OAuth2TokenService_saveStoredAccounts(env, java_accounts);
350 env, base::android::GetApplicationContext(), java_accounts);
351 341
352 for (const std::string& refreshed_id : refreshed_ids) 342 for (const std::string& refreshed_id : refreshed_ids)
353 FireRefreshTokenAvailable(refreshed_id); 343 FireRefreshTokenAvailable(refreshed_id);
354 for (const std::string& revoked_id : revoked_ids) 344 for (const std::string& revoked_id : revoked_ids)
355 FireRefreshTokenRevoked(revoked_id); 345 FireRefreshTokenRevoked(revoked_id);
356 if (fire_refresh_token_loaded_ == RT_WAIT_FOR_VALIDATION) { 346 if (fire_refresh_token_loaded_ == RT_WAIT_FOR_VALIDATION) {
357 fire_refresh_token_loaded_ = RT_LOADED; 347 fire_refresh_token_loaded_ = RT_LOADED;
358 FireRefreshTokensLoaded(); 348 FireRefreshTokensLoaded();
359 } else if (fire_refresh_token_loaded_ == RT_LOAD_NOT_START) { 349 } else if (fire_refresh_token_loaded_ == RT_LOAD_NOT_START) {
360 fire_refresh_token_loaded_ = RT_HAS_BEEN_VALIDATED; 350 fire_refresh_token_loaded_ = RT_HAS_BEEN_VALIDATED;
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 void OAuth2TokenServiceDelegateAndroid::RevokeAllCredentials() { 495 void OAuth2TokenServiceDelegateAndroid::RevokeAllCredentials() {
506 DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::RevokeAllCredentials"; 496 DVLOG(1) << "OAuth2TokenServiceDelegateAndroid::RevokeAllCredentials";
507 ScopedBatchChange batch(this); 497 ScopedBatchChange batch(this);
508 std::vector<std::string> accounts_to_revoke = GetAccounts(); 498 std::vector<std::string> accounts_to_revoke = GetAccounts();
509 499
510 // Clear accounts in the token service before calling 500 // Clear accounts in the token service before calling
511 // |FireRefreshTokenRevoked|. 501 // |FireRefreshTokenRevoked|.
512 JNIEnv* env = AttachCurrentThread(); 502 JNIEnv* env = AttachCurrentThread();
513 ScopedJavaLocalRef<jobjectArray> java_accounts( 503 ScopedJavaLocalRef<jobjectArray> java_accounts(
514 base::android::ToJavaArrayOfStrings(env, std::vector<std::string>())); 504 base::android::ToJavaArrayOfStrings(env, std::vector<std::string>()));
515 Java_OAuth2TokenService_saveStoredAccounts( 505 Java_OAuth2TokenService_saveStoredAccounts(env, java_accounts);
516 env, base::android::GetApplicationContext(), java_accounts);
517 506
518 for (const std::string& account : accounts_to_revoke) 507 for (const std::string& account : accounts_to_revoke)
519 FireRefreshTokenRevoked(account); 508 FireRefreshTokenRevoked(account);
520 } 509 }
521 510
522 void OAuth2TokenServiceDelegateAndroid::LoadCredentials( 511 void OAuth2TokenServiceDelegateAndroid::LoadCredentials(
523 const std::string& primary_account_id) { 512 const std::string& primary_account_id) {
524 if (primary_account_id.empty()) { 513 if (primary_account_id.empty()) {
525 FireRefreshTokensLoaded(); 514 FireRefreshTokensLoaded();
526 return; 515 return;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 : isTransientError 556 : isTransientError
568 ? GoogleServiceAuthError::CONNECTION_FAILED 557 ? GoogleServiceAuthError::CONNECTION_FAILED
569 : GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); 558 : GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
570 heap_callback->Run(err, token, base::Time()); 559 heap_callback->Run(err, token, base::Time());
571 } 560 }
572 561
573 // static 562 // static
574 bool OAuth2TokenServiceDelegateAndroid::Register(JNIEnv* env) { 563 bool OAuth2TokenServiceDelegateAndroid::Register(JNIEnv* env) {
575 return RegisterNativesImpl(env); 564 return RegisterNativesImpl(env);
576 } 565 }
OLDNEW
« no previous file with comments | « chrome/browser/media/android/router/media_router_dialog_controller_android.cc ('k') | chrome/browser/speech/tts_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698