| OLD | NEW |
| 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 <set> | 5 #include <set> |
| 6 #include <string> | 6 #include <string> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 embedder_web_contents_->Close(); | 262 embedder_web_contents_->Close(); |
| 263 } | 263 } |
| 264 | 264 |
| 265 private: | 265 private: |
| 266 GURL url_; | 266 GURL url_; |
| 267 content::WebContents* embedder_web_contents_; | 267 content::WebContents* embedder_web_contents_; |
| 268 }; | 268 }; |
| 269 | 269 |
| 270 } // namespace | 270 } // namespace |
| 271 | 271 |
| 272 class MockGetAuthTokenFunction : public IdentityGetAuthTokenFunction { | |
| 273 public: | |
| 274 MockGetAuthTokenFunction() : login_access_token_result_(true), | |
| 275 login_ui_result_(true), | |
| 276 scope_ui_result_(true), | |
| 277 login_ui_shown_(false), | |
| 278 scope_ui_shown_(false) { | |
| 279 } | |
| 280 | |
| 281 void set_login_access_token_result(bool result) { | |
| 282 login_access_token_result_ = result; | |
| 283 } | |
| 284 | |
| 285 void set_login_ui_result(bool result) { | |
| 286 login_ui_result_ = result; | |
| 287 } | |
| 288 | |
| 289 void set_scope_ui_failure(GaiaWebAuthFlow::Failure failure) { | |
| 290 scope_ui_result_ = false; | |
| 291 scope_ui_failure_ = failure; | |
| 292 } | |
| 293 | |
| 294 void set_scope_ui_oauth_error(const std::string& oauth_error) { | |
| 295 scope_ui_result_ = false; | |
| 296 scope_ui_failure_ = GaiaWebAuthFlow::OAUTH_ERROR; | |
| 297 scope_ui_oauth_error_ = oauth_error; | |
| 298 } | |
| 299 | |
| 300 bool login_ui_shown() const { | |
| 301 return login_ui_shown_; | |
| 302 } | |
| 303 | |
| 304 bool scope_ui_shown() const { | |
| 305 return scope_ui_shown_; | |
| 306 } | |
| 307 | |
| 308 const ExtensionTokenKey* extension_token_key() { return token_key_.get(); } | |
| 309 | |
| 310 virtual void StartLoginAccessTokenRequest() OVERRIDE { | |
| 311 if (login_access_token_result_) { | |
| 312 OnGetTokenSuccess(login_token_request_.get(), "access_token", | |
| 313 base::Time::Now() + base::TimeDelta::FromHours(1LL)); | |
| 314 } else { | |
| 315 GoogleServiceAuthError error( | |
| 316 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); | |
| 317 OnGetTokenFailure(login_token_request_.get(), error); | |
| 318 } | |
| 319 } | |
| 320 | |
| 321 virtual void ShowLoginPopup() OVERRIDE { | |
| 322 EXPECT_FALSE(login_ui_shown_); | |
| 323 login_ui_shown_ = true; | |
| 324 if (login_ui_result_) | |
| 325 SigninSuccess(); | |
| 326 else | |
| 327 SigninFailed(); | |
| 328 } | |
| 329 | |
| 330 virtual void ShowOAuthApprovalDialog( | |
| 331 const IssueAdviceInfo& issue_advice) OVERRIDE { | |
| 332 scope_ui_shown_ = true; | |
| 333 | |
| 334 if (scope_ui_result_) { | |
| 335 OnGaiaFlowCompleted(kAccessToken, "3600"); | |
| 336 } else if (scope_ui_failure_ == GaiaWebAuthFlow::SERVICE_AUTH_ERROR) { | |
| 337 GoogleServiceAuthError error(GoogleServiceAuthError::CONNECTION_FAILED); | |
| 338 OnGaiaFlowFailure(scope_ui_failure_, error, ""); | |
| 339 } else { | |
| 340 GoogleServiceAuthError error(GoogleServiceAuthError::NONE); | |
| 341 OnGaiaFlowFailure(scope_ui_failure_, error, scope_ui_oauth_error_); | |
| 342 } | |
| 343 } | |
| 344 | |
| 345 MOCK_CONST_METHOD0(HasLoginToken, bool()); | |
| 346 MOCK_METHOD1(CreateMintTokenFlow, | |
| 347 OAuth2MintTokenFlow* (const std::string& login_access_token)); | |
| 348 | |
| 349 private: | |
| 350 ~MockGetAuthTokenFunction() {} | |
| 351 bool login_access_token_result_; | |
| 352 bool login_ui_result_; | |
| 353 bool scope_ui_result_; | |
| 354 GaiaWebAuthFlow::Failure scope_ui_failure_; | |
| 355 std::string scope_ui_oauth_error_; | |
| 356 bool login_ui_shown_; | |
| 357 bool scope_ui_shown_; | |
| 358 }; | |
| 359 | |
| 360 // TODO(courage): Replace MockGetAuthTokenFunction with | |
| 361 // FakeGetAuthTokenFunction in all tests. | |
| 362 | |
| 363 class FakeGetAuthTokenFunction : public IdentityGetAuthTokenFunction { | 272 class FakeGetAuthTokenFunction : public IdentityGetAuthTokenFunction { |
| 364 public: | 273 public: |
| 365 FakeGetAuthTokenFunction() | 274 FakeGetAuthTokenFunction() |
| 366 : login_access_token_result_(true), | 275 : login_access_token_result_(true), |
| 276 auto_login_access_token_(true), |
| 367 login_ui_result_(true), | 277 login_ui_result_(true), |
| 368 scope_ui_result_(true), | 278 scope_ui_result_(true), |
| 369 login_ui_shown_(false), | 279 login_ui_shown_(false), |
| 370 scope_ui_shown_(false) {} | 280 scope_ui_shown_(false) {} |
| 371 | 281 |
| 372 void set_login_access_token_result(bool result) { | 282 void set_login_access_token_result(bool result) { |
| 373 login_access_token_result_ = result; | 283 login_access_token_result_ = result; |
| 374 } | 284 } |
| 375 | 285 |
| 286 void set_auto_login_access_token(bool automatic) { |
| 287 auto_login_access_token_ = automatic; |
| 288 } |
| 289 |
| 376 void set_login_ui_result(bool result) { login_ui_result_ = result; } | 290 void set_login_ui_result(bool result) { login_ui_result_ = result; } |
| 377 | 291 |
| 378 void set_mint_token_flow(scoped_ptr<OAuth2MintTokenFlow> flow) { | 292 void set_mint_token_flow(scoped_ptr<OAuth2MintTokenFlow> flow) { |
| 379 flow_ = flow.Pass(); | 293 flow_ = flow.Pass(); |
| 380 } | 294 } |
| 381 | 295 |
| 296 void set_mint_token_result(TestOAuth2MintTokenFlow::ResultType result_type) { |
| 297 set_mint_token_flow(scoped_ptr<TestOAuth2MintTokenFlow>( |
| 298 new TestOAuth2MintTokenFlow(result_type, this)) |
| 299 .PassAs<OAuth2MintTokenFlow>()); |
| 300 } |
| 301 |
| 382 void set_scope_ui_failure(GaiaWebAuthFlow::Failure failure) { | 302 void set_scope_ui_failure(GaiaWebAuthFlow::Failure failure) { |
| 383 scope_ui_result_ = false; | 303 scope_ui_result_ = false; |
| 384 scope_ui_failure_ = failure; | 304 scope_ui_failure_ = failure; |
| 385 } | 305 } |
| 386 | 306 |
| 387 void set_scope_ui_oauth_error(const std::string& oauth_error) { | 307 void set_scope_ui_oauth_error(const std::string& oauth_error) { |
| 388 scope_ui_result_ = false; | 308 scope_ui_result_ = false; |
| 389 scope_ui_failure_ = GaiaWebAuthFlow::OAUTH_ERROR; | 309 scope_ui_failure_ = GaiaWebAuthFlow::OAUTH_ERROR; |
| 390 scope_ui_oauth_error_ = oauth_error; | 310 scope_ui_oauth_error_ = oauth_error; |
| 391 } | 311 } |
| 392 | 312 |
| 393 bool login_ui_shown() const { return login_ui_shown_; } | 313 bool login_ui_shown() const { return login_ui_shown_; } |
| 394 | 314 |
| 395 bool scope_ui_shown() const { return scope_ui_shown_; } | 315 bool scope_ui_shown() const { return scope_ui_shown_; } |
| 396 | 316 |
| 397 std::string login_access_token() const { return login_access_token_; } | 317 std::string login_access_token() const { return login_access_token_; } |
| 398 | 318 |
| 319 virtual void StartLoginAccessTokenRequest() OVERRIDE { |
| 320 if (auto_login_access_token_) { |
| 321 if (login_access_token_result_) { |
| 322 OnGetTokenSuccess(login_token_request_.get(), |
| 323 "access_token", |
| 324 base::Time::Now() + base::TimeDelta::FromHours(1LL)); |
| 325 } else { |
| 326 GoogleServiceAuthError error( |
| 327 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); |
| 328 OnGetTokenFailure(login_token_request_.get(), error); |
| 329 } |
| 330 } else { |
| 331 // Make a request to the token service. The test now must tell |
| 332 // the token service to issue an access token (or an error). |
| 333 IdentityGetAuthTokenFunction::StartLoginAccessTokenRequest(); |
| 334 } |
| 335 } |
| 336 |
| 399 virtual void ShowLoginPopup() OVERRIDE { | 337 virtual void ShowLoginPopup() OVERRIDE { |
| 400 EXPECT_FALSE(login_ui_shown_); | 338 EXPECT_FALSE(login_ui_shown_); |
| 401 login_ui_shown_ = true; | 339 login_ui_shown_ = true; |
| 402 if (login_ui_result_) | 340 if (login_ui_result_) |
| 403 SigninSuccess(); | 341 SigninSuccess(); |
| 404 else | 342 else |
| 405 SigninFailed(); | 343 SigninFailed(); |
| 406 } | 344 } |
| 407 | 345 |
| 408 virtual void ShowOAuthApprovalDialog( | 346 virtual void ShowOAuthApprovalDialog( |
| 409 const IssueAdviceInfo& issue_advice) OVERRIDE { | 347 const IssueAdviceInfo& issue_advice) OVERRIDE { |
| 410 scope_ui_shown_ = true; | 348 scope_ui_shown_ = true; |
| 411 | 349 |
| 412 if (scope_ui_result_) { | 350 if (scope_ui_result_) { |
| 413 OnGaiaFlowCompleted(kAccessToken, "3600"); | 351 OnGaiaFlowCompleted(kAccessToken, "3600"); |
| 414 } else if (scope_ui_failure_ == GaiaWebAuthFlow::SERVICE_AUTH_ERROR) { | 352 } else if (scope_ui_failure_ == GaiaWebAuthFlow::SERVICE_AUTH_ERROR) { |
| 415 GoogleServiceAuthError error(GoogleServiceAuthError::CONNECTION_FAILED); | 353 GoogleServiceAuthError error(GoogleServiceAuthError::CONNECTION_FAILED); |
| 416 OnGaiaFlowFailure(scope_ui_failure_, error, ""); | 354 OnGaiaFlowFailure(scope_ui_failure_, error, ""); |
| 417 } else { | 355 } else { |
| 418 GoogleServiceAuthError error(GoogleServiceAuthError::NONE); | 356 GoogleServiceAuthError error(GoogleServiceAuthError::NONE); |
| 419 OnGaiaFlowFailure(scope_ui_failure_, error, scope_ui_oauth_error_); | 357 OnGaiaFlowFailure(scope_ui_failure_, error, scope_ui_oauth_error_); |
| 420 } | 358 } |
| 421 } | 359 } |
| 422 | 360 |
| 423 virtual OAuth2MintTokenFlow* CreateMintTokenFlow( | 361 virtual OAuth2MintTokenFlow* CreateMintTokenFlow( |
| 424 const std::string& login_access_token) OVERRIDE { | 362 const std::string& login_access_token) OVERRIDE { |
| 425 EXPECT_TRUE(login_access_token_.empty()); | 363 EXPECT_TRUE(login_access_token_.empty()); |
| 364 // Save the login token used to create the flow so tests can see |
| 365 // what account was used. |
| 426 login_access_token_ = login_access_token; | 366 login_access_token_ = login_access_token; |
| 427 return flow_.release(); | 367 return flow_.release(); |
| 428 } | 368 } |
| 429 | 369 |
| 430 private: | 370 private: |
| 431 virtual ~FakeGetAuthTokenFunction() {} | 371 virtual ~FakeGetAuthTokenFunction() {} |
| 432 bool login_access_token_result_; | 372 bool login_access_token_result_; |
| 373 bool auto_login_access_token_; |
| 433 bool login_ui_result_; | 374 bool login_ui_result_; |
| 434 bool scope_ui_result_; | 375 bool scope_ui_result_; |
| 435 GaiaWebAuthFlow::Failure scope_ui_failure_; | 376 GaiaWebAuthFlow::Failure scope_ui_failure_; |
| 436 std::string scope_ui_oauth_error_; | 377 std::string scope_ui_oauth_error_; |
| 437 bool login_ui_shown_; | 378 bool login_ui_shown_; |
| 438 bool scope_ui_shown_; | 379 bool scope_ui_shown_; |
| 439 | 380 |
| 440 scoped_ptr<OAuth2MintTokenFlow> flow_; | 381 scoped_ptr<OAuth2MintTokenFlow> flow_; |
| 441 | 382 |
| 442 std::string login_access_token_; | 383 std::string login_access_token_; |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 698 profile())); | 639 profile())); |
| 699 ASSERT_TRUE(token_service_); | 640 ASSERT_TRUE(token_service_); |
| 700 } | 641 } |
| 701 | 642 |
| 702 void SignIn(const std::string account_key) { | 643 void SignIn(const std::string account_key) { |
| 703 #if defined(OS_CHROMEOS) | 644 #if defined(OS_CHROMEOS) |
| 704 signin_manager_->SetAuthenticatedUsername(account_key); | 645 signin_manager_->SetAuthenticatedUsername(account_key); |
| 705 #else | 646 #else |
| 706 signin_manager_->SignIn(account_key, "password"); | 647 signin_manager_->SignIn(account_key, "password"); |
| 707 #endif | 648 #endif |
| 649 token_service_->IssueRefreshTokenForUser(account_key, "refresh_token"); |
| 650 } |
| 651 |
| 652 void IssueLoginRefreshTokenForAccount(const std::string account_key) { |
| 653 token_service_->IssueRefreshTokenForUser(account_key, "refresh_token"); |
| 654 } |
| 655 |
| 656 void IssueLoginAccessTokenForAccount(const std::string account_key) { |
| 657 token_service_->IssueAllTokensForAccount( |
| 658 account_key, |
| 659 "access_token-" + account_key, |
| 660 base::Time::Now() + base::TimeDelta::FromSeconds(3600)); |
| 708 } | 661 } |
| 709 | 662 |
| 710 void SetAccountState(gaia::AccountIds ids, bool is_signed_in) { | 663 void SetAccountState(gaia::AccountIds ids, bool is_signed_in) { |
| 711 IdentityAPI::GetFactoryInstance()->Get(profile())->SetAccountStateForTest( | 664 IdentityAPI::GetFactoryInstance()->Get(profile())->SetAccountStateForTest( |
| 712 ids, is_signed_in); | 665 ids, is_signed_in); |
| 713 } | 666 } |
| 714 | 667 |
| 715 protected: | 668 protected: |
| 716 enum OAuth2Fields { | 669 enum OAuth2Fields { |
| 717 NONE = 0, | 670 NONE = 0, |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 789 private: | 742 private: |
| 790 std::string extension_id_; | 743 std::string extension_id_; |
| 791 std::set<std::string> oauth_scopes_; | 744 std::set<std::string> oauth_scopes_; |
| 792 | 745 |
| 793 scoped_ptr<base::CallbackList<void(content::BrowserContext*)>::Subscription> | 746 scoped_ptr<base::CallbackList<void(content::BrowserContext*)>::Subscription> |
| 794 will_create_browser_context_services_subscription_; | 747 will_create_browser_context_services_subscription_; |
| 795 }; | 748 }; |
| 796 | 749 |
| 797 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 750 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 798 NoClientId) { | 751 NoClientId) { |
| 799 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 752 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 800 func->set_extension(CreateExtension(SCOPES)); | 753 func->set_extension(CreateExtension(SCOPES)); |
| 801 std::string error = utils::RunFunctionAndReturnError( | 754 std::string error = utils::RunFunctionAndReturnError( |
| 802 func.get(), "[{}]", browser()); | 755 func.get(), "[{}]", browser()); |
| 803 EXPECT_EQ(std::string(errors::kInvalidClientId), error); | 756 EXPECT_EQ(std::string(errors::kInvalidClientId), error); |
| 804 EXPECT_FALSE(func->login_ui_shown()); | 757 EXPECT_FALSE(func->login_ui_shown()); |
| 805 EXPECT_FALSE(func->scope_ui_shown()); | 758 EXPECT_FALSE(func->scope_ui_shown()); |
| 806 } | 759 } |
| 807 | 760 |
| 808 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 761 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 809 NoScopes) { | 762 NoScopes) { |
| 810 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 763 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 811 func->set_extension(CreateExtension(CLIENT_ID)); | 764 func->set_extension(CreateExtension(CLIENT_ID)); |
| 812 std::string error = utils::RunFunctionAndReturnError( | 765 std::string error = utils::RunFunctionAndReturnError( |
| 813 func.get(), "[{}]", browser()); | 766 func.get(), "[{}]", browser()); |
| 814 EXPECT_EQ(std::string(errors::kInvalidScopes), error); | 767 EXPECT_EQ(std::string(errors::kInvalidScopes), error); |
| 815 EXPECT_FALSE(func->login_ui_shown()); | 768 EXPECT_FALSE(func->login_ui_shown()); |
| 816 EXPECT_FALSE(func->scope_ui_shown()); | 769 EXPECT_FALSE(func->scope_ui_shown()); |
| 817 } | 770 } |
| 818 | 771 |
| 819 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 772 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 820 NonInteractiveNotSignedIn) { | 773 NonInteractiveNotSignedIn) { |
| 821 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 774 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 822 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 775 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 823 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(false)); | |
| 824 std::string error = utils::RunFunctionAndReturnError( | 776 std::string error = utils::RunFunctionAndReturnError( |
| 825 func.get(), "[{}]", browser()); | 777 func.get(), "[{}]", browser()); |
| 826 EXPECT_EQ(std::string(errors::kUserNotSignedIn), error); | 778 EXPECT_EQ(std::string(errors::kUserNotSignedIn), error); |
| 827 EXPECT_FALSE(func->login_ui_shown()); | 779 EXPECT_FALSE(func->login_ui_shown()); |
| 828 EXPECT_FALSE(func->scope_ui_shown()); | 780 EXPECT_FALSE(func->scope_ui_shown()); |
| 829 } | 781 } |
| 830 | 782 |
| 831 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 783 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 832 NonInteractiveMintFailure) { | 784 NonInteractiveMintFailure) { |
| 833 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 785 SignIn("primary@example.com"); |
| 786 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 834 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 787 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 835 EXPECT_CALL(*func.get(), HasLoginToken()) | 788 func->set_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_FAILURE); |
| 836 .WillOnce(Return(true)); | 789 std::string error = |
| 837 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | 790 utils::RunFunctionAndReturnError(func.get(), "[{}]", browser()); |
| 838 TestOAuth2MintTokenFlow::MINT_TOKEN_FAILURE, func.get()); | |
| 839 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 840 std::string error = utils::RunFunctionAndReturnError( | |
| 841 func.get(), "[{}]", browser()); | |
| 842 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); | 791 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); |
| 843 EXPECT_FALSE(func->login_ui_shown()); | 792 EXPECT_FALSE(func->login_ui_shown()); |
| 844 EXPECT_FALSE(func->scope_ui_shown()); | 793 EXPECT_FALSE(func->scope_ui_shown()); |
| 845 } | 794 } |
| 846 | 795 |
| 847 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 796 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 848 NonInteractiveLoginAccessTokenFailure) { | 797 NonInteractiveLoginAccessTokenFailure) { |
| 849 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 798 SignIn("primary@example.com"); |
| 799 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 850 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 800 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 851 EXPECT_CALL(*func.get(), HasLoginToken()) | |
| 852 .WillOnce(Return(true)); | |
| 853 func->set_login_access_token_result(false); | 801 func->set_login_access_token_result(false); |
| 854 std::string error = utils::RunFunctionAndReturnError( | 802 std::string error = utils::RunFunctionAndReturnError( |
| 855 func.get(), "[{}]", browser()); | 803 func.get(), "[{}]", browser()); |
| 856 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); | 804 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); |
| 857 } | 805 } |
| 858 | 806 |
| 859 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 807 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 860 NonInteractiveMintAdviceSuccess) { | 808 NonInteractiveMintAdviceSuccess) { |
| 809 SignIn("primary@example.com"); |
| 861 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 810 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 862 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 811 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 863 func->set_extension(extension.get()); | 812 func->set_extension(extension.get()); |
| 864 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | 813 func->set_mint_token_result(TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS); |
| 865 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | 814 std::string error = |
| 866 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get()); | 815 utils::RunFunctionAndReturnError(func.get(), "[{}]", browser()); |
| 867 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 868 std::string error = utils::RunFunctionAndReturnError( | |
| 869 func.get(), "[{}]", browser()); | |
| 870 EXPECT_EQ(std::string(errors::kNoGrant), error); | 816 EXPECT_EQ(std::string(errors::kNoGrant), error); |
| 871 EXPECT_FALSE(func->login_ui_shown()); | 817 EXPECT_FALSE(func->login_ui_shown()); |
| 872 EXPECT_FALSE(func->scope_ui_shown()); | 818 EXPECT_FALSE(func->scope_ui_shown()); |
| 873 | 819 |
| 874 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_ADVICE, | 820 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_ADVICE, |
| 875 GetCachedToken(std::string()).status()); | 821 GetCachedToken(std::string()).status()); |
| 876 } | 822 } |
| 877 | 823 |
| 878 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 824 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 879 NonInteractiveMintBadCredentials) { | 825 NonInteractiveMintBadCredentials) { |
| 880 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 826 SignIn("primary@example.com"); |
| 827 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 881 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 828 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 882 EXPECT_CALL(*func.get(), HasLoginToken()) | 829 func->set_mint_token_result( |
| 883 .WillOnce(Return(true)); | 830 TestOAuth2MintTokenFlow::MINT_TOKEN_BAD_CREDENTIALS); |
| 884 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | 831 std::string error = |
| 885 TestOAuth2MintTokenFlow::MINT_TOKEN_BAD_CREDENTIALS, func.get()); | 832 utils::RunFunctionAndReturnError(func.get(), "[{}]", browser()); |
| 886 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 887 std::string error = utils::RunFunctionAndReturnError( | |
| 888 func.get(), "[{}]", browser()); | |
| 889 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); | 833 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); |
| 890 EXPECT_FALSE(func->login_ui_shown()); | 834 EXPECT_FALSE(func->login_ui_shown()); |
| 891 EXPECT_FALSE(func->scope_ui_shown()); | 835 EXPECT_FALSE(func->scope_ui_shown()); |
| 892 } | 836 } |
| 893 | 837 |
| 894 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 838 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 895 NonInteractiveMintServiceError) { | 839 NonInteractiveMintServiceError) { |
| 896 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 840 SignIn("primary@example.com"); |
| 841 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 897 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 842 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 898 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | 843 func->set_mint_token_result( |
| 899 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | 844 TestOAuth2MintTokenFlow::MINT_TOKEN_SERVICE_ERROR); |
| 900 TestOAuth2MintTokenFlow::MINT_TOKEN_SERVICE_ERROR, func.get()); | |
| 901 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 902 std::string error = | 845 std::string error = |
| 903 utils::RunFunctionAndReturnError(func.get(), "[{}]", browser()); | 846 utils::RunFunctionAndReturnError(func.get(), "[{}]", browser()); |
| 904 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); | 847 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); |
| 905 EXPECT_FALSE(func->login_ui_shown()); | 848 EXPECT_FALSE(func->login_ui_shown()); |
| 906 EXPECT_FALSE(func->scope_ui_shown()); | 849 EXPECT_FALSE(func->scope_ui_shown()); |
| 907 } | 850 } |
| 908 | 851 |
| 909 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 852 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 910 NoOptionsSuccess) { | 853 NoOptionsSuccess) { |
| 854 SignIn("primary@example.com"); |
| 911 #if defined(OS_WIN) && defined(USE_ASH) | 855 #if defined(OS_WIN) && defined(USE_ASH) |
| 912 // Disable this test in Metro+Ash for now (http://crbug.com/262796). | 856 // Disable this test in Metro+Ash for now (http://crbug.com/262796). |
| 913 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) | 857 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) |
| 914 return; | 858 return; |
| 915 #endif | 859 #endif |
| 916 | 860 |
| 917 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 861 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 918 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 862 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 919 func->set_extension(extension.get()); | 863 func->set_extension(extension.get()); |
| 920 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | 864 func->set_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); |
| 921 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | 865 scoped_ptr<base::Value> value( |
| 922 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get()); | 866 utils::RunFunctionAndReturnSingleResult(func.get(), "[]", browser())); |
| 923 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 924 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( | |
| 925 func.get(), "[]", browser())); | |
| 926 std::string access_token; | 867 std::string access_token; |
| 927 EXPECT_TRUE(value->GetAsString(&access_token)); | 868 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 928 EXPECT_EQ(std::string(kAccessToken), access_token); | 869 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 929 EXPECT_FALSE(func->login_ui_shown()); | 870 EXPECT_FALSE(func->login_ui_shown()); |
| 930 EXPECT_FALSE(func->scope_ui_shown()); | 871 EXPECT_FALSE(func->scope_ui_shown()); |
| 931 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, | 872 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, |
| 932 GetCachedToken(std::string()).status()); | 873 GetCachedToken(std::string()).status()); |
| 933 } | 874 } |
| 934 | 875 |
| 935 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 876 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 936 NonInteractiveSuccess) { | 877 NonInteractiveSuccess) { |
| 878 SignIn("primary@example.com"); |
| 937 #if defined(OS_WIN) && defined(USE_ASH) | 879 #if defined(OS_WIN) && defined(USE_ASH) |
| 938 // Disable this test in Metro+Ash for now (http://crbug.com/262796). | 880 // Disable this test in Metro+Ash for now (http://crbug.com/262796). |
| 939 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) | 881 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) |
| 940 return; | 882 return; |
| 941 #endif | 883 #endif |
| 942 | 884 |
| 943 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 885 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 944 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 886 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 945 func->set_extension(extension.get()); | 887 func->set_extension(extension.get()); |
| 946 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | 888 func->set_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); |
| 947 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | |
| 948 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get()); | |
| 949 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 950 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( | 889 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( |
| 951 func.get(), "[{}]", browser())); | 890 func.get(), "[{}]", browser())); |
| 952 std::string access_token; | 891 std::string access_token; |
| 953 EXPECT_TRUE(value->GetAsString(&access_token)); | 892 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 954 EXPECT_EQ(std::string(kAccessToken), access_token); | 893 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 955 EXPECT_FALSE(func->login_ui_shown()); | 894 EXPECT_FALSE(func->login_ui_shown()); |
| 956 EXPECT_FALSE(func->scope_ui_shown()); | 895 EXPECT_FALSE(func->scope_ui_shown()); |
| 957 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, | 896 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, |
| 958 GetCachedToken(std::string()).status()); | 897 GetCachedToken(std::string()).status()); |
| 959 } | 898 } |
| 960 | 899 |
| 961 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 900 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 962 InteractiveLoginCanceled) { | 901 InteractiveLoginCanceled) { |
| 963 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 902 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 964 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 903 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 965 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(false)); | |
| 966 func->set_login_ui_result(false); | 904 func->set_login_ui_result(false); |
| 967 std::string error = utils::RunFunctionAndReturnError( | 905 std::string error = utils::RunFunctionAndReturnError( |
| 968 func.get(), "[{\"interactive\": true}]", browser()); | 906 func.get(), "[{\"interactive\": true}]", browser()); |
| 969 EXPECT_EQ(std::string(errors::kUserNotSignedIn), error); | 907 EXPECT_EQ(std::string(errors::kUserNotSignedIn), error); |
| 970 EXPECT_TRUE(func->login_ui_shown()); | 908 EXPECT_TRUE(func->login_ui_shown()); |
| 971 EXPECT_FALSE(func->scope_ui_shown()); | 909 EXPECT_FALSE(func->scope_ui_shown()); |
| 972 } | 910 } |
| 973 | 911 |
| 974 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 912 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 975 InteractiveMintBadCredentialsLoginCanceled) { | 913 InteractiveMintBadCredentialsLoginCanceled) { |
| 976 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 914 SignIn("primary@example.com"); |
| 915 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 977 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 916 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 978 EXPECT_CALL(*func.get(), HasLoginToken()) | 917 func->set_mint_token_result( |
| 979 .WillOnce(Return(true)); | 918 TestOAuth2MintTokenFlow::MINT_TOKEN_BAD_CREDENTIALS); |
| 980 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | |
| 981 TestOAuth2MintTokenFlow::MINT_TOKEN_BAD_CREDENTIALS, func.get()); | |
| 982 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 983 func->set_login_ui_result(false); | 919 func->set_login_ui_result(false); |
| 984 std::string error = utils::RunFunctionAndReturnError( | 920 std::string error = utils::RunFunctionAndReturnError( |
| 985 func.get(), "[{\"interactive\": true}]", browser()); | 921 func.get(), "[{\"interactive\": true}]", browser()); |
| 986 EXPECT_EQ(std::string(errors::kUserNotSignedIn), error); | 922 EXPECT_EQ(std::string(errors::kUserNotSignedIn), error); |
| 987 EXPECT_TRUE(func->login_ui_shown()); | 923 EXPECT_TRUE(func->login_ui_shown()); |
| 988 EXPECT_FALSE(func->scope_ui_shown()); | 924 EXPECT_FALSE(func->scope_ui_shown()); |
| 989 } | 925 } |
| 990 | 926 |
| 991 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 927 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 992 InteractiveLoginSuccessNoToken) { | 928 InteractiveLoginSuccessNoToken) { |
| 993 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 929 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 994 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 930 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 995 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(false)); | |
| 996 func->set_login_ui_result(false); | 931 func->set_login_ui_result(false); |
| 997 std::string error = utils::RunFunctionAndReturnError( | 932 std::string error = utils::RunFunctionAndReturnError( |
| 998 func.get(), "[{\"interactive\": true}]", browser()); | 933 func.get(), "[{\"interactive\": true}]", browser()); |
| 999 EXPECT_EQ(std::string(errors::kUserNotSignedIn), error); | 934 EXPECT_EQ(std::string(errors::kUserNotSignedIn), error); |
| 1000 EXPECT_TRUE(func->login_ui_shown()); | 935 EXPECT_TRUE(func->login_ui_shown()); |
| 1001 EXPECT_FALSE(func->scope_ui_shown()); | 936 EXPECT_FALSE(func->scope_ui_shown()); |
| 1002 } | 937 } |
| 1003 | 938 |
| 1004 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 939 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1005 InteractiveLoginSuccessMintFailure) { | 940 InteractiveLoginSuccessMintFailure) { |
| 1006 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 941 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1007 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 942 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1008 EXPECT_CALL(*func.get(), HasLoginToken()) | |
| 1009 .WillOnce(Return(false)); | |
| 1010 func->set_login_ui_result(true); | 943 func->set_login_ui_result(true); |
| 1011 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | 944 func->set_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_FAILURE); |
| 1012 TestOAuth2MintTokenFlow::MINT_TOKEN_FAILURE, func.get()); | |
| 1013 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 1014 std::string error = utils::RunFunctionAndReturnError( | 945 std::string error = utils::RunFunctionAndReturnError( |
| 1015 func.get(), "[{\"interactive\": true}]", browser()); | 946 func.get(), "[{\"interactive\": true}]", browser()); |
| 1016 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); | 947 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); |
| 1017 EXPECT_TRUE(func->login_ui_shown()); | 948 EXPECT_TRUE(func->login_ui_shown()); |
| 1018 EXPECT_FALSE(func->scope_ui_shown()); | 949 EXPECT_FALSE(func->scope_ui_shown()); |
| 1019 } | 950 } |
| 1020 | 951 |
| 1021 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 952 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1022 InteractiveLoginSuccessLoginAccessTokenFailure) { | 953 InteractiveLoginSuccessLoginAccessTokenFailure) { |
| 1023 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 954 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1024 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 955 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1025 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(false)); | |
| 1026 func->set_login_ui_result(true); | 956 func->set_login_ui_result(true); |
| 1027 func->set_login_access_token_result(false); | 957 func->set_login_access_token_result(false); |
| 1028 std::string error = utils::RunFunctionAndReturnError( | 958 std::string error = utils::RunFunctionAndReturnError( |
| 1029 func.get(), "[{\"interactive\": true}]", browser()); | 959 func.get(), "[{\"interactive\": true}]", browser()); |
| 1030 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); | 960 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); |
| 1031 EXPECT_TRUE(func->login_ui_shown()); | 961 EXPECT_TRUE(func->login_ui_shown()); |
| 1032 EXPECT_FALSE(func->scope_ui_shown()); | 962 EXPECT_FALSE(func->scope_ui_shown()); |
| 1033 } | 963 } |
| 1034 | 964 |
| 1035 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 965 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1036 InteractiveLoginSuccessMintSuccess) { | 966 InteractiveLoginSuccessMintSuccess) { |
| 1037 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 967 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1038 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 968 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1039 EXPECT_CALL(*func.get(), HasLoginToken()) | |
| 1040 .WillOnce(Return(false)); | |
| 1041 func->set_login_ui_result(true); | 969 func->set_login_ui_result(true); |
| 1042 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | 970 func->set_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); |
| 1043 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get()); | |
| 1044 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 1045 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( | 971 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( |
| 1046 func.get(), "[{\"interactive\": true}]", browser())); | 972 func.get(), "[{\"interactive\": true}]", browser())); |
| 1047 std::string access_token; | 973 std::string access_token; |
| 1048 EXPECT_TRUE(value->GetAsString(&access_token)); | 974 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 1049 EXPECT_EQ(std::string(kAccessToken), access_token); | 975 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 1050 EXPECT_TRUE(func->login_ui_shown()); | 976 EXPECT_TRUE(func->login_ui_shown()); |
| 1051 EXPECT_FALSE(func->scope_ui_shown()); | 977 EXPECT_FALSE(func->scope_ui_shown()); |
| 1052 } | 978 } |
| 1053 | 979 |
| 1054 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 980 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1055 InteractiveLoginSuccessApprovalAborted) { | 981 InteractiveLoginSuccessApprovalAborted) { |
| 1056 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 982 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1057 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 983 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1058 EXPECT_CALL(*func.get(), HasLoginToken()) | |
| 1059 .WillOnce(Return(false)); | |
| 1060 func->set_login_ui_result(true); | 984 func->set_login_ui_result(true); |
| 1061 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | 985 func->set_mint_token_result(TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS); |
| 1062 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get()); | |
| 1063 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 1064 func->set_scope_ui_failure(GaiaWebAuthFlow::WINDOW_CLOSED); | 986 func->set_scope_ui_failure(GaiaWebAuthFlow::WINDOW_CLOSED); |
| 1065 std::string error = utils::RunFunctionAndReturnError( | 987 std::string error = utils::RunFunctionAndReturnError( |
| 1066 func.get(), "[{\"interactive\": true}]", browser()); | 988 func.get(), "[{\"interactive\": true}]", browser()); |
| 1067 EXPECT_EQ(std::string(errors::kUserRejected), error); | 989 EXPECT_EQ(std::string(errors::kUserRejected), error); |
| 1068 EXPECT_TRUE(func->login_ui_shown()); | 990 EXPECT_TRUE(func->login_ui_shown()); |
| 1069 EXPECT_TRUE(func->scope_ui_shown()); | 991 EXPECT_TRUE(func->scope_ui_shown()); |
| 1070 } | 992 } |
| 1071 | 993 |
| 1072 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 994 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1073 InteractiveLoginSuccessApprovalSuccess) { | 995 InteractiveLoginSuccessApprovalSuccess) { |
| 1074 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 996 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1075 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 997 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1076 func->set_extension(extension.get()); | 998 func->set_extension(extension.get()); |
| 1077 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(false)); | |
| 1078 func->set_login_ui_result(true); | 999 func->set_login_ui_result(true); |
| 1079 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | 1000 func->set_mint_token_result(TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS); |
| 1080 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get()); | |
| 1081 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)) | |
| 1082 .WillOnce(Return(flow)); | |
| 1083 | 1001 |
| 1084 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( | 1002 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( |
| 1085 func.get(), "[{\"interactive\": true}]", browser())); | 1003 func.get(), "[{\"interactive\": true}]", browser())); |
| 1086 std::string access_token; | 1004 std::string access_token; |
| 1087 EXPECT_TRUE(value->GetAsString(&access_token)); | 1005 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 1088 EXPECT_EQ(std::string(kAccessToken), access_token); | 1006 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 1089 EXPECT_TRUE(func->login_ui_shown()); | 1007 EXPECT_TRUE(func->login_ui_shown()); |
| 1090 EXPECT_TRUE(func->scope_ui_shown()); | 1008 EXPECT_TRUE(func->scope_ui_shown()); |
| 1091 } | 1009 } |
| 1092 | 1010 |
| 1093 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 1011 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1094 InteractiveApprovalAborted) { | 1012 InteractiveApprovalAborted) { |
| 1095 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1013 SignIn("primary@example.com"); |
| 1014 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1096 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 1015 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1097 EXPECT_CALL(*func.get(), HasLoginToken()) | 1016 func->set_mint_token_result(TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS); |
| 1098 .WillOnce(Return(true)); | |
| 1099 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | |
| 1100 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get()); | |
| 1101 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 1102 func->set_scope_ui_failure(GaiaWebAuthFlow::WINDOW_CLOSED); | 1017 func->set_scope_ui_failure(GaiaWebAuthFlow::WINDOW_CLOSED); |
| 1103 std::string error = utils::RunFunctionAndReturnError( | 1018 std::string error = utils::RunFunctionAndReturnError( |
| 1104 func.get(), "[{\"interactive\": true}]", browser()); | 1019 func.get(), "[{\"interactive\": true}]", browser()); |
| 1105 EXPECT_EQ(std::string(errors::kUserRejected), error); | 1020 EXPECT_EQ(std::string(errors::kUserRejected), error); |
| 1106 EXPECT_FALSE(func->login_ui_shown()); | 1021 EXPECT_FALSE(func->login_ui_shown()); |
| 1107 EXPECT_TRUE(func->scope_ui_shown()); | 1022 EXPECT_TRUE(func->scope_ui_shown()); |
| 1108 } | 1023 } |
| 1109 | 1024 |
| 1110 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 1025 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1111 InteractiveApprovalLoadFailed) { | 1026 InteractiveApprovalLoadFailed) { |
| 1112 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1027 SignIn("primary@example.com"); |
| 1028 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1113 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 1029 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1114 EXPECT_CALL(*func.get(), HasLoginToken()) | 1030 func->set_mint_token_result(TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS); |
| 1115 .WillOnce(Return(true)); | |
| 1116 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | |
| 1117 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get()); | |
| 1118 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 1119 func->set_scope_ui_failure(GaiaWebAuthFlow::LOAD_FAILED); | 1031 func->set_scope_ui_failure(GaiaWebAuthFlow::LOAD_FAILED); |
| 1120 std::string error = utils::RunFunctionAndReturnError( | 1032 std::string error = utils::RunFunctionAndReturnError( |
| 1121 func.get(), "[{\"interactive\": true}]", browser()); | 1033 func.get(), "[{\"interactive\": true}]", browser()); |
| 1122 EXPECT_EQ(std::string(errors::kPageLoadFailure), error); | 1034 EXPECT_EQ(std::string(errors::kPageLoadFailure), error); |
| 1123 EXPECT_FALSE(func->login_ui_shown()); | 1035 EXPECT_FALSE(func->login_ui_shown()); |
| 1124 EXPECT_TRUE(func->scope_ui_shown()); | 1036 EXPECT_TRUE(func->scope_ui_shown()); |
| 1125 } | 1037 } |
| 1126 | 1038 |
| 1127 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 1039 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1128 InteractiveApprovalInvalidRedirect) { | 1040 InteractiveApprovalInvalidRedirect) { |
| 1129 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1041 SignIn("primary@example.com"); |
| 1042 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1130 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 1043 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1131 EXPECT_CALL(*func.get(), HasLoginToken()) | 1044 func->set_mint_token_result(TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS); |
| 1132 .WillOnce(Return(true)); | |
| 1133 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | |
| 1134 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get()); | |
| 1135 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 1136 func->set_scope_ui_failure(GaiaWebAuthFlow::INVALID_REDIRECT); | 1045 func->set_scope_ui_failure(GaiaWebAuthFlow::INVALID_REDIRECT); |
| 1137 std::string error = utils::RunFunctionAndReturnError( | 1046 std::string error = utils::RunFunctionAndReturnError( |
| 1138 func.get(), "[{\"interactive\": true}]", browser()); | 1047 func.get(), "[{\"interactive\": true}]", browser()); |
| 1139 EXPECT_EQ(std::string(errors::kInvalidRedirect), error); | 1048 EXPECT_EQ(std::string(errors::kInvalidRedirect), error); |
| 1140 EXPECT_FALSE(func->login_ui_shown()); | 1049 EXPECT_FALSE(func->login_ui_shown()); |
| 1141 EXPECT_TRUE(func->scope_ui_shown()); | 1050 EXPECT_TRUE(func->scope_ui_shown()); |
| 1142 } | 1051 } |
| 1143 | 1052 |
| 1144 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 1053 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1145 InteractiveApprovalConnectionFailure) { | 1054 InteractiveApprovalConnectionFailure) { |
| 1146 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1055 SignIn("primary@example.com"); |
| 1056 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1147 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); | 1057 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1148 EXPECT_CALL(*func.get(), HasLoginToken()) | 1058 func->set_mint_token_result(TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS); |
| 1149 .WillOnce(Return(true)); | |
| 1150 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | |
| 1151 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get()); | |
| 1152 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 1153 func->set_scope_ui_failure(GaiaWebAuthFlow::SERVICE_AUTH_ERROR); | 1059 func->set_scope_ui_failure(GaiaWebAuthFlow::SERVICE_AUTH_ERROR); |
| 1154 std::string error = utils::RunFunctionAndReturnError( | 1060 std::string error = utils::RunFunctionAndReturnError( |
| 1155 func.get(), "[{\"interactive\": true}]", browser()); | 1061 func.get(), "[{\"interactive\": true}]", browser()); |
| 1156 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); | 1062 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); |
| 1157 EXPECT_FALSE(func->login_ui_shown()); | 1063 EXPECT_FALSE(func->login_ui_shown()); |
| 1158 EXPECT_TRUE(func->scope_ui_shown()); | 1064 EXPECT_TRUE(func->scope_ui_shown()); |
| 1159 } | 1065 } |
| 1160 | 1066 |
| 1161 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 1067 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1162 InteractiveApprovalOAuthErrors) { | 1068 InteractiveApprovalOAuthErrors) { |
| 1069 SignIn("primary@example.com"); |
| 1163 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1070 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1164 | 1071 |
| 1165 std::map<std::string, std::string> error_map; | 1072 std::map<std::string, std::string> error_map; |
| 1166 error_map.insert(std::make_pair("access_denied", errors::kUserRejected)); | 1073 error_map.insert(std::make_pair("access_denied", errors::kUserRejected)); |
| 1167 error_map.insert(std::make_pair("invalid_scope", errors::kInvalidScopes)); | 1074 error_map.insert(std::make_pair("invalid_scope", errors::kInvalidScopes)); |
| 1168 error_map.insert(std::make_pair( | 1075 error_map.insert(std::make_pair( |
| 1169 "unmapped_error", std::string(errors::kAuthFailure) + "unmapped_error")); | 1076 "unmapped_error", std::string(errors::kAuthFailure) + "unmapped_error")); |
| 1170 | 1077 |
| 1171 for (std::map<std::string, std::string>::const_iterator | 1078 for (std::map<std::string, std::string>::const_iterator |
| 1172 it = error_map.begin(); | 1079 it = error_map.begin(); |
| 1173 it != error_map.end(); | 1080 it != error_map.end(); |
| 1174 ++it) { | 1081 ++it) { |
| 1175 scoped_refptr<MockGetAuthTokenFunction> func( | 1082 scoped_refptr<FakeGetAuthTokenFunction> func( |
| 1176 new MockGetAuthTokenFunction()); | 1083 new FakeGetAuthTokenFunction()); |
| 1177 func->set_extension(extension.get()); | 1084 func->set_extension(extension.get()); |
| 1178 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | |
| 1179 // Make sure we don't get a cached issue_advice result, which would cause | 1085 // Make sure we don't get a cached issue_advice result, which would cause |
| 1180 // flow to be leaked. | 1086 // flow to be leaked. |
| 1181 id_api()->EraseAllCachedTokens(); | 1087 id_api()->EraseAllCachedTokens(); |
| 1182 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | 1088 func->set_mint_token_result(TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS); |
| 1183 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get()); | |
| 1184 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 1185 func->set_scope_ui_oauth_error(it->first); | 1089 func->set_scope_ui_oauth_error(it->first); |
| 1186 std::string error = utils::RunFunctionAndReturnError( | 1090 std::string error = utils::RunFunctionAndReturnError( |
| 1187 func.get(), "[{\"interactive\": true}]", browser()); | 1091 func.get(), "[{\"interactive\": true}]", browser()); |
| 1188 EXPECT_EQ(it->second, error); | 1092 EXPECT_EQ(it->second, error); |
| 1189 EXPECT_FALSE(func->login_ui_shown()); | 1093 EXPECT_FALSE(func->login_ui_shown()); |
| 1190 EXPECT_TRUE(func->scope_ui_shown()); | 1094 EXPECT_TRUE(func->scope_ui_shown()); |
| 1191 } | 1095 } |
| 1192 } | 1096 } |
| 1193 | 1097 |
| 1194 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 1098 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1195 InteractiveApprovalSuccess) { | 1099 InteractiveApprovalSuccess) { |
| 1100 SignIn("primary@example.com"); |
| 1196 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1101 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1197 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1102 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1198 func->set_extension(extension.get()); | 1103 func->set_extension(extension.get()); |
| 1199 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | 1104 func->set_mint_token_result(TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS); |
| 1200 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | |
| 1201 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get()); | |
| 1202 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)) | |
| 1203 .WillOnce(Return(flow)); | |
| 1204 | 1105 |
| 1205 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( | 1106 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( |
| 1206 func.get(), "[{\"interactive\": true}]", browser())); | 1107 func.get(), "[{\"interactive\": true}]", browser())); |
| 1207 std::string access_token; | 1108 std::string access_token; |
| 1208 EXPECT_TRUE(value->GetAsString(&access_token)); | 1109 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 1209 EXPECT_EQ(std::string(kAccessToken), access_token); | 1110 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 1210 EXPECT_FALSE(func->login_ui_shown()); | 1111 EXPECT_FALSE(func->login_ui_shown()); |
| 1211 EXPECT_TRUE(func->scope_ui_shown()); | 1112 EXPECT_TRUE(func->scope_ui_shown()); |
| 1212 | 1113 |
| 1213 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, | 1114 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, |
| 1214 GetCachedToken(std::string()).status()); | 1115 GetCachedToken(std::string()).status()); |
| 1215 } | 1116 } |
| 1216 | 1117 |
| 1217 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, NoninteractiveQueue) { | 1118 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, NoninteractiveQueue) { |
| 1119 SignIn("primary@example.com"); |
| 1218 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1120 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1219 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1121 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1220 func->set_extension(extension.get()); | 1122 func->set_extension(extension.get()); |
| 1221 | 1123 |
| 1222 // Create a fake request to block the queue. | 1124 // Create a fake request to block the queue. |
| 1223 MockQueuedMintRequest queued_request; | 1125 MockQueuedMintRequest queued_request; |
| 1224 IdentityMintRequestQueue::MintType type = | 1126 IdentityMintRequestQueue::MintType type = |
| 1225 IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE; | 1127 IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE; |
| 1226 | 1128 |
| 1227 EXPECT_CALL(queued_request, StartMintToken(type)).Times(1); | 1129 EXPECT_CALL(queued_request, StartMintToken(type)).Times(1); |
| 1228 QueueRequestStart(type, &queued_request); | 1130 QueueRequestStart(type, &queued_request); |
| 1229 | 1131 |
| 1230 // The real request will start processing, but wait in the queue behind | 1132 // The real request will start processing, but wait in the queue behind |
| 1231 // the blocker. | 1133 // the blocker. |
| 1232 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | |
| 1233 RunFunctionAsync(func.get(), "[{}]"); | 1134 RunFunctionAsync(func.get(), "[{}]"); |
| 1234 // Verify that we have fetched the login token at this point. | 1135 // Verify that we have fetched the login token at this point. |
| 1235 testing::Mock::VerifyAndClearExpectations(func.get()); | 1136 testing::Mock::VerifyAndClearExpectations(func.get()); |
| 1236 | 1137 |
| 1237 // The flow will be created after the first queued request clears. | 1138 // The flow will be created after the first queued request clears. |
| 1238 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | 1139 func->set_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); |
| 1239 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get()); | |
| 1240 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 1241 | 1140 |
| 1242 QueueRequestComplete(type, &queued_request); | 1141 QueueRequestComplete(type, &queued_request); |
| 1243 | 1142 |
| 1244 scoped_ptr<base::Value> value(WaitForSingleResult(func.get())); | 1143 scoped_ptr<base::Value> value(WaitForSingleResult(func.get())); |
| 1245 std::string access_token; | 1144 std::string access_token; |
| 1246 EXPECT_TRUE(value->GetAsString(&access_token)); | 1145 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 1247 EXPECT_EQ(std::string(kAccessToken), access_token); | 1146 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 1248 EXPECT_FALSE(func->login_ui_shown()); | 1147 EXPECT_FALSE(func->login_ui_shown()); |
| 1249 EXPECT_FALSE(func->scope_ui_shown()); | 1148 EXPECT_FALSE(func->scope_ui_shown()); |
| 1250 } | 1149 } |
| 1251 | 1150 |
| 1252 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, InteractiveQueue) { | 1151 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, InteractiveQueue) { |
| 1152 SignIn("primary@example.com"); |
| 1253 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1153 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1254 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1154 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1255 func->set_extension(extension.get()); | 1155 func->set_extension(extension.get()); |
| 1256 | 1156 |
| 1257 // Create a fake request to block the queue. | 1157 // Create a fake request to block the queue. |
| 1258 MockQueuedMintRequest queued_request; | 1158 MockQueuedMintRequest queued_request; |
| 1259 IdentityMintRequestQueue::MintType type = | 1159 IdentityMintRequestQueue::MintType type = |
| 1260 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE; | 1160 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE; |
| 1261 | 1161 |
| 1262 EXPECT_CALL(queued_request, StartMintToken(type)).Times(1); | 1162 EXPECT_CALL(queued_request, StartMintToken(type)).Times(1); |
| 1263 QueueRequestStart(type, &queued_request); | 1163 QueueRequestStart(type, &queued_request); |
| 1264 | 1164 |
| 1265 // The real request will start processing, but wait in the queue behind | 1165 // The real request will start processing, but wait in the queue behind |
| 1266 // the blocker. | 1166 // the blocker. |
| 1267 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | 1167 func->set_mint_token_result(TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS); |
| 1268 TestOAuth2MintTokenFlow* flow1 = new TestOAuth2MintTokenFlow( | |
| 1269 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get()); | |
| 1270 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow1)); | |
| 1271 RunFunctionAsync(func.get(), "[{\"interactive\": true}]"); | 1168 RunFunctionAsync(func.get(), "[{\"interactive\": true}]"); |
| 1272 // Verify that we have fetched the login token and run the first flow. | 1169 // Verify that we have fetched the login token and run the first flow. |
| 1273 testing::Mock::VerifyAndClearExpectations(func.get()); | 1170 testing::Mock::VerifyAndClearExpectations(func.get()); |
| 1274 EXPECT_FALSE(func->scope_ui_shown()); | 1171 EXPECT_FALSE(func->scope_ui_shown()); |
| 1275 | 1172 |
| 1276 // The UI will be displayed and a token retrieved after the first | 1173 // The UI will be displayed and a token retrieved after the first |
| 1277 // queued request clears. | 1174 // queued request clears. |
| 1278 QueueRequestComplete(type, &queued_request); | 1175 QueueRequestComplete(type, &queued_request); |
| 1279 | 1176 |
| 1280 scoped_ptr<base::Value> value(WaitForSingleResult(func.get())); | 1177 scoped_ptr<base::Value> value(WaitForSingleResult(func.get())); |
| 1281 std::string access_token; | 1178 std::string access_token; |
| 1282 EXPECT_TRUE(value->GetAsString(&access_token)); | 1179 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 1283 EXPECT_EQ(std::string(kAccessToken), access_token); | 1180 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 1284 EXPECT_FALSE(func->login_ui_shown()); | 1181 EXPECT_FALSE(func->login_ui_shown()); |
| 1285 EXPECT_TRUE(func->scope_ui_shown()); | 1182 EXPECT_TRUE(func->scope_ui_shown()); |
| 1286 } | 1183 } |
| 1287 | 1184 |
| 1288 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, InteractiveQueueShutdown) { | 1185 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, InteractiveQueueShutdown) { |
| 1186 SignIn("primary@example.com"); |
| 1289 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1187 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1290 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1188 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1291 func->set_extension(extension.get()); | 1189 func->set_extension(extension.get()); |
| 1292 | 1190 |
| 1293 // Create a fake request to block the queue. | 1191 // Create a fake request to block the queue. |
| 1294 MockQueuedMintRequest queued_request; | 1192 MockQueuedMintRequest queued_request; |
| 1295 IdentityMintRequestQueue::MintType type = | 1193 IdentityMintRequestQueue::MintType type = |
| 1296 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE; | 1194 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE; |
| 1297 | 1195 |
| 1298 EXPECT_CALL(queued_request, StartMintToken(type)).Times(1); | 1196 EXPECT_CALL(queued_request, StartMintToken(type)).Times(1); |
| 1299 QueueRequestStart(type, &queued_request); | 1197 QueueRequestStart(type, &queued_request); |
| 1300 | 1198 |
| 1301 // The real request will start processing, but wait in the queue behind | 1199 // The real request will start processing, but wait in the queue behind |
| 1302 // the blocker. | 1200 // the blocker. |
| 1303 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | 1201 func->set_mint_token_result(TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS); |
| 1304 TestOAuth2MintTokenFlow* flow1 = new TestOAuth2MintTokenFlow( | |
| 1305 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get()); | |
| 1306 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow1)); | |
| 1307 RunFunctionAsync(func.get(), "[{\"interactive\": true}]"); | 1202 RunFunctionAsync(func.get(), "[{\"interactive\": true}]"); |
| 1308 // Verify that we have fetched the login token and run the first flow. | 1203 // Verify that we have fetched the login token and run the first flow. |
| 1309 testing::Mock::VerifyAndClearExpectations(func.get()); | 1204 testing::Mock::VerifyAndClearExpectations(func.get()); |
| 1310 EXPECT_FALSE(func->scope_ui_shown()); | 1205 EXPECT_FALSE(func->scope_ui_shown()); |
| 1311 | 1206 |
| 1312 // After the request is canceled, the function will complete. | 1207 // After the request is canceled, the function will complete. |
| 1313 func->OnShutdown(); | 1208 func->OnShutdown(); |
| 1314 EXPECT_EQ(std::string(errors::kCanceled), WaitForError(func.get())); | 1209 EXPECT_EQ(std::string(errors::kCanceled), WaitForError(func.get())); |
| 1315 EXPECT_FALSE(func->login_ui_shown()); | 1210 EXPECT_FALSE(func->login_ui_shown()); |
| 1316 EXPECT_FALSE(func->scope_ui_shown()); | 1211 EXPECT_FALSE(func->scope_ui_shown()); |
| 1317 | 1212 |
| 1318 QueueRequestComplete(type, &queued_request); | 1213 QueueRequestComplete(type, &queued_request); |
| 1319 } | 1214 } |
| 1320 | 1215 |
| 1321 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, NoninteractiveShutdown) { | 1216 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, NoninteractiveShutdown) { |
| 1217 SignIn("primary@example.com"); |
| 1322 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1218 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1323 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1219 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1324 func->set_extension(extension.get()); | 1220 func->set_extension(extension.get()); |
| 1325 | 1221 |
| 1326 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | 1222 scoped_ptr<TestHangOAuth2MintTokenFlow> flow( |
| 1327 TestHangOAuth2MintTokenFlow* flow = new TestHangOAuth2MintTokenFlow(); | 1223 new TestHangOAuth2MintTokenFlow()); |
| 1328 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | 1224 func->set_mint_token_flow(flow.PassAs<OAuth2MintTokenFlow>()); |
| 1329 RunFunctionAsync(func.get(), "[{\"interactive\": false}]"); | 1225 RunFunctionAsync(func.get(), "[{\"interactive\": false}]"); |
| 1330 | 1226 |
| 1331 // After the request is canceled, the function will complete. | 1227 // After the request is canceled, the function will complete. |
| 1332 func->OnShutdown(); | 1228 func->OnShutdown(); |
| 1333 EXPECT_EQ(std::string(errors::kCanceled), WaitForError(func.get())); | 1229 EXPECT_EQ(std::string(errors::kCanceled), WaitForError(func.get())); |
| 1334 } | 1230 } |
| 1335 | 1231 |
| 1336 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 1232 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1337 InteractiveQueuedNoninteractiveFails) { | 1233 InteractiveQueuedNoninteractiveFails) { |
| 1234 SignIn("primary@example.com"); |
| 1338 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1235 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1339 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1236 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1340 func->set_extension(extension.get()); | 1237 func->set_extension(extension.get()); |
| 1341 | 1238 |
| 1342 // Create a fake request to block the interactive queue. | 1239 // Create a fake request to block the interactive queue. |
| 1343 MockQueuedMintRequest queued_request; | 1240 MockQueuedMintRequest queued_request; |
| 1344 IdentityMintRequestQueue::MintType type = | 1241 IdentityMintRequestQueue::MintType type = |
| 1345 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE; | 1242 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE; |
| 1346 | 1243 |
| 1347 EXPECT_CALL(queued_request, StartMintToken(type)).Times(1); | 1244 EXPECT_CALL(queued_request, StartMintToken(type)).Times(1); |
| 1348 QueueRequestStart(type, &queued_request); | 1245 QueueRequestStart(type, &queued_request); |
| 1349 | 1246 |
| 1350 // Non-interactive requests fail without hitting GAIA, because a | 1247 // Non-interactive requests fail without hitting GAIA, because a |
| 1351 // consent UI is known to be up. | 1248 // consent UI is known to be up. |
| 1352 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | |
| 1353 std::string error = utils::RunFunctionAndReturnError( | 1249 std::string error = utils::RunFunctionAndReturnError( |
| 1354 func.get(), "[{}]", browser()); | 1250 func.get(), "[{}]", browser()); |
| 1355 EXPECT_EQ(std::string(errors::kNoGrant), error); | 1251 EXPECT_EQ(std::string(errors::kNoGrant), error); |
| 1356 EXPECT_FALSE(func->login_ui_shown()); | 1252 EXPECT_FALSE(func->login_ui_shown()); |
| 1357 EXPECT_FALSE(func->scope_ui_shown()); | 1253 EXPECT_FALSE(func->scope_ui_shown()); |
| 1358 | 1254 |
| 1359 QueueRequestComplete(type, &queued_request); | 1255 QueueRequestComplete(type, &queued_request); |
| 1360 } | 1256 } |
| 1361 | 1257 |
| 1362 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 1258 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1363 NonInteractiveCacheHit) { | 1259 NonInteractiveCacheHit) { |
| 1260 SignIn("primary@example.com"); |
| 1364 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1261 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1365 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1262 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1366 func->set_extension(extension.get()); | 1263 func->set_extension(extension.get()); |
| 1367 | 1264 |
| 1368 // pre-populate the cache with a token | 1265 // pre-populate the cache with a token |
| 1369 IdentityTokenCacheValue token(kAccessToken, | 1266 IdentityTokenCacheValue token(kAccessToken, |
| 1370 base::TimeDelta::FromSeconds(3600)); | 1267 base::TimeDelta::FromSeconds(3600)); |
| 1371 SetCachedToken(token); | 1268 SetCachedToken(token); |
| 1372 | 1269 |
| 1373 // Get a token. Should not require a GAIA request. | 1270 // Get a token. Should not require a GAIA request. |
| 1374 EXPECT_CALL(*func.get(), HasLoginToken()) | |
| 1375 .WillOnce(Return(true)); | |
| 1376 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( | 1271 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( |
| 1377 func.get(), "[{}]", browser())); | 1272 func.get(), "[{}]", browser())); |
| 1378 std::string access_token; | 1273 std::string access_token; |
| 1379 EXPECT_TRUE(value->GetAsString(&access_token)); | 1274 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 1380 EXPECT_EQ(std::string(kAccessToken), access_token); | 1275 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 1381 EXPECT_FALSE(func->login_ui_shown()); | 1276 EXPECT_FALSE(func->login_ui_shown()); |
| 1382 EXPECT_FALSE(func->scope_ui_shown()); | 1277 EXPECT_FALSE(func->scope_ui_shown()); |
| 1383 } | 1278 } |
| 1384 | 1279 |
| 1385 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 1280 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1386 NonInteractiveIssueAdviceCacheHit) { | 1281 NonInteractiveIssueAdviceCacheHit) { |
| 1282 SignIn("primary@example.com"); |
| 1387 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1283 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1388 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1284 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1389 func->set_extension(extension.get()); | 1285 func->set_extension(extension.get()); |
| 1390 | 1286 |
| 1391 // pre-populate the cache with advice | 1287 // pre-populate the cache with advice |
| 1392 IssueAdviceInfo info; | 1288 IssueAdviceInfo info; |
| 1393 IdentityTokenCacheValue token(info); | 1289 IdentityTokenCacheValue token(info); |
| 1394 SetCachedToken(token); | 1290 SetCachedToken(token); |
| 1395 | 1291 |
| 1396 // Should return an error without a GAIA request. | 1292 // Should return an error without a GAIA request. |
| 1397 EXPECT_CALL(*func.get(), HasLoginToken()) | |
| 1398 .WillOnce(Return(true)); | |
| 1399 std::string error = utils::RunFunctionAndReturnError( | 1293 std::string error = utils::RunFunctionAndReturnError( |
| 1400 func.get(), "[{}]", browser()); | 1294 func.get(), "[{}]", browser()); |
| 1401 EXPECT_EQ(std::string(errors::kNoGrant), error); | 1295 EXPECT_EQ(std::string(errors::kNoGrant), error); |
| 1402 EXPECT_FALSE(func->login_ui_shown()); | 1296 EXPECT_FALSE(func->login_ui_shown()); |
| 1403 EXPECT_FALSE(func->scope_ui_shown()); | 1297 EXPECT_FALSE(func->scope_ui_shown()); |
| 1404 } | 1298 } |
| 1405 | 1299 |
| 1406 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 1300 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1407 InteractiveCacheHit) { | 1301 InteractiveCacheHit) { |
| 1302 SignIn("primary@example.com"); |
| 1408 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1303 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1409 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1304 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1410 func->set_extension(extension.get()); | 1305 func->set_extension(extension.get()); |
| 1411 | 1306 |
| 1412 // Create a fake request to block the queue. | 1307 // Create a fake request to block the queue. |
| 1413 MockQueuedMintRequest queued_request; | 1308 MockQueuedMintRequest queued_request; |
| 1414 IdentityMintRequestQueue::MintType type = | 1309 IdentityMintRequestQueue::MintType type = |
| 1415 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE; | 1310 IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE; |
| 1416 | 1311 |
| 1417 EXPECT_CALL(queued_request, StartMintToken(type)).Times(1); | 1312 EXPECT_CALL(queued_request, StartMintToken(type)).Times(1); |
| 1418 QueueRequestStart(type, &queued_request); | 1313 QueueRequestStart(type, &queued_request); |
| 1419 | 1314 |
| 1420 // The real request will start processing, but wait in the queue behind | 1315 // The real request will start processing, but wait in the queue behind |
| 1421 // the blocker. | 1316 // the blocker. |
| 1422 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | 1317 func->set_mint_token_result(TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS); |
| 1423 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | |
| 1424 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get()); | |
| 1425 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 1426 RunFunctionAsync(func.get(), "[{\"interactive\": true}]"); | 1318 RunFunctionAsync(func.get(), "[{\"interactive\": true}]"); |
| 1427 | 1319 |
| 1428 // Populate the cache with a token while the request is blocked. | 1320 // Populate the cache with a token while the request is blocked. |
| 1429 IdentityTokenCacheValue token(kAccessToken, | 1321 IdentityTokenCacheValue token(kAccessToken, |
| 1430 base::TimeDelta::FromSeconds(3600)); | 1322 base::TimeDelta::FromSeconds(3600)); |
| 1431 SetCachedToken(token); | 1323 SetCachedToken(token); |
| 1432 | 1324 |
| 1433 // When we wake up the request, it returns the cached token without | 1325 // When we wake up the request, it returns the cached token without |
| 1434 // displaying a UI, or hitting GAIA. | 1326 // displaying a UI, or hitting GAIA. |
| 1435 | 1327 |
| 1436 QueueRequestComplete(type, &queued_request); | 1328 QueueRequestComplete(type, &queued_request); |
| 1437 | 1329 |
| 1438 scoped_ptr<base::Value> value(WaitForSingleResult(func.get())); | 1330 scoped_ptr<base::Value> value(WaitForSingleResult(func.get())); |
| 1439 std::string access_token; | 1331 std::string access_token; |
| 1440 EXPECT_TRUE(value->GetAsString(&access_token)); | 1332 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 1441 EXPECT_EQ(std::string(kAccessToken), access_token); | 1333 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 1442 EXPECT_FALSE(func->login_ui_shown()); | 1334 EXPECT_FALSE(func->login_ui_shown()); |
| 1443 EXPECT_FALSE(func->scope_ui_shown()); | 1335 EXPECT_FALSE(func->scope_ui_shown()); |
| 1444 } | 1336 } |
| 1445 | 1337 |
| 1446 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, | 1338 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1447 LoginInvalidatesTokenCache) { | 1339 LoginInvalidatesTokenCache) { |
| 1448 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1340 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1449 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1341 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1450 func->set_extension(extension.get()); | 1342 func->set_extension(extension.get()); |
| 1451 | 1343 |
| 1452 // pre-populate the cache with a token | 1344 // pre-populate the cache with a token |
| 1453 IdentityTokenCacheValue token(kAccessToken, | 1345 IdentityTokenCacheValue token(kAccessToken, |
| 1454 base::TimeDelta::FromSeconds(3600)); | 1346 base::TimeDelta::FromSeconds(3600)); |
| 1455 SetCachedToken(token); | 1347 SetCachedToken(token); |
| 1456 | 1348 |
| 1457 // Because the user is not signed in, the token will be removed, | 1349 // Because the user is not signed in, the token will be removed, |
| 1458 // and we'll hit GAIA for new tokens. | 1350 // and we'll hit GAIA for new tokens. |
| 1459 EXPECT_CALL(*func.get(), HasLoginToken()) | |
| 1460 .WillOnce(Return(false)); | |
| 1461 func->set_login_ui_result(true); | 1351 func->set_login_ui_result(true); |
| 1462 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | 1352 func->set_mint_token_result(TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS); |
| 1463 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get()); | |
| 1464 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)) | |
| 1465 .WillOnce(Return(flow)); | |
| 1466 | 1353 |
| 1467 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( | 1354 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( |
| 1468 func.get(), "[{\"interactive\": true}]", browser())); | 1355 func.get(), "[{\"interactive\": true}]", browser())); |
| 1469 std::string access_token; | 1356 std::string access_token; |
| 1470 EXPECT_TRUE(value->GetAsString(&access_token)); | 1357 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 1471 EXPECT_EQ(std::string(kAccessToken), access_token); | 1358 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 1472 EXPECT_TRUE(func->login_ui_shown()); | 1359 EXPECT_TRUE(func->login_ui_shown()); |
| 1473 EXPECT_TRUE(func->scope_ui_shown()); | 1360 EXPECT_TRUE(func->scope_ui_shown()); |
| 1474 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, | 1361 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, |
| 1475 GetCachedToken(std::string()).status()); | 1362 GetCachedToken(std::string()).status()); |
| 1476 } | 1363 } |
| 1477 | 1364 |
| 1478 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ComponentWithChromeClientId) { | 1365 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ComponentWithChromeClientId) { |
| 1479 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1366 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1480 scoped_refptr<const Extension> extension( | 1367 scoped_refptr<const Extension> extension( |
| 1481 CreateExtension(SCOPES | AS_COMPONENT)); | 1368 CreateExtension(SCOPES | AS_COMPONENT)); |
| 1482 func->set_extension(extension.get()); | 1369 func->set_extension(extension.get()); |
| 1483 const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension.get()); | 1370 const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension.get()); |
| 1484 EXPECT_TRUE(oauth2_info.client_id.empty()); | 1371 EXPECT_TRUE(oauth2_info.client_id.empty()); |
| 1485 EXPECT_FALSE(func->GetOAuth2ClientId().empty()); | 1372 EXPECT_FALSE(func->GetOAuth2ClientId().empty()); |
| 1486 EXPECT_NE("client1", func->GetOAuth2ClientId()); | 1373 EXPECT_NE("client1", func->GetOAuth2ClientId()); |
| 1487 } | 1374 } |
| 1488 | 1375 |
| 1489 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ComponentWithNormalClientId) { | 1376 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ComponentWithNormalClientId) { |
| 1490 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1377 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1491 scoped_refptr<const Extension> extension( | 1378 scoped_refptr<const Extension> extension( |
| 1492 CreateExtension(CLIENT_ID | SCOPES | AS_COMPONENT)); | 1379 CreateExtension(CLIENT_ID | SCOPES | AS_COMPONENT)); |
| 1493 func->set_extension(extension.get()); | 1380 func->set_extension(extension.get()); |
| 1494 EXPECT_EQ("client1", func->GetOAuth2ClientId()); | 1381 EXPECT_EQ("client1", func->GetOAuth2ClientId()); |
| 1495 } | 1382 } |
| 1496 | 1383 |
| 1497 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, MultiDefaultUser) { | 1384 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, MultiDefaultUser) { |
| 1498 SignIn("primary@example.com"); | 1385 SignIn("primary@example.com"); |
| 1499 token_service_->IssueRefreshTokenForUser("primary@example.com", | |
| 1500 "refresh_token"); | |
| 1501 SetAccountState(CreateIds("primary@example.com", "1"), true); | 1386 SetAccountState(CreateIds("primary@example.com", "1"), true); |
| 1502 SetAccountState(CreateIds("secondary@example.com", "2"), true); | 1387 SetAccountState(CreateIds("secondary@example.com", "2"), true); |
| 1503 | 1388 |
| 1504 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); | 1389 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1505 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1390 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1506 func->set_extension(extension.get()); | 1391 func->set_extension(extension.get()); |
| 1507 func->set_mint_token_flow( | 1392 func->set_auto_login_access_token(false); |
| 1508 scoped_ptr<OAuth2MintTokenFlow>(new TestOAuth2MintTokenFlow( | 1393 func->set_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); |
| 1509 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get()))); | |
| 1510 | 1394 |
| 1511 RunFunctionAsync(func.get(), "[{}]"); | 1395 RunFunctionAsync(func.get(), "[{}]"); |
| 1512 | 1396 |
| 1513 token_service_->IssueAllTokensForAccount( | 1397 IssueLoginAccessTokenForAccount("primary@example.com"); |
| 1514 "primary@example.com", | |
| 1515 "access_token-primary@example.com", | |
| 1516 base::Time::Now() + base::TimeDelta::FromSeconds(3600)); | |
| 1517 | 1398 |
| 1518 scoped_ptr<base::Value> value(WaitForSingleResult(func.get())); | 1399 scoped_ptr<base::Value> value(WaitForSingleResult(func.get())); |
| 1519 std::string access_token; | 1400 std::string access_token; |
| 1520 EXPECT_TRUE(value->GetAsString(&access_token)); | 1401 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 1521 EXPECT_EQ(std::string(kAccessToken), access_token); | 1402 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 1522 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, | 1403 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, |
| 1523 GetCachedToken(std::string()).status()); | 1404 GetCachedToken(std::string()).status()); |
| 1524 EXPECT_EQ("access_token-primary@example.com", func->login_access_token()); | 1405 EXPECT_EQ("access_token-primary@example.com", func->login_access_token()); |
| 1525 } | 1406 } |
| 1526 | 1407 |
| 1527 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, MultiPrimaryUser) { | 1408 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, MultiPrimaryUser) { |
| 1528 SignIn("primary@example.com"); | 1409 SignIn("primary@example.com"); |
| 1529 token_service_->IssueRefreshTokenForUser("primary@example.com", | 1410 IssueLoginRefreshTokenForAccount("secondary@example.com"); |
| 1530 "refresh_token"); | |
| 1531 SetAccountState(CreateIds("primary@example.com", "1"), true); | 1411 SetAccountState(CreateIds("primary@example.com", "1"), true); |
| 1532 SetAccountState(CreateIds("secondary@example.com", "2"), true); | 1412 SetAccountState(CreateIds("secondary@example.com", "2"), true); |
| 1533 | 1413 |
| 1534 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); | 1414 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1535 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1415 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1536 func->set_extension(extension.get()); | 1416 func->set_extension(extension.get()); |
| 1537 func->set_mint_token_flow( | 1417 func->set_auto_login_access_token(false); |
| 1538 scoped_ptr<OAuth2MintTokenFlow>(new TestOAuth2MintTokenFlow( | 1418 func->set_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); |
| 1539 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get()))); | |
| 1540 | 1419 |
| 1541 RunFunctionAsync(func.get(), "[{\"account\": { \"id\": \"1\" } }]"); | 1420 RunFunctionAsync(func.get(), "[{\"account\": { \"id\": \"1\" } }]"); |
| 1542 | 1421 |
| 1543 token_service_->IssueAllTokensForAccount( | 1422 IssueLoginAccessTokenForAccount("primary@example.com"); |
| 1544 "primary@example.com", | |
| 1545 "access_token-primary@example.com", | |
| 1546 base::Time::Now() + base::TimeDelta::FromSeconds(3600)); | |
| 1547 | 1423 |
| 1548 scoped_ptr<base::Value> value(WaitForSingleResult(func.get())); | 1424 scoped_ptr<base::Value> value(WaitForSingleResult(func.get())); |
| 1549 std::string access_token; | 1425 std::string access_token; |
| 1550 EXPECT_TRUE(value->GetAsString(&access_token)); | 1426 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 1551 EXPECT_EQ(std::string(kAccessToken), access_token); | 1427 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 1552 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, | 1428 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, |
| 1553 GetCachedToken(std::string()).status()); | 1429 GetCachedToken(std::string()).status()); |
| 1554 EXPECT_EQ("access_token-primary@example.com", func->login_access_token()); | 1430 EXPECT_EQ("access_token-primary@example.com", func->login_access_token()); |
| 1555 } | 1431 } |
| 1556 | 1432 |
| 1557 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, MultiSecondaryUser) { | 1433 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, MultiSecondaryUser) { |
| 1558 SignIn("primary@example.com"); | 1434 SignIn("primary@example.com"); |
| 1559 token_service_->IssueRefreshTokenForUser("secondary@example.com", | 1435 IssueLoginRefreshTokenForAccount("secondary@example.com"); |
| 1560 "refresh_token"); | |
| 1561 SetAccountState(CreateIds("primary@example.com", "1"), true); | 1436 SetAccountState(CreateIds("primary@example.com", "1"), true); |
| 1562 SetAccountState(CreateIds("secondary@example.com", "2"), true); | 1437 SetAccountState(CreateIds("secondary@example.com", "2"), true); |
| 1563 | 1438 |
| 1564 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); | 1439 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1565 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1440 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1566 func->set_extension(extension.get()); | 1441 func->set_extension(extension.get()); |
| 1567 func->set_mint_token_flow( | 1442 func->set_auto_login_access_token(false); |
| 1568 scoped_ptr<OAuth2MintTokenFlow>(new TestOAuth2MintTokenFlow( | 1443 func->set_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); |
| 1569 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get()))); | |
| 1570 | 1444 |
| 1571 RunFunctionAsync(func.get(), "[{\"account\": { \"id\": \"2\" } }]"); | 1445 RunFunctionAsync(func.get(), "[{\"account\": { \"id\": \"2\" } }]"); |
| 1572 | 1446 |
| 1573 token_service_->IssueAllTokensForAccount( | 1447 IssueLoginAccessTokenForAccount("secondary@example.com"); |
| 1574 "secondary@example.com", | |
| 1575 "access_token-secondary@example.com", | |
| 1576 base::Time::Now() + base::TimeDelta::FromSeconds(3600)); | |
| 1577 | 1448 |
| 1578 scoped_ptr<base::Value> value(WaitForSingleResult(func.get())); | 1449 scoped_ptr<base::Value> value(WaitForSingleResult(func.get())); |
| 1579 std::string access_token; | 1450 std::string access_token; |
| 1580 EXPECT_TRUE(value->GetAsString(&access_token)); | 1451 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 1581 EXPECT_EQ(std::string(kAccessToken), access_token); | 1452 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 1582 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, | 1453 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, |
| 1583 GetCachedToken("secondary@example.com").status()); | 1454 GetCachedToken("secondary@example.com").status()); |
| 1584 EXPECT_EQ("access_token-secondary@example.com", func->login_access_token()); | 1455 EXPECT_EQ("access_token-secondary@example.com", func->login_access_token()); |
| 1585 } | 1456 } |
| 1586 | 1457 |
| 1587 // TODO(courage): negative cases for secondary accounts | 1458 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, MultiUnknownUser) { |
| 1459 SignIn("primary@example.com"); |
| 1460 IssueLoginRefreshTokenForAccount("secondary@example.com"); |
| 1461 SetAccountState(CreateIds("primary@example.com", "1"), true); |
| 1462 SetAccountState(CreateIds("secondary@example.com", "2"), true); |
| 1463 |
| 1464 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1465 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1466 func->set_extension(extension.get()); |
| 1467 func->set_auto_login_access_token(false); |
| 1468 |
| 1469 std::string error = utils::RunFunctionAndReturnError( |
| 1470 func.get(), "[{\"account\": { \"id\": \"3\" } }]", browser()); |
| 1471 EXPECT_EQ(std::string(errors::kUserNotSignedIn), error); |
| 1472 } |
| 1473 |
| 1474 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1475 MultiSecondaryNonInteractiveMintFailure) { |
| 1476 SignIn("primary@example.com"); |
| 1477 IssueLoginRefreshTokenForAccount("secondary@example.com"); |
| 1478 SetAccountState(CreateIds("primary@example.com", "1"), true); |
| 1479 SetAccountState(CreateIds("secondary@example.com", "2"), true); |
| 1480 |
| 1481 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1482 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1483 func->set_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_FAILURE); |
| 1484 std::string error = utils::RunFunctionAndReturnError( |
| 1485 func.get(), "[{\"account\": { \"id\": \"2\" } }]", browser()); |
| 1486 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); |
| 1487 EXPECT_FALSE(func->login_ui_shown()); |
| 1488 EXPECT_FALSE(func->scope_ui_shown()); |
| 1489 } |
| 1490 |
| 1491 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1492 MultiSecondaryNonInteractiveLoginAccessTokenFailure) { |
| 1493 SignIn("primary@example.com"); |
| 1494 IssueLoginRefreshTokenForAccount("secondary@example.com"); |
| 1495 SetAccountState(CreateIds("primary@example.com", "1"), true); |
| 1496 SetAccountState(CreateIds("secondary@example.com", "2"), true); |
| 1497 |
| 1498 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1499 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1500 func->set_login_access_token_result(false); |
| 1501 std::string error = utils::RunFunctionAndReturnError( |
| 1502 func.get(), "[{\"account\": { \"id\": \"2\" } }]", browser()); |
| 1503 EXPECT_TRUE(StartsWithASCII(error, errors::kAuthFailure, false)); |
| 1504 } |
| 1505 |
| 1506 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, |
| 1507 MultiSecondaryInteractiveApprovalAborted) { |
| 1508 SignIn("primary@example.com"); |
| 1509 IssueLoginRefreshTokenForAccount("secondary@example.com"); |
| 1510 SetAccountState(CreateIds("primary@example.com", "1"), true); |
| 1511 SetAccountState(CreateIds("secondary@example.com", "2"), true); |
| 1512 |
| 1513 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1514 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1515 func->set_mint_token_result(TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS); |
| 1516 func->set_scope_ui_failure(GaiaWebAuthFlow::WINDOW_CLOSED); |
| 1517 std::string error = utils::RunFunctionAndReturnError( |
| 1518 func.get(), |
| 1519 "[{\"account\": { \"id\": \"2\" }, \"interactive\": true}]", |
| 1520 browser()); |
| 1521 EXPECT_EQ(std::string(errors::kUserRejected), error); |
| 1522 EXPECT_FALSE(func->login_ui_shown()); |
| 1523 EXPECT_TRUE(func->scope_ui_shown()); |
| 1524 } |
| 1588 | 1525 |
| 1589 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ScopesDefault) { | 1526 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ScopesDefault) { |
| 1590 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1527 SignIn("primary@example.com"); |
| 1528 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1591 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1529 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1592 func->set_extension(extension.get()); | 1530 func->set_extension(extension.get()); |
| 1593 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | 1531 func->set_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); |
| 1594 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | |
| 1595 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get()); | |
| 1596 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 1597 scoped_ptr<base::Value> value( | 1532 scoped_ptr<base::Value> value( |
| 1598 utils::RunFunctionAndReturnSingleResult(func.get(), "[{}]", browser())); | 1533 utils::RunFunctionAndReturnSingleResult(func.get(), "[{}]", browser())); |
| 1599 std::string access_token; | 1534 std::string access_token; |
| 1600 EXPECT_TRUE(value->GetAsString(&access_token)); | 1535 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 1601 EXPECT_EQ(std::string(kAccessToken), access_token); | 1536 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 1602 | 1537 |
| 1603 const ExtensionTokenKey* token_key = func->extension_token_key(); | 1538 const ExtensionTokenKey* token_key = func->GetExtensionTokenKeyForTest(); |
| 1604 EXPECT_EQ(2ul, token_key->scopes.size()); | 1539 EXPECT_EQ(2ul, token_key->scopes.size()); |
| 1605 EXPECT_TRUE(ContainsKey(token_key->scopes, "scope1")); | 1540 EXPECT_TRUE(ContainsKey(token_key->scopes, "scope1")); |
| 1606 EXPECT_TRUE(ContainsKey(token_key->scopes, "scope2")); | 1541 EXPECT_TRUE(ContainsKey(token_key->scopes, "scope2")); |
| 1607 } | 1542 } |
| 1608 | 1543 |
| 1609 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ScopesEmpty) { | 1544 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ScopesEmpty) { |
| 1610 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1545 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1611 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1546 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1612 func->set_extension(extension.get()); | 1547 func->set_extension(extension.get()); |
| 1613 | 1548 |
| 1614 std::string error(utils::RunFunctionAndReturnError( | 1549 std::string error(utils::RunFunctionAndReturnError( |
| 1615 func.get(), "[{\"scopes\": []}]", browser())); | 1550 func.get(), "[{\"scopes\": []}]", browser())); |
| 1616 | 1551 |
| 1617 EXPECT_EQ(errors::kInvalidScopes, error); | 1552 EXPECT_EQ(errors::kInvalidScopes, error); |
| 1618 } | 1553 } |
| 1619 | 1554 |
| 1620 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ScopesEmail) { | 1555 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ScopesEmail) { |
| 1621 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1556 SignIn("primary@example.com"); |
| 1557 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1622 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1558 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1623 func->set_extension(extension.get()); | 1559 func->set_extension(extension.get()); |
| 1624 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | 1560 func->set_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); |
| 1625 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | |
| 1626 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get()); | |
| 1627 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 1628 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( | 1561 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( |
| 1629 func.get(), "[{\"scopes\": [\"email\"]}]", browser())); | 1562 func.get(), "[{\"scopes\": [\"email\"]}]", browser())); |
| 1630 std::string access_token; | 1563 std::string access_token; |
| 1631 EXPECT_TRUE(value->GetAsString(&access_token)); | 1564 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 1632 EXPECT_EQ(std::string(kAccessToken), access_token); | 1565 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 1633 | 1566 |
| 1634 const ExtensionTokenKey* token_key = func->extension_token_key(); | 1567 const ExtensionTokenKey* token_key = func->GetExtensionTokenKeyForTest(); |
| 1635 EXPECT_EQ(1ul, token_key->scopes.size()); | 1568 EXPECT_EQ(1ul, token_key->scopes.size()); |
| 1636 EXPECT_TRUE(ContainsKey(token_key->scopes, "email")); | 1569 EXPECT_TRUE(ContainsKey(token_key->scopes, "email")); |
| 1637 } | 1570 } |
| 1638 | 1571 |
| 1639 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ScopesEmailFooBar) { | 1572 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ScopesEmailFooBar) { |
| 1640 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); | 1573 SignIn("primary@example.com"); |
| 1574 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); |
| 1641 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); | 1575 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); |
| 1642 func->set_extension(extension.get()); | 1576 func->set_extension(extension.get()); |
| 1643 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true)); | 1577 func->set_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); |
| 1644 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( | |
| 1645 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get()); | |
| 1646 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); | |
| 1647 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( | 1578 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( |
| 1648 func.get(), "[{\"scopes\": [\"email\", \"foo\", \"bar\"]}]", browser())); | 1579 func.get(), "[{\"scopes\": [\"email\", \"foo\", \"bar\"]}]", browser())); |
| 1649 std::string access_token; | 1580 std::string access_token; |
| 1650 EXPECT_TRUE(value->GetAsString(&access_token)); | 1581 EXPECT_TRUE(value->GetAsString(&access_token)); |
| 1651 EXPECT_EQ(std::string(kAccessToken), access_token); | 1582 EXPECT_EQ(std::string(kAccessToken), access_token); |
| 1652 | 1583 |
| 1653 const ExtensionTokenKey* token_key = func->extension_token_key(); | 1584 const ExtensionTokenKey* token_key = func->GetExtensionTokenKeyForTest(); |
| 1654 EXPECT_EQ(3ul, token_key->scopes.size()); | 1585 EXPECT_EQ(3ul, token_key->scopes.size()); |
| 1655 EXPECT_TRUE(ContainsKey(token_key->scopes, "email")); | 1586 EXPECT_TRUE(ContainsKey(token_key->scopes, "email")); |
| 1656 EXPECT_TRUE(ContainsKey(token_key->scopes, "foo")); | 1587 EXPECT_TRUE(ContainsKey(token_key->scopes, "foo")); |
| 1657 EXPECT_TRUE(ContainsKey(token_key->scopes, "bar")); | 1588 EXPECT_TRUE(ContainsKey(token_key->scopes, "bar")); |
| 1658 } | 1589 } |
| 1659 | 1590 |
| 1660 class RemoveCachedAuthTokenFunctionTest : public ExtensionBrowserTest { | 1591 class RemoveCachedAuthTokenFunctionTest : public ExtensionBrowserTest { |
| 1661 protected: | 1592 protected: |
| 1662 bool InvalidateDefaultToken() { | 1593 bool InvalidateDefaultToken() { |
| 1663 scoped_refptr<IdentityRemoveCachedAuthTokenFunction> func( | 1594 scoped_refptr<IdentityRemoveCachedAuthTokenFunction> func( |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1887 EXPECT_EQ(std::string("https://abcdefghij.chromiumapp.org/callback#test"), | 1818 EXPECT_EQ(std::string("https://abcdefghij.chromiumapp.org/callback#test"), |
| 1888 url); | 1819 url); |
| 1889 } | 1820 } |
| 1890 | 1821 |
| 1891 } // namespace extensions | 1822 } // namespace extensions |
| 1892 | 1823 |
| 1893 // Tests the chrome.identity API implemented by custom JS bindings . | 1824 // Tests the chrome.identity API implemented by custom JS bindings . |
| 1894 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, ChromeIdentityJsBindings) { | 1825 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, ChromeIdentityJsBindings) { |
| 1895 ASSERT_TRUE(RunExtensionTest("identity/js_bindings")) << message_; | 1826 ASSERT_TRUE(RunExtensionTest("identity/js_bindings")) << message_; |
| 1896 } | 1827 } |
| OLD | NEW |