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

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

Issue 293063002: Multiple account support in chrome.identity.getAuthToken (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix missing word in docs Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <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/strings/string_util.h" 10 #include "base/strings/string_util.h"
11 #include "base/strings/stringprintf.h" 11 #include "base/strings/stringprintf.h"
12 #include "base/values.h" 12 #include "base/values.h"
13 #include "chrome/browser/chrome_notification_types.h" 13 #include "chrome/browser/chrome_notification_types.h"
14 #include "chrome/browser/extensions/api/identity/identity_api.h" 14 #include "chrome/browser/extensions/api/identity/identity_api.h"
15 #include "chrome/browser/extensions/component_loader.h" 15 #include "chrome/browser/extensions/component_loader.h"
16 #include "chrome/browser/extensions/extension_apitest.h" 16 #include "chrome/browser/extensions/extension_apitest.h"
17 #include "chrome/browser/extensions/extension_browsertest.h" 17 #include "chrome/browser/extensions/extension_browsertest.h"
18 #include "chrome/browser/extensions/extension_function_test_utils.h" 18 #include "chrome/browser/extensions/extension_function_test_utils.h"
19 #include "chrome/browser/extensions/extension_service.h" 19 #include "chrome/browser/extensions/extension_service.h"
20 #include "chrome/browser/guest_view/guest_view_base.h" 20 #include "chrome/browser/guest_view/guest_view_base.h"
21 #include "chrome/browser/profiles/profile.h" 21 #include "chrome/browser/profiles/profile.h"
22 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
23 #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h"
24 #include "chrome/browser/signin/fake_signin_manager.h"
25 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
22 #include "chrome/browser/signin/signin_manager_factory.h" 26 #include "chrome/browser/signin/signin_manager_factory.h"
23 #include "chrome/browser/ui/browser.h" 27 #include "chrome/browser/ui/browser.h"
24 #include "chrome/browser/ui/browser_window.h" 28 #include "chrome/browser/ui/browser_window.h"
25 #include "chrome/common/chrome_switches.h" 29 #include "chrome/common/chrome_switches.h"
26 #include "chrome/common/extensions/api/identity.h" 30 #include "chrome/common/extensions/api/identity.h"
27 #include "chrome/common/extensions/api/identity/oauth2_manifest_handler.h" 31 #include "chrome/common/extensions/api/identity/oauth2_manifest_handler.h"
28 #include "chrome/test/base/in_process_browser_test.h" 32 #include "chrome/test/base/in_process_browser_test.h"
29 #include "chrome/test/base/test_switches.h" 33 #include "chrome/test/base/test_switches.h"
30 #include "components/signin/core/browser/signin_manager.h" 34 #include "components/signin/core/browser/signin_manager.h"
31 #include "components/signin/core/common/profile_management_switches.h" 35 #include "components/signin/core/common/profile_management_switches.h"
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 ~MockGetAuthTokenFunction() {} 344 ~MockGetAuthTokenFunction() {}
341 bool login_access_token_result_; 345 bool login_access_token_result_;
342 bool login_ui_result_; 346 bool login_ui_result_;
343 bool scope_ui_result_; 347 bool scope_ui_result_;
344 GaiaWebAuthFlow::Failure scope_ui_failure_; 348 GaiaWebAuthFlow::Failure scope_ui_failure_;
345 std::string scope_ui_oauth_error_; 349 std::string scope_ui_oauth_error_;
346 bool login_ui_shown_; 350 bool login_ui_shown_;
347 bool scope_ui_shown_; 351 bool scope_ui_shown_;
348 }; 352 };
349 353
354 // TODO(courage): Replace MockGetAuthTokenFunction with
355 // FakeGetAuthTokenFunction in all tests.
356
357 class FakeGetAuthTokenFunction : public IdentityGetAuthTokenFunction {
358 public:
359 FakeGetAuthTokenFunction()
360 : login_access_token_result_(true),
361 login_ui_result_(true),
362 scope_ui_result_(true),
363 login_ui_shown_(false),
364 scope_ui_shown_(false) {}
365
366 void set_login_access_token_result(bool result) {
367 login_access_token_result_ = result;
368 }
369
370 void set_login_ui_result(bool result) { login_ui_result_ = result; }
371
372 void set_mint_token_flow(scoped_ptr<OAuth2MintTokenFlow> flow) {
373 flow_ = flow.Pass();
374 }
375
376 void set_scope_ui_failure(GaiaWebAuthFlow::Failure failure) {
377 scope_ui_result_ = false;
378 scope_ui_failure_ = failure;
379 }
380
381 void set_scope_ui_oauth_error(const std::string& oauth_error) {
382 scope_ui_result_ = false;
383 scope_ui_failure_ = GaiaWebAuthFlow::OAUTH_ERROR;
384 scope_ui_oauth_error_ = oauth_error;
385 }
386
387 bool login_ui_shown() const { return login_ui_shown_; }
388
389 bool scope_ui_shown() const { return scope_ui_shown_; }
390
391 std::string login_access_token() const { return login_access_token_; }
392
393 virtual void ShowLoginPopup() OVERRIDE {
394 EXPECT_FALSE(login_ui_shown_);
395 login_ui_shown_ = true;
396 if (login_ui_result_)
397 SigninSuccess();
398 else
399 SigninFailed();
400 }
401
402 virtual void ShowOAuthApprovalDialog(
403 const IssueAdviceInfo& issue_advice) OVERRIDE {
404 scope_ui_shown_ = true;
405
406 if (scope_ui_result_) {
407 OnGaiaFlowCompleted(kAccessToken, "3600");
408 } else if (scope_ui_failure_ == GaiaWebAuthFlow::SERVICE_AUTH_ERROR) {
409 GoogleServiceAuthError error(GoogleServiceAuthError::CONNECTION_FAILED);
410 OnGaiaFlowFailure(scope_ui_failure_, error, "");
411 } else {
412 GoogleServiceAuthError error(GoogleServiceAuthError::NONE);
413 OnGaiaFlowFailure(scope_ui_failure_, error, scope_ui_oauth_error_);
414 }
415 }
416
417 virtual OAuth2MintTokenFlow* CreateMintTokenFlow(
418 const std::string& login_access_token) OVERRIDE {
419 EXPECT_TRUE(login_access_token_.empty());
420 login_access_token_ = login_access_token;
421 return flow_.release();
422 }
423
424 private:
425 virtual ~FakeGetAuthTokenFunction() {}
426 bool login_access_token_result_;
427 bool login_ui_result_;
428 bool scope_ui_result_;
429 GaiaWebAuthFlow::Failure scope_ui_failure_;
430 std::string scope_ui_oauth_error_;
431 bool login_ui_shown_;
432 bool scope_ui_shown_;
433
434 scoped_ptr<OAuth2MintTokenFlow> flow_;
435
436 std::string login_access_token_;
437 };
438
350 class MockQueuedMintRequest : public IdentityMintRequestQueue::Request { 439 class MockQueuedMintRequest : public IdentityMintRequestQueue::Request {
351 public: 440 public:
352 MOCK_METHOD1(StartMintToken, void(IdentityMintRequestQueue::MintType)); 441 MOCK_METHOD1(StartMintToken, void(IdentityMintRequestQueue::MintType));
353 }; 442 };
354 443
444 AccountIds CreateIds(std::string email, std::string obfid) {
445 AccountIds ids;
446 ids.account_key = email;
447 ids.email = email;
448 ids.gaia = obfid;
449 return ids;
450 }
451
355 class IdentityGetAccountsFunctionTest : public ExtensionBrowserTest { 452 class IdentityGetAccountsFunctionTest : public ExtensionBrowserTest {
356 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 453 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
454 ExtensionBrowserTest::SetUpCommandLine(command_line);
357 command_line->AppendSwitch(switches::kExtensionsMultiAccount); 455 command_line->AppendSwitch(switches::kExtensionsMultiAccount);
358 } 456 }
359 457
360 protected: 458 protected:
361 void SetAccountState(AccountIds ids, bool is_signed_in) { 459 void SetAccountState(AccountIds ids, bool is_signed_in) {
362 IdentityAPI::GetFactoryInstance()->Get(profile())->SetAccountStateForTest( 460 IdentityAPI::GetFactoryInstance()->Get(profile())->SetAccountStateForTest(
363 ids, is_signed_in); 461 ids, is_signed_in);
364 } 462 }
365 463
366 AccountIds CreateIds(std::string email, std::string obfid) {
367 AccountIds ids;
368 ids.account_key = email;
369 ids.email = email;
370 ids.gaia = obfid;
371 return ids;
372 }
373
374 testing::AssertionResult ExpectGetAccounts( 464 testing::AssertionResult ExpectGetAccounts(
375 const std::vector<std::string>& accounts) { 465 const std::vector<std::string>& accounts) {
376 scoped_refptr<IdentityGetAccountsFunction> func( 466 scoped_refptr<IdentityGetAccountsFunction> func(
377 new IdentityGetAccountsFunction); 467 new IdentityGetAccountsFunction);
378 func->set_extension(utils::CreateEmptyExtension(kExtensionId).get()); 468 func->set_extension(utils::CreateEmptyExtension(kExtensionId).get());
379 if (!utils::RunFunction( 469 if (!utils::RunFunction(
380 func.get(), std::string("[]"), browser(), utils::NONE)) { 470 func.get(), std::string("[]"), browser(), utils::NONE)) {
381 return GenerateFailureResult(accounts, NULL) 471 return GenerateFailureResult(accounts, NULL)
382 << "getAccounts did not return a result."; 472 << "getAccounts did not return a result.";
383 } 473 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 IN_PROC_BROWSER_TEST_F(IdentityOldProfilesGetAccountsFunctionTest, 575 IN_PROC_BROWSER_TEST_F(IdentityOldProfilesGetAccountsFunctionTest,
486 TwoAccountsSignedIn) { 576 TwoAccountsSignedIn) {
487 SetAccountState(CreateIds("primary@example.com", "1"), true); 577 SetAccountState(CreateIds("primary@example.com", "1"), true);
488 SetAccountState(CreateIds("secondary@example.com", "2"), true); 578 SetAccountState(CreateIds("secondary@example.com", "2"), true);
489 std::vector<std::string> only_primary; 579 std::vector<std::string> only_primary;
490 only_primary.push_back("1"); 580 only_primary.push_back("1");
491 EXPECT_TRUE(ExpectGetAccounts(only_primary)); 581 EXPECT_TRUE(ExpectGetAccounts(only_primary));
492 } 582 }
493 583
494 class GetAuthTokenFunctionTest : public AsyncExtensionBrowserTest { 584 class GetAuthTokenFunctionTest : public AsyncExtensionBrowserTest {
585 public:
586 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
587 AsyncExtensionBrowserTest::SetUpCommandLine(command_line);
588 command_line->AppendSwitch(switches::kExtensionsMultiAccount);
589 }
590
591 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
592 AsyncExtensionBrowserTest::SetUpInProcessBrowserTestFixture();
593
594 will_create_browser_context_services_subscription_ =
595 BrowserContextDependencyManager::GetInstance()
596 ->RegisterWillCreateBrowserContextServicesCallbackForTesting(
597 base::Bind(&GetAuthTokenFunctionTest::
598 OnWillCreateBrowserContextServices,
599 base::Unretained(this)))
600 .Pass();
601 }
602
603 void OnWillCreateBrowserContextServices(content::BrowserContext* context) {
604 // Replace the signin manager and token service with fakes. Do this ahead of
605 // creating the browser so that a bunch of classes don't register as
606 // observers and end up needing to unregister when the fake is substituted.
607 SigninManagerFactory::GetInstance()->SetTestingFactory(
608 context, &FakeSigninManagerBase::Build);
609 ProfileOAuth2TokenServiceFactory::GetInstance()->SetTestingFactory(
610 context, &BuildFakeProfileOAuth2TokenService);
611 }
612
613 virtual void SetUpOnMainThread() OVERRIDE {
614 AsyncExtensionBrowserTest::SetUpOnMainThread();
615
616 // Grab references to the fake signin manager and token service.
617 signin_manager_ = static_cast<FakeSigninManagerForTesting*>(
618 SigninManagerFactory::GetInstance()->GetForProfile(profile()));
619 ASSERT_TRUE(signin_manager_);
620 token_service_ = static_cast<FakeProfileOAuth2TokenService*>(
621 ProfileOAuth2TokenServiceFactory::GetInstance()->GetForProfile(
622 profile()));
623 ASSERT_TRUE(token_service_);
624 }
625
626 void SignIn(const std::string account_key) {
627 #if defined(OS_CHROMEOS)
628 signin_manager_->SetAuthenticatedUsername(account_key);
629 #else
630 signin_manager_->SignIn(account_key, "password");
631 #endif
632 }
633
634 void SetAccountState(AccountIds ids, bool is_signed_in) {
635 IdentityAPI::GetFactoryInstance()->Get(profile())->SetAccountStateForTest(
636 ids, is_signed_in);
637 }
638
495 protected: 639 protected:
496 enum OAuth2Fields { 640 enum OAuth2Fields {
497 NONE = 0, 641 NONE = 0,
498 CLIENT_ID = 1, 642 CLIENT_ID = 1,
499 SCOPES = 2, 643 SCOPES = 2,
500 AS_COMPONENT = 4 644 AS_COMPONENT = 4
501 }; 645 };
502 646
647 FakeSigninManagerForTesting* signin_manager_;
648 FakeProfileOAuth2TokenService* token_service_;
649
503 virtual ~GetAuthTokenFunctionTest() {} 650 virtual ~GetAuthTokenFunctionTest() {}
504 651
505 // Helper to create an extension with specific OAuth2Info fields set. 652 // Helper to create an extension with specific OAuth2Info fields set.
506 // |fields_to_set| should be computed by using fields of Oauth2Fields enum. 653 // |fields_to_set| should be computed by using fields of Oauth2Fields enum.
507 const Extension* CreateExtension(int fields_to_set) { 654 const Extension* CreateExtension(int fields_to_set) {
508 const Extension* ext; 655 const Extension* ext;
509 base::FilePath manifest_path = 656 base::FilePath manifest_path =
510 test_data_dir_.AppendASCII("platform_apps/oauth2"); 657 test_data_dir_.AppendASCII("platform_apps/oauth2");
511 base::FilePath component_manifest_path = 658 base::FilePath component_manifest_path =
512 test_data_dir_.AppendASCII("packaged_app/component_oauth2"); 659 test_data_dir_.AppendASCII("packaged_app/component_oauth2");
(...skipping 24 matching lines...) Expand all
537 SigninManagerBase* signin_manager = 684 SigninManagerBase* signin_manager =
538 SigninManagerFactory::GetForProfile(browser()->profile()); 685 SigninManagerFactory::GetForProfile(browser()->profile());
539 return signin_manager->GetAuthenticatedAccountId(); 686 return signin_manager->GetAuthenticatedAccountId();
540 } 687 }
541 688
542 void SetCachedToken(const IdentityTokenCacheValue& token_data) { 689 void SetCachedToken(const IdentityTokenCacheValue& token_data) {
543 ExtensionTokenKey key(extension_id_, GetPrimaryAccountId(), oauth_scopes_); 690 ExtensionTokenKey key(extension_id_, GetPrimaryAccountId(), oauth_scopes_);
544 id_api()->SetCachedToken(key, token_data); 691 id_api()->SetCachedToken(key, token_data);
545 } 692 }
546 693
547 const IdentityTokenCacheValue& GetCachedToken() { 694 const IdentityTokenCacheValue& GetCachedToken(std::string account_id) {
548 ExtensionTokenKey key(extension_id_, GetPrimaryAccountId(), oauth_scopes_); 695 if (account_id.empty())
696 account_id = GetPrimaryAccountId();
697 ExtensionTokenKey key(extension_id_, account_id, oauth_scopes_);
549 return id_api()->GetCachedToken(key); 698 return id_api()->GetCachedToken(key);
550 } 699 }
551 700
552 void QueueRequestStart(IdentityMintRequestQueue::MintType type, 701 void QueueRequestStart(IdentityMintRequestQueue::MintType type,
553 IdentityMintRequestQueue::Request* request) { 702 IdentityMintRequestQueue::Request* request) {
554 ExtensionTokenKey key(extension_id_, GetPrimaryAccountId(), oauth_scopes_); 703 ExtensionTokenKey key(extension_id_, GetPrimaryAccountId(), oauth_scopes_);
555 id_api()->mint_queue()->RequestStart(type, key, request); 704 id_api()->mint_queue()->RequestStart(type, key, request);
556 } 705 }
557 706
558 void QueueRequestComplete(IdentityMintRequestQueue::MintType type, 707 void QueueRequestComplete(IdentityMintRequestQueue::MintType type,
559 IdentityMintRequestQueue::Request* request) { 708 IdentityMintRequestQueue::Request* request) {
560 ExtensionTokenKey key(extension_id_, GetPrimaryAccountId(), oauth_scopes_); 709 ExtensionTokenKey key(extension_id_, GetPrimaryAccountId(), oauth_scopes_);
561 id_api()->mint_queue()->RequestComplete(type, key, request); 710 id_api()->mint_queue()->RequestComplete(type, key, request);
562 } 711 }
563 712
564 private: 713 private:
565 std::string extension_id_; 714 std::string extension_id_;
566 std::set<std::string> oauth_scopes_; 715 std::set<std::string> oauth_scopes_;
716
717 scoped_ptr<base::CallbackList<void(content::BrowserContext*)>::Subscription>
718 will_create_browser_context_services_subscription_;
567 }; 719 };
568 720
569 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, 721 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
570 NoClientId) { 722 NoClientId) {
571 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); 723 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction());
572 func->set_extension(CreateExtension(SCOPES)); 724 func->set_extension(CreateExtension(SCOPES));
573 std::string error = utils::RunFunctionAndReturnError( 725 std::string error = utils::RunFunctionAndReturnError(
574 func.get(), "[{}]", browser()); 726 func.get(), "[{}]", browser());
575 EXPECT_EQ(std::string(errors::kInvalidClientId), error); 727 EXPECT_EQ(std::string(errors::kInvalidClientId), error);
576 EXPECT_FALSE(func->login_ui_shown()); 728 EXPECT_FALSE(func->login_ui_shown());
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( 789 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow(
638 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get()); 790 TestOAuth2MintTokenFlow::ISSUE_ADVICE_SUCCESS, func.get());
639 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); 791 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow));
640 std::string error = utils::RunFunctionAndReturnError( 792 std::string error = utils::RunFunctionAndReturnError(
641 func.get(), "[{}]", browser()); 793 func.get(), "[{}]", browser());
642 EXPECT_EQ(std::string(errors::kNoGrant), error); 794 EXPECT_EQ(std::string(errors::kNoGrant), error);
643 EXPECT_FALSE(func->login_ui_shown()); 795 EXPECT_FALSE(func->login_ui_shown());
644 EXPECT_FALSE(func->scope_ui_shown()); 796 EXPECT_FALSE(func->scope_ui_shown());
645 797
646 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_ADVICE, 798 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_ADVICE,
647 GetCachedToken().status()); 799 GetCachedToken(std::string()).status());
648 } 800 }
649 801
650 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, 802 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
651 NonInteractiveMintBadCredentials) { 803 NonInteractiveMintBadCredentials) {
652 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); 804 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction());
653 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); 805 func->set_extension(CreateExtension(CLIENT_ID | SCOPES));
654 EXPECT_CALL(*func.get(), HasLoginToken()) 806 EXPECT_CALL(*func.get(), HasLoginToken())
655 .WillOnce(Return(true)); 807 .WillOnce(Return(true));
656 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow( 808 TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow(
657 TestOAuth2MintTokenFlow::MINT_TOKEN_BAD_CREDENTIALS, func.get()); 809 TestOAuth2MintTokenFlow::MINT_TOKEN_BAD_CREDENTIALS, func.get());
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get()); 852 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get());
701 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow)); 853 EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow));
702 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( 854 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult(
703 func.get(), "[{}]", browser())); 855 func.get(), "[{}]", browser()));
704 std::string access_token; 856 std::string access_token;
705 EXPECT_TRUE(value->GetAsString(&access_token)); 857 EXPECT_TRUE(value->GetAsString(&access_token));
706 EXPECT_EQ(std::string(kAccessToken), access_token); 858 EXPECT_EQ(std::string(kAccessToken), access_token);
707 EXPECT_FALSE(func->login_ui_shown()); 859 EXPECT_FALSE(func->login_ui_shown());
708 EXPECT_FALSE(func->scope_ui_shown()); 860 EXPECT_FALSE(func->scope_ui_shown());
709 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, 861 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN,
710 GetCachedToken().status()); 862 GetCachedToken(std::string()).status());
711 } 863 }
712 864
713 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, 865 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
714 InteractiveLoginCanceled) { 866 InteractiveLoginCanceled) {
715 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); 867 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction());
716 func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); 868 func->set_extension(CreateExtension(CLIENT_ID | SCOPES));
717 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(false)); 869 EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(false));
718 func->set_login_ui_result(false); 870 func->set_login_ui_result(false);
719 std::string error = utils::RunFunctionAndReturnError( 871 std::string error = utils::RunFunctionAndReturnError(
720 func.get(), "[{\"interactive\": true}]", browser()); 872 func.get(), "[{\"interactive\": true}]", browser());
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 1108
957 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( 1109 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult(
958 func.get(), "[{\"interactive\": true}]", browser())); 1110 func.get(), "[{\"interactive\": true}]", browser()));
959 std::string access_token; 1111 std::string access_token;
960 EXPECT_TRUE(value->GetAsString(&access_token)); 1112 EXPECT_TRUE(value->GetAsString(&access_token));
961 EXPECT_EQ(std::string(kAccessToken), access_token); 1113 EXPECT_EQ(std::string(kAccessToken), access_token);
962 EXPECT_FALSE(func->login_ui_shown()); 1114 EXPECT_FALSE(func->login_ui_shown());
963 EXPECT_TRUE(func->scope_ui_shown()); 1115 EXPECT_TRUE(func->scope_ui_shown());
964 1116
965 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, 1117 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN,
966 GetCachedToken().status()); 1118 GetCachedToken(std::string()).status());
967 } 1119 }
968 1120
969 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, NoninteractiveQueue) { 1121 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, NoninteractiveQueue) {
970 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); 1122 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES));
971 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); 1123 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction());
972 func->set_extension(extension.get()); 1124 func->set_extension(extension.get());
973 1125
974 // Create a fake request to block the queue. 1126 // Create a fake request to block the queue.
975 MockQueuedMintRequest queued_request; 1127 MockQueuedMintRequest queued_request;
976 IdentityMintRequestQueue::MintType type = 1128 IdentityMintRequestQueue::MintType type =
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
1217 .WillOnce(Return(flow)); 1369 .WillOnce(Return(flow));
1218 1370
1219 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult( 1371 scoped_ptr<base::Value> value(utils::RunFunctionAndReturnSingleResult(
1220 func.get(), "[{\"interactive\": true}]", browser())); 1372 func.get(), "[{\"interactive\": true}]", browser()));
1221 std::string access_token; 1373 std::string access_token;
1222 EXPECT_TRUE(value->GetAsString(&access_token)); 1374 EXPECT_TRUE(value->GetAsString(&access_token));
1223 EXPECT_EQ(std::string(kAccessToken), access_token); 1375 EXPECT_EQ(std::string(kAccessToken), access_token);
1224 EXPECT_TRUE(func->login_ui_shown()); 1376 EXPECT_TRUE(func->login_ui_shown());
1225 EXPECT_TRUE(func->scope_ui_shown()); 1377 EXPECT_TRUE(func->scope_ui_shown());
1226 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, 1378 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN,
1227 GetCachedToken().status()); 1379 GetCachedToken(std::string()).status());
1228 } 1380 }
1229 1381
1230 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ComponentWithChromeClientId) { 1382 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ComponentWithChromeClientId) {
1231 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); 1383 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction());
1232 scoped_refptr<const Extension> extension( 1384 scoped_refptr<const Extension> extension(
1233 CreateExtension(SCOPES | AS_COMPONENT)); 1385 CreateExtension(SCOPES | AS_COMPONENT));
1234 func->set_extension(extension.get()); 1386 func->set_extension(extension.get());
1235 const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension.get()); 1387 const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension.get());
1236 EXPECT_TRUE(oauth2_info.client_id.empty()); 1388 EXPECT_TRUE(oauth2_info.client_id.empty());
1237 EXPECT_FALSE(func->GetOAuth2ClientId().empty()); 1389 EXPECT_FALSE(func->GetOAuth2ClientId().empty());
1238 EXPECT_NE("client1", func->GetOAuth2ClientId()); 1390 EXPECT_NE("client1", func->GetOAuth2ClientId());
1239 } 1391 }
1240 1392
1241 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ComponentWithNormalClientId) { 1393 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ComponentWithNormalClientId) {
1242 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction()); 1394 scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction());
1243 scoped_refptr<const Extension> extension( 1395 scoped_refptr<const Extension> extension(
1244 CreateExtension(CLIENT_ID | SCOPES | AS_COMPONENT)); 1396 CreateExtension(CLIENT_ID | SCOPES | AS_COMPONENT));
1245 func->set_extension(extension.get()); 1397 func->set_extension(extension.get());
1246 EXPECT_EQ("client1", func->GetOAuth2ClientId()); 1398 EXPECT_EQ("client1", func->GetOAuth2ClientId());
1247 } 1399 }
1248 1400
1401 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, MultiDefaultUser) {
1402 SignIn("primary@example.com");
1403 token_service_->IssueRefreshTokenForUser("primary@example.com",
1404 "refresh_token");
1405 SetAccountState(CreateIds("primary@example.com", "1"), true);
1406 SetAccountState(CreateIds("secondary@example.com", "2"), true);
1407
1408 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction());
1409 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES));
1410 func->set_extension(extension.get());
1411 func->set_mint_token_flow(
1412 scoped_ptr<OAuth2MintTokenFlow>(new TestOAuth2MintTokenFlow(
1413 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get())));
1414
1415 RunFunctionAsync(func.get(), "[{}]");
1416
1417 token_service_->IssueAllTokensForAccount(
1418 "primary@example.com",
1419 "access_token-primary@example.com",
1420 base::Time::Now() + base::TimeDelta::FromSeconds(3600));
1421
1422 scoped_ptr<base::Value> value(WaitForSingleResult(func.get()));
1423 std::string access_token;
1424 EXPECT_TRUE(value->GetAsString(&access_token));
1425 EXPECT_EQ(std::string(kAccessToken), access_token);
1426 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN,
1427 GetCachedToken(std::string()).status());
1428 EXPECT_EQ("access_token-primary@example.com", func->login_access_token());
1429 }
1430
1431 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, MultiPrimaryUser) {
1432 SignIn("primary@example.com");
1433 token_service_->IssueRefreshTokenForUser("primary@example.com",
1434 "refresh_token");
1435 SetAccountState(CreateIds("primary@example.com", "1"), true);
1436 SetAccountState(CreateIds("secondary@example.com", "2"), true);
1437
1438 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction());
1439 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES));
1440 func->set_extension(extension.get());
1441 func->set_mint_token_flow(
1442 scoped_ptr<OAuth2MintTokenFlow>(new TestOAuth2MintTokenFlow(
1443 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get())));
1444
1445 RunFunctionAsync(func.get(), "[{\"account\": { \"id\": \"1\" } }]");
1446
1447 token_service_->IssueAllTokensForAccount(
1448 "primary@example.com",
1449 "access_token-primary@example.com",
1450 base::Time::Now() + base::TimeDelta::FromSeconds(3600));
1451
1452 scoped_ptr<base::Value> value(WaitForSingleResult(func.get()));
1453 std::string access_token;
1454 EXPECT_TRUE(value->GetAsString(&access_token));
1455 EXPECT_EQ(std::string(kAccessToken), access_token);
1456 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN,
1457 GetCachedToken(std::string()).status());
1458 EXPECT_EQ("access_token-primary@example.com", func->login_access_token());
1459 }
1460
1461 IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, MultiSecondaryUser) {
fgorski 2014/06/03 23:46:41 are you planning to add negative tests for seconda
Michael Courage 2014/06/04 23:37:38 TODO added
1462 SignIn("primary@example.com");
1463 token_service_->IssueRefreshTokenForUser("secondary@example.com",
1464 "refresh_token");
1465 SetAccountState(CreateIds("primary@example.com", "1"), true);
1466 SetAccountState(CreateIds("secondary@example.com", "2"), true);
1467
1468 scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction());
1469 scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES));
1470 func->set_extension(extension.get());
1471 func->set_mint_token_flow(
1472 scoped_ptr<OAuth2MintTokenFlow>(new TestOAuth2MintTokenFlow(
1473 TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get())));
1474
1475 RunFunctionAsync(func.get(), "[{\"account\": { \"id\": \"2\" } }]");
1476
1477 token_service_->IssueAllTokensForAccount(
1478 "secondary@example.com",
1479 "access_token-secondary@example.com",
1480 base::Time::Now() + base::TimeDelta::FromSeconds(3600));
1481
1482 scoped_ptr<base::Value> value(WaitForSingleResult(func.get()));
1483 std::string access_token;
1484 EXPECT_TRUE(value->GetAsString(&access_token));
1485 EXPECT_EQ(std::string(kAccessToken), access_token);
1486 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN,
1487 GetCachedToken("secondary@example.com").status());
1488 EXPECT_EQ("access_token-secondary@example.com", func->login_access_token());
1489 }
1490
1249 class RemoveCachedAuthTokenFunctionTest : public ExtensionBrowserTest { 1491 class RemoveCachedAuthTokenFunctionTest : public ExtensionBrowserTest {
1250 protected: 1492 protected:
1251 bool InvalidateDefaultToken() { 1493 bool InvalidateDefaultToken() {
1252 scoped_refptr<IdentityRemoveCachedAuthTokenFunction> func( 1494 scoped_refptr<IdentityRemoveCachedAuthTokenFunction> func(
1253 new IdentityRemoveCachedAuthTokenFunction); 1495 new IdentityRemoveCachedAuthTokenFunction);
1254 func->set_extension(utils::CreateEmptyExtension(kExtensionId).get()); 1496 func->set_extension(utils::CreateEmptyExtension(kExtensionId).get());
1255 return utils::RunFunction( 1497 return utils::RunFunction(
1256 func.get(), 1498 func.get(),
1257 std::string("[{\"token\": \"") + kAccessToken + "\"}]", 1499 std::string("[{\"token\": \"") + kAccessToken + "\"}]",
1258 browser(), 1500 browser(),
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1310 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, 1552 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN,
1311 GetCachedToken().status()); 1553 GetCachedToken().status());
1312 EXPECT_TRUE(InvalidateDefaultToken()); 1554 EXPECT_TRUE(InvalidateDefaultToken());
1313 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_NOTFOUND, 1555 EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_NOTFOUND,
1314 GetCachedToken().status()); 1556 GetCachedToken().status());
1315 } 1557 }
1316 1558
1317 class LaunchWebAuthFlowFunctionTest : public AsyncExtensionBrowserTest { 1559 class LaunchWebAuthFlowFunctionTest : public AsyncExtensionBrowserTest {
1318 public: 1560 public:
1319 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 1561 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
1562 AsyncExtensionBrowserTest::SetUpCommandLine(command_line);
1320 // Reduce performance test variance by disabling background networking. 1563 // Reduce performance test variance by disabling background networking.
1321 command_line->AppendSwitch(switches::kDisableBackgroundNetworking); 1564 command_line->AppendSwitch(switches::kDisableBackgroundNetworking);
1322 } 1565 }
1323 }; 1566 };
1324 1567
1325 IN_PROC_BROWSER_TEST_F(LaunchWebAuthFlowFunctionTest, UserCloseWindow) { 1568 IN_PROC_BROWSER_TEST_F(LaunchWebAuthFlowFunctionTest, UserCloseWindow) {
1326 net::SpawnedTestServer https_server( 1569 net::SpawnedTestServer https_server(
1327 net::SpawnedTestServer::TYPE_HTTPS, 1570 net::SpawnedTestServer::TYPE_HTTPS,
1328 net::SpawnedTestServer::kLocalhost, 1571 net::SpawnedTestServer::kLocalhost,
1329 base::FilePath(FILE_PATH_LITERAL( 1572 base::FilePath(FILE_PATH_LITERAL(
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1475 EXPECT_EQ(std::string("https://abcdefghij.chromiumapp.org/callback#test"), 1718 EXPECT_EQ(std::string("https://abcdefghij.chromiumapp.org/callback#test"),
1476 url); 1719 url);
1477 } 1720 }
1478 1721
1479 } // namespace extensions 1722 } // namespace extensions
1480 1723
1481 // Tests the chrome.identity API implemented by custom JS bindings . 1724 // Tests the chrome.identity API implemented by custom JS bindings .
1482 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, ChromeIdentityJsBindings) { 1725 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, ChromeIdentityJsBindings) {
1483 ASSERT_TRUE(RunExtensionTest("identity/js_bindings")) << message_; 1726 ASSERT_TRUE(RunExtensionTest("identity/js_bindings")) << message_;
1484 } 1727 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698