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

Side by Side Diff: chrome/browser/extensions/api/identity/identity_api.cc

Issue 178193030: Rename ProfileKeyedAPI to BrowserContextKeyedAPI and GetProfile to Get. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nits Created 6 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/extensions/api/identity/identity_api.h" 5 #include "chrome/browser/extensions/api/identity/identity_api.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 void IdentityGetAuthTokenFunction::CompleteFunctionWithError( 155 void IdentityGetAuthTokenFunction::CompleteFunctionWithError(
156 const std::string& error) { 156 const std::string& error) {
157 error_ = error; 157 error_ = error;
158 SendResponse(false); 158 SendResponse(false);
159 Release(); // Balanced in RunImpl. 159 Release(); // Balanced in RunImpl.
160 } 160 }
161 161
162 void IdentityGetAuthTokenFunction::StartSigninFlow() { 162 void IdentityGetAuthTokenFunction::StartSigninFlow() {
163 // All cached tokens are invalid because the user is not signed in. 163 // All cached tokens are invalid because the user is not signed in.
164 IdentityAPI* id_api = 164 IdentityAPI* id_api =
165 extensions::IdentityAPI::GetFactoryInstance()->GetForProfile( 165 extensions::IdentityAPI::GetFactoryInstance()->Get(GetProfile());
166 GetProfile());
167 id_api->EraseAllCachedTokens(); 166 id_api->EraseAllCachedTokens();
168 // Display a login prompt. If the subsequent mint fails, don't display the 167 // Display a login prompt. If the subsequent mint fails, don't display the
169 // login prompt again. 168 // login prompt again.
170 should_prompt_for_signin_ = false; 169 should_prompt_for_signin_ = false;
171 ShowLoginPopup(); 170 ShowLoginPopup();
172 } 171 }
173 172
174 void IdentityGetAuthTokenFunction::StartMintTokenFlow( 173 void IdentityGetAuthTokenFunction::StartMintTokenFlow(
175 IdentityMintRequestQueue::MintType type) { 174 IdentityMintRequestQueue::MintType type) {
176 mint_token_flow_type_ = type; 175 mint_token_flow_type_ = type;
177 176
178 // Flows are serialized to prevent excessive traffic to GAIA, and 177 // Flows are serialized to prevent excessive traffic to GAIA, and
179 // to consolidate UI pop-ups. 178 // to consolidate UI pop-ups.
180 IdentityAPI* id_api = 179 IdentityAPI* id_api =
181 extensions::IdentityAPI::GetFactoryInstance()->GetForProfile( 180 extensions::IdentityAPI::GetFactoryInstance()->Get(GetProfile());
182 GetProfile());
183 181
184 if (!should_prompt_for_scopes_) { 182 if (!should_prompt_for_scopes_) {
185 // Caller requested no interaction. 183 // Caller requested no interaction.
186 184
187 if (type == IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE) { 185 if (type == IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE) {
188 // GAIA told us to do a consent UI. 186 // GAIA told us to do a consent UI.
189 CompleteFunctionWithError(identity_constants::kNoGrant); 187 CompleteFunctionWithError(identity_constants::kNoGrant);
190 return; 188 return;
191 } 189 }
192 if (!id_api->mint_queue()->empty( 190 if (!id_api->mint_queue()->empty(
193 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE, *token_key_)) { 191 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE, *token_key_)) {
194 // Another call is going through a consent UI. 192 // Another call is going through a consent UI.
195 CompleteFunctionWithError(identity_constants::kNoGrant); 193 CompleteFunctionWithError(identity_constants::kNoGrant);
196 return; 194 return;
197 } 195 }
198 } 196 }
199 id_api->mint_queue()->RequestStart(type, *token_key_, this); 197 id_api->mint_queue()->RequestStart(type, *token_key_, this);
200 } 198 }
201 199
202 void IdentityGetAuthTokenFunction::CompleteMintTokenFlow() { 200 void IdentityGetAuthTokenFunction::CompleteMintTokenFlow() {
203 IdentityMintRequestQueue::MintType type = mint_token_flow_type_; 201 IdentityMintRequestQueue::MintType type = mint_token_flow_type_;
204 202
205 const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(GetExtension()); 203 const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(GetExtension());
206 std::set<std::string> scopes(oauth2_info.scopes.begin(), 204 std::set<std::string> scopes(oauth2_info.scopes.begin(),
207 oauth2_info.scopes.end()); 205 oauth2_info.scopes.end());
208 206
209 extensions::IdentityAPI::GetFactoryInstance() 207 extensions::IdentityAPI::GetFactoryInstance()
210 ->GetForProfile(GetProfile()) 208 ->Get(GetProfile())
211 ->mint_queue() 209 ->mint_queue()
212 ->RequestComplete(type, *token_key_, this); 210 ->RequestComplete(type, *token_key_, this);
213 } 211 }
214 212
215 void IdentityGetAuthTokenFunction::StartMintToken( 213 void IdentityGetAuthTokenFunction::StartMintToken(
216 IdentityMintRequestQueue::MintType type) { 214 IdentityMintRequestQueue::MintType type) {
217 const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(GetExtension()); 215 const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(GetExtension());
218 IdentityAPI* id_api = 216 IdentityAPI* id_api = IdentityAPI::GetFactoryInstance()->Get(GetProfile());
219 IdentityAPI::GetFactoryInstance()->GetForProfile(GetProfile());
220 IdentityTokenCacheValue cache_entry = id_api->GetCachedToken(*token_key_); 217 IdentityTokenCacheValue cache_entry = id_api->GetCachedToken(*token_key_);
221 IdentityTokenCacheValue::CacheValueStatus cache_status = 218 IdentityTokenCacheValue::CacheValueStatus cache_status =
222 cache_entry.status(); 219 cache_entry.status();
223 220
224 if (type == IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE) { 221 if (type == IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE) {
225 switch (cache_status) { 222 switch (cache_status) {
226 case IdentityTokenCacheValue::CACHE_STATUS_NOTFOUND: 223 case IdentityTokenCacheValue::CACHE_STATUS_NOTFOUND:
227 #if defined(OS_CHROMEOS) 224 #if defined(OS_CHROMEOS)
228 // Always force minting token for ChromeOS kiosk app. 225 // Always force minting token for ChromeOS kiosk app.
229 if (chromeos::UserManager::Get()->IsLoggedInAsKioskApp()) { 226 if (chromeos::UserManager::Get()->IsLoggedInAsKioskApp()) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 } else { 268 } else {
272 ShowOAuthApprovalDialog(issue_advice_); 269 ShowOAuthApprovalDialog(issue_advice_);
273 } 270 }
274 } 271 }
275 } 272 }
276 273
277 void IdentityGetAuthTokenFunction::OnMintTokenSuccess( 274 void IdentityGetAuthTokenFunction::OnMintTokenSuccess(
278 const std::string& access_token, int time_to_live) { 275 const std::string& access_token, int time_to_live) {
279 IdentityTokenCacheValue token(access_token, 276 IdentityTokenCacheValue token(access_token,
280 base::TimeDelta::FromSeconds(time_to_live)); 277 base::TimeDelta::FromSeconds(time_to_live));
281 IdentityAPI::GetFactoryInstance() 278 IdentityAPI::GetFactoryInstance()->Get(GetProfile())->SetCachedToken(
282 ->GetForProfile(GetProfile()) 279 *token_key_, token);
283 ->SetCachedToken(*token_key_, token);
284 280
285 CompleteMintTokenFlow(); 281 CompleteMintTokenFlow();
286 CompleteFunctionWithResult(access_token); 282 CompleteFunctionWithResult(access_token);
287 } 283 }
288 284
289 void IdentityGetAuthTokenFunction::OnMintTokenFailure( 285 void IdentityGetAuthTokenFunction::OnMintTokenFailure(
290 const GoogleServiceAuthError& error) { 286 const GoogleServiceAuthError& error) {
291 CompleteMintTokenFlow(); 287 CompleteMintTokenFlow();
292 288
293 switch (error.state()) { 289 switch (error.state()) {
294 case GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS: 290 case GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS:
295 case GoogleServiceAuthError::ACCOUNT_DELETED: 291 case GoogleServiceAuthError::ACCOUNT_DELETED:
296 case GoogleServiceAuthError::ACCOUNT_DISABLED: 292 case GoogleServiceAuthError::ACCOUNT_DISABLED:
297 extensions::IdentityAPI::GetFactoryInstance() 293 extensions::IdentityAPI::GetFactoryInstance()
298 ->GetForProfile(GetProfile()) 294 ->Get(GetProfile())
299 ->ReportAuthError(error); 295 ->ReportAuthError(error);
300 if (should_prompt_for_signin_) { 296 if (should_prompt_for_signin_) {
301 // Display a login prompt and try again (once). 297 // Display a login prompt and try again (once).
302 StartSigninFlow(); 298 StartSigninFlow();
303 return; 299 return;
304 } 300 }
305 break; 301 break;
306 default: 302 default:
307 // Return error to caller. 303 // Return error to caller.
308 break; 304 break;
309 } 305 }
310 306
311 CompleteFunctionWithError( 307 CompleteFunctionWithError(
312 std::string(identity_constants::kAuthFailure) + error.ToString()); 308 std::string(identity_constants::kAuthFailure) + error.ToString());
313 } 309 }
314 310
315 void IdentityGetAuthTokenFunction::OnIssueAdviceSuccess( 311 void IdentityGetAuthTokenFunction::OnIssueAdviceSuccess(
316 const IssueAdviceInfo& issue_advice) { 312 const IssueAdviceInfo& issue_advice) {
317 IdentityAPI::GetFactoryInstance() 313 IdentityAPI::GetFactoryInstance()->Get(GetProfile())->SetCachedToken(
318 ->GetForProfile(GetProfile()) 314 *token_key_, IdentityTokenCacheValue(issue_advice));
319 ->SetCachedToken(*token_key_,
320 IdentityTokenCacheValue(issue_advice));
321 CompleteMintTokenFlow(); 315 CompleteMintTokenFlow();
322 316
323 should_prompt_for_signin_ = false; 317 should_prompt_for_signin_ = false;
324 // Existing grant was revoked and we used NO_FORCE, so we got info back 318 // Existing grant was revoked and we used NO_FORCE, so we got info back
325 // instead. Start a consent UI if we can. 319 // instead. Start a consent UI if we can.
326 issue_advice_ = issue_advice; 320 issue_advice_ = issue_advice;
327 StartMintTokenFlow(IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE); 321 StartMintTokenFlow(IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE);
328 } 322 }
329 323
330 void IdentityGetAuthTokenFunction::SigninSuccess() { 324 void IdentityGetAuthTokenFunction::SigninSuccess() {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 } 368 }
375 369
376 void IdentityGetAuthTokenFunction::OnGaiaFlowCompleted( 370 void IdentityGetAuthTokenFunction::OnGaiaFlowCompleted(
377 const std::string& access_token, 371 const std::string& access_token,
378 const std::string& expiration) { 372 const std::string& expiration) {
379 373
380 int time_to_live; 374 int time_to_live;
381 if (!expiration.empty() && base::StringToInt(expiration, &time_to_live)) { 375 if (!expiration.empty() && base::StringToInt(expiration, &time_to_live)) {
382 IdentityTokenCacheValue token_value( 376 IdentityTokenCacheValue token_value(
383 access_token, base::TimeDelta::FromSeconds(time_to_live)); 377 access_token, base::TimeDelta::FromSeconds(time_to_live));
384 IdentityAPI::GetFactoryInstance() 378 IdentityAPI::GetFactoryInstance()->Get(GetProfile())->SetCachedToken(
385 ->GetForProfile(GetProfile()) 379 *token_key_, token_value);
386 ->SetCachedToken(*token_key_, token_value);
387 } 380 }
388 381
389 CompleteMintTokenFlow(); 382 CompleteMintTokenFlow();
390 CompleteFunctionWithResult(access_token); 383 CompleteFunctionWithResult(access_token);
391 } 384 }
392 385
393 void IdentityGetAuthTokenFunction::OnGetTokenSuccess( 386 void IdentityGetAuthTokenFunction::OnGetTokenSuccess(
394 const OAuth2TokenService::Request* request, 387 const OAuth2TokenService::Request* request,
395 const std::string& access_token, 388 const std::string& access_token,
396 const base::Time& expiration_time) { 389 const base::Time& expiration_time) {
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 517
525 bool IdentityRemoveCachedAuthTokenFunction::RunImpl() { 518 bool IdentityRemoveCachedAuthTokenFunction::RunImpl() {
526 if (GetProfile()->IsOffTheRecord()) { 519 if (GetProfile()->IsOffTheRecord()) {
527 error_ = identity_constants::kOffTheRecord; 520 error_ = identity_constants::kOffTheRecord;
528 return false; 521 return false;
529 } 522 }
530 523
531 scoped_ptr<identity::RemoveCachedAuthToken::Params> params( 524 scoped_ptr<identity::RemoveCachedAuthToken::Params> params(
532 identity::RemoveCachedAuthToken::Params::Create(*args_)); 525 identity::RemoveCachedAuthToken::Params::Create(*args_));
533 EXTENSION_FUNCTION_VALIDATE(params.get()); 526 EXTENSION_FUNCTION_VALIDATE(params.get());
534 IdentityAPI::GetFactoryInstance() 527 IdentityAPI::GetFactoryInstance()->Get(GetProfile())->EraseCachedToken(
535 ->GetForProfile(GetProfile()) 528 GetExtension()->id(), params->details.token);
536 ->EraseCachedToken(GetExtension()->id(), params->details.token);
537 return true; 529 return true;
538 } 530 }
539 531
540 IdentityLaunchWebAuthFlowFunction::IdentityLaunchWebAuthFlowFunction() {} 532 IdentityLaunchWebAuthFlowFunction::IdentityLaunchWebAuthFlowFunction() {}
541 533
542 IdentityLaunchWebAuthFlowFunction::~IdentityLaunchWebAuthFlowFunction() { 534 IdentityLaunchWebAuthFlowFunction::~IdentityLaunchWebAuthFlowFunction() {
543 if (auth_flow_) 535 if (auth_flow_)
544 auth_flow_.release()->DetachDelegateAndDelete(); 536 auth_flow_.release()->DetachDelegateAndDelete();
545 } 537 }
546 538
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 713
722 GoogleServiceAuthError IdentityAPI::GetAuthStatusForTest() const { 714 GoogleServiceAuthError IdentityAPI::GetAuthStatusForTest() const {
723 return account_tracker_.GetAuthStatus(); 715 return account_tracker_.GetAuthStatus();
724 } 716 }
725 717
726 void IdentityAPI::Shutdown() { 718 void IdentityAPI::Shutdown() {
727 account_tracker_.RemoveObserver(this); 719 account_tracker_.RemoveObserver(this);
728 account_tracker_.Shutdown(); 720 account_tracker_.Shutdown();
729 } 721 }
730 722
731 static base::LazyInstance<ProfileKeyedAPIFactory<IdentityAPI> > 723 static base::LazyInstance<BrowserContextKeyedAPIFactory<IdentityAPI> >
732 g_factory = LAZY_INSTANCE_INITIALIZER; 724 g_factory = LAZY_INSTANCE_INITIALIZER;
733 725
734 // static 726 // static
735 ProfileKeyedAPIFactory<IdentityAPI>* IdentityAPI::GetFactoryInstance() { 727 BrowserContextKeyedAPIFactory<IdentityAPI>* IdentityAPI::GetFactoryInstance() {
736 return g_factory.Pointer(); 728 return g_factory.Pointer();
737 } 729 }
738 730
739 void IdentityAPI::OnAccountAdded(const AccountIds& ids) {} 731 void IdentityAPI::OnAccountAdded(const AccountIds& ids) {}
740 732
741 void IdentityAPI::OnAccountRemoved(const AccountIds& ids) {} 733 void IdentityAPI::OnAccountRemoved(const AccountIds& ids) {}
742 734
743 void IdentityAPI::OnAccountSignInChanged(const AccountIds& ids, 735 void IdentityAPI::OnAccountSignInChanged(const AccountIds& ids,
744 bool is_signed_in) { 736 bool is_signed_in) {
745 api::identity::AccountInfo account_info; 737 api::identity::AccountInfo account_info;
746 account_info.id = ids.gaia; 738 account_info.id = ids.gaia;
747 739
748 scoped_ptr<base::ListValue> args = 740 scoped_ptr<base::ListValue> args =
749 api::identity::OnSignInChanged::Create(account_info, is_signed_in); 741 api::identity::OnSignInChanged::Create(account_info, is_signed_in);
750 scoped_ptr<Event> event(new Event(api::identity::OnSignInChanged::kEventName, 742 scoped_ptr<Event> event(new Event(api::identity::OnSignInChanged::kEventName,
751 args.Pass(), 743 args.Pass(),
752 browser_context_)); 744 browser_context_));
753 745
754 ExtensionSystem::Get(browser_context_)->event_router()->BroadcastEvent( 746 ExtensionSystem::Get(browser_context_)->event_router()->BroadcastEvent(
755 event.Pass()); 747 event.Pass());
756 } 748 }
757 749
758 template <> 750 template <>
759 void ProfileKeyedAPIFactory<IdentityAPI>::DeclareFactoryDependencies() { 751 void BrowserContextKeyedAPIFactory<IdentityAPI>::DeclareFactoryDependencies() {
760 DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); 752 DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
761 DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance()); 753 DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance());
762 } 754 }
763 755
764 } // namespace extensions 756 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/identity/identity_api.h ('k') | chrome/browser/extensions/api/identity/identity_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698