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

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

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