| 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 "chrome/browser/ui/webui/sync_setup_handler.h" | 5 #include "chrome/browser/ui/webui/sync_setup_handler.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/json/json_writer.h" | 10 #include "base/json/json_writer.h" |
| 11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
| 12 #include "base/message_loop.h" | 12 #include "base/message_loop.h" |
| 13 #include "base/prefs/pref_service.h" | 13 #include "base/prefs/pref_service.h" |
| 14 #include "base/stl_util.h" | 14 #include "base/stl_util.h" |
| 15 #include "base/values.h" | 15 #include "base/values.h" |
| 16 #include "chrome/browser/signin/fake_auth_status_provider.h" | 16 #include "chrome/browser/signin/fake_auth_status_provider.h" |
| 17 #include "chrome/browser/signin/fake_signin_manager.h" | 17 #include "chrome/browser/signin/fake_signin_manager.h" |
| 18 #include "chrome/browser/signin/signin_manager.h" |
| 18 #include "chrome/browser/signin/signin_manager_factory.h" | 19 #include "chrome/browser/signin/signin_manager_factory.h" |
| 19 #include "chrome/browser/sync/profile_sync_service_factory.h" | 20 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 20 #include "chrome/browser/sync/profile_sync_service_mock.h" | 21 #include "chrome/browser/sync/profile_sync_service_mock.h" |
| 21 #include "chrome/browser/ui/webui/signin/login_ui_service.h" | 22 #include "chrome/browser/ui/webui/signin/login_ui_service.h" |
| 22 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" | 23 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" |
| 23 #include "chrome/browser/ui/webui/sync_promo/sync_promo_ui.h" | 24 #include "chrome/browser/ui/webui/sync_promo/sync_promo_ui.h" |
| 24 #include "chrome/common/chrome_switches.h" | 25 #include "chrome/common/chrome_switches.h" |
| 25 #include "chrome/common/pref_names.h" | 26 #include "chrome/common/pref_names.h" |
| 26 #include "chrome/test/base/testing_profile.h" | 27 #include "chrome/test/base/testing_profile.h" |
| 27 #include "content/public/browser/web_ui.h" | 28 #include "content/public/browser/web_ui.h" |
| (...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 using SyncSetupHandler::have_signin_tracker; | 313 using SyncSetupHandler::have_signin_tracker; |
| 313 | 314 |
| 314 private: | 315 private: |
| 315 virtual void DisplayGaiaLoginInNewTabOrWindow() OVERRIDE {} | 316 virtual void DisplayGaiaLoginInNewTabOrWindow() OVERRIDE {} |
| 316 | 317 |
| 317 // Weak pointer to parent profile. | 318 // Weak pointer to parent profile. |
| 318 Profile* profile_; | 319 Profile* profile_; |
| 319 DISALLOW_COPY_AND_ASSIGN(TestingSyncSetupHandler); | 320 DISALLOW_COPY_AND_ASSIGN(TestingSyncSetupHandler); |
| 320 }; | 321 }; |
| 321 | 322 |
| 322 class SigninManagerMock : public FakeSigninManager { | 323 class SigninManagerBaseMock : public FakeSigninManagerBase { |
| 323 public: | 324 public: |
| 324 explicit SigninManagerMock(Profile* profile) : FakeSigninManager(profile) {} | 325 explicit SigninManagerBaseMock(Profile* profile) |
| 326 : FakeSigninManagerBase(profile) {} |
| 325 MOCK_CONST_METHOD1(IsAllowedUsername, bool(const std::string& username)); | 327 MOCK_CONST_METHOD1(IsAllowedUsername, bool(const std::string& username)); |
| 326 }; | 328 }; |
| 327 | 329 |
| 328 static ProfileKeyedService* BuildSigninManagerMock(Profile* profile) { | 330 static ProfileKeyedService* BuildSigninManagerBaseMock(Profile* profile) { |
| 329 return new SigninManagerMock(profile); | 331 return new SigninManagerBaseMock(profile); |
| 330 } | 332 } |
| 331 | 333 |
| 332 // The boolean parameter indicates whether the test is run with ClientOAuth | 334 // The boolean parameter indicates whether the test is run with ClientOAuth |
| 333 // or not. The test parameter is a bool: whether or not to test with/ | 335 // or not. The test parameter is a bool: whether or not to test with/ |
| 334 // /ClientLogin enabled or not. | 336 // /ClientLogin enabled or not. |
| 335 class SyncSetupHandlerTest : public testing::TestWithParam<bool> { | 337 class SyncSetupHandlerTest : public testing::TestWithParam<bool> { |
| 336 public: | 338 public: |
| 337 SyncSetupHandlerTest() : error_(GoogleServiceAuthError::NONE) {} | 339 SyncSetupHandlerTest() : error_(GoogleServiceAuthError::NONE) {} |
| 338 virtual void SetUp() OVERRIDE { | 340 virtual void SetUp() OVERRIDE { |
| 339 bool use_client_login_flow = GetParam(); | 341 bool use_client_login_flow = GetParam(); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 355 profile_.get(), | 357 profile_.get(), |
| 356 ProfileSyncServiceMock::BuildMockProfileSyncService)); | 358 ProfileSyncServiceMock::BuildMockProfileSyncService)); |
| 357 mock_pss_->Initialize(); | 359 mock_pss_->Initialize(); |
| 358 | 360 |
| 359 ON_CALL(*mock_pss_, GetPassphraseType()).WillByDefault( | 361 ON_CALL(*mock_pss_, GetPassphraseType()).WillByDefault( |
| 360 Return(syncer::IMPLICIT_PASSPHRASE)); | 362 Return(syncer::IMPLICIT_PASSPHRASE)); |
| 361 ON_CALL(*mock_pss_, GetPassphraseTime()).WillByDefault( | 363 ON_CALL(*mock_pss_, GetPassphraseTime()).WillByDefault( |
| 362 Return(base::Time())); | 364 Return(base::Time())); |
| 363 ON_CALL(*mock_pss_, GetExplicitPassphraseTime()).WillByDefault( | 365 ON_CALL(*mock_pss_, GetExplicitPassphraseTime()).WillByDefault( |
| 364 Return(base::Time())); | 366 Return(base::Time())); |
| 365 mock_signin_ = static_cast<SigninManagerMock*>( | 367 mock_signin_ = static_cast<SigninManagerBase*>( |
| 366 SigninManagerFactory::GetInstance()->SetTestingFactoryAndUse( | 368 SigninManagerFactory::GetInstance()->SetTestingFactoryAndUse( |
| 367 profile_.get(), BuildSigninManagerMock)); | 369 profile_.get(), BuildSigninManagerBaseMock)); |
| 368 handler_.reset(new TestingSyncSetupHandler(&web_ui_, profile_.get())); | 370 handler_.reset(new TestingSyncSetupHandler(&web_ui_, profile_.get())); |
| 369 } | 371 } |
| 370 | 372 |
| 371 // Setup the expectations for calls made when displaying the config page. | 373 // Setup the expectations for calls made when displaying the config page. |
| 372 void SetDefaultExpectationsForConfigPage() { | 374 void SetDefaultExpectationsForConfigPage() { |
| 373 EXPECT_CALL(*mock_pss_, GetRegisteredDataTypes()). | 375 EXPECT_CALL(*mock_pss_, GetRegisteredDataTypes()). |
| 374 WillRepeatedly(Return(GetAllTypes())); | 376 WillRepeatedly(Return(GetAllTypes())); |
| 375 EXPECT_CALL(*mock_pss_, GetPreferredDataTypes()). | 377 EXPECT_CALL(*mock_pss_, GetPreferredDataTypes()). |
| 376 WillRepeatedly(Return(GetAllTypes())); | 378 WillRepeatedly(Return(GetAllTypes())); |
| 377 EXPECT_CALL(*mock_pss_, EncryptEverythingEnabled()). | 379 EXPECT_CALL(*mock_pss_, EncryptEverythingEnabled()). |
| (...skipping 30 matching lines...) Expand all Loading... |
| 408 std::string page; | 410 std::string page; |
| 409 ASSERT_TRUE(data.arg1->GetAsString(&page)); | 411 ASSERT_TRUE(data.arg1->GetAsString(&page)); |
| 410 EXPECT_EQ(page, "done"); | 412 EXPECT_EQ(page, "done"); |
| 411 } | 413 } |
| 412 | 414 |
| 413 scoped_ptr<Profile> profile_; | 415 scoped_ptr<Profile> profile_; |
| 414 ProfileSyncServiceMock* mock_pss_; | 416 ProfileSyncServiceMock* mock_pss_; |
| 415 GoogleServiceAuthError error_; | 417 GoogleServiceAuthError error_; |
| 416 // MessageLoop instance is required to work with OneShotTimer. | 418 // MessageLoop instance is required to work with OneShotTimer. |
| 417 MessageLoop message_loop_; | 419 MessageLoop message_loop_; |
| 418 SigninManagerMock* mock_signin_; | 420 SigninManagerBase* mock_signin_; |
| 419 TestWebUI web_ui_; | 421 TestWebUI web_ui_; |
| 420 scoped_ptr<TestingSyncSetupHandler> handler_; | 422 scoped_ptr<TestingSyncSetupHandler> handler_; |
| 421 }; | 423 }; |
| 422 | 424 |
| 423 TEST_P(SyncSetupHandlerTest, Basic) { | 425 TEST_P(SyncSetupHandlerTest, Basic) { |
| 424 } | 426 } |
| 425 | 427 |
| 426 TEST_P(SyncSetupHandlerTest, DisplayBasicLogin) { | 428 TEST_P(SyncSetupHandlerTest, DisplayBasicLogin) { |
| 427 EXPECT_CALL(*mock_pss_, IsSyncEnabledAndLoggedIn()) | 429 EXPECT_CALL(*mock_pss_, IsSyncEnabledAndLoggedIn()) |
| 428 .WillRepeatedly(Return(false)); | 430 .WillRepeatedly(Return(false)); |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 656 EXPECT_EQ(page, "spinner"); | 658 EXPECT_EQ(page, "spinner"); |
| 657 GoogleServiceAuthError error( | 659 GoogleServiceAuthError error( |
| 658 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); | 660 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS); |
| 659 handler_->SigninFailed(error); | 661 handler_->SigninFailed(error); |
| 660 // On failure, the dialog will be closed. | 662 // On failure, the dialog will be closed. |
| 661 EXPECT_EQ(NULL, | 663 EXPECT_EQ(NULL, |
| 662 LoginUIServiceFactory::GetForProfile( | 664 LoginUIServiceFactory::GetForProfile( |
| 663 profile_.get())->current_login_ui()); | 665 profile_.get())->current_login_ui()); |
| 664 } | 666 } |
| 665 | 667 |
| 666 TEST_P(SyncSetupHandlerTest, HandleGaiaAuthFailure) { | 668 #if !defined(OS_CHROMEOS) |
| 669 |
| 670 namespace { |
| 671 class SigninManagerMock : public FakeSigninManager { |
| 672 public: |
| 673 explicit SigninManagerMock(Profile* profile) : FakeSigninManager(profile) { |
| 674 } |
| 675 |
| 676 virtual void StartSignIn(const std::string& username, |
| 677 const std::string& password, |
| 678 const std::string& login_token, |
| 679 const std::string& login_captcha) OVERRIDE { |
| 680 SetAuthenticatedUsername(username); |
| 681 } |
| 682 |
| 683 MOCK_CONST_METHOD1(IsAllowedUsername, bool(const std::string& username)); |
| 684 }; |
| 685 } |
| 686 |
| 687 static ProfileKeyedService* BuildSigninManagerMock(Profile* profile) { |
| 688 return new SigninManagerMock(profile); |
| 689 } |
| 690 |
| 691 class SyncSetupHandlerNonCrosTest : public SyncSetupHandlerTest { |
| 692 public: |
| 693 SyncSetupHandlerNonCrosTest() {} |
| 694 virtual void SetUp() OVERRIDE { |
| 695 SyncSetupHandlerTest::SetUp(); |
| 696 mock_signin_ = static_cast<SigninManagerMock*>( |
| 697 SigninManagerFactory::GetInstance()->SetTestingFactoryAndUse( |
| 698 profile_.get(), BuildSigninManagerMock)); |
| 699 } |
| 700 }; |
| 701 |
| 702 TEST_P(SyncSetupHandlerNonCrosTest, HandleGaiaAuthFailure) { |
| 667 EXPECT_CALL(*mock_pss_, IsSyncEnabledAndLoggedIn()) | 703 EXPECT_CALL(*mock_pss_, IsSyncEnabledAndLoggedIn()) |
| 668 .WillRepeatedly(Return(false)); | 704 .WillRepeatedly(Return(false)); |
| 669 EXPECT_CALL(*mock_pss_, IsSyncTokenAvailable()) | 705 EXPECT_CALL(*mock_pss_, IsSyncTokenAvailable()) |
| 670 .WillRepeatedly(Return(false)); | 706 .WillRepeatedly(Return(false)); |
| 671 EXPECT_CALL(*mock_pss_, HasUnrecoverableError()) | 707 EXPECT_CALL(*mock_pss_, HasUnrecoverableError()) |
| 672 .WillRepeatedly(Return(false)); | 708 .WillRepeatedly(Return(false)); |
| 673 EXPECT_CALL(*mock_pss_, HasSyncSetupCompleted()) | 709 EXPECT_CALL(*mock_pss_, HasSyncSetupCompleted()) |
| 674 .WillRepeatedly(Return(false)); | 710 .WillRepeatedly(Return(false)); |
| 675 // Open the web UI. | 711 // Open the web UI. |
| 676 handler_->OpenSyncSetup(false); | 712 handler_->OpenSyncSetup(false); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 699 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS, | 735 GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS, |
| 700 kTestUser, | 736 kTestUser, |
| 701 true, | 737 true, |
| 702 std::string()); | 738 std::string()); |
| 703 } else { | 739 } else { |
| 704 ASSERT_FALSE(handler_->is_configuring_sync()); | 740 ASSERT_FALSE(handler_->is_configuring_sync()); |
| 705 ASSERT_TRUE(handler_->have_signin_tracker()); | 741 ASSERT_TRUE(handler_->have_signin_tracker()); |
| 706 } | 742 } |
| 707 } | 743 } |
| 708 | 744 |
| 709 TEST_P(SyncSetupHandlerTest, HandleCaptcha) { | 745 TEST_P(SyncSetupHandlerNonCrosTest, HandleCaptcha) { |
| 710 EXPECT_CALL(*mock_pss_, IsSyncEnabledAndLoggedIn()) | 746 EXPECT_CALL(*mock_pss_, IsSyncEnabledAndLoggedIn()) |
| 711 .WillRepeatedly(Return(false)); | 747 .WillRepeatedly(Return(false)); |
| 712 EXPECT_CALL(*mock_pss_, IsSyncTokenAvailable()) | 748 EXPECT_CALL(*mock_pss_, IsSyncTokenAvailable()) |
| 713 .WillRepeatedly(Return(false)); | 749 .WillRepeatedly(Return(false)); |
| 714 EXPECT_CALL(*mock_pss_, HasUnrecoverableError()) | 750 EXPECT_CALL(*mock_pss_, HasUnrecoverableError()) |
| 715 .WillRepeatedly(Return(false)); | 751 .WillRepeatedly(Return(false)); |
| 716 EXPECT_CALL(*mock_pss_, HasSyncSetupCompleted()) | 752 EXPECT_CALL(*mock_pss_, HasSyncSetupCompleted()) |
| 717 .WillRepeatedly(Return(false)); | 753 .WillRepeatedly(Return(false)); |
| 718 // Open the web UI. | 754 // Open the web UI. |
| 719 handler_->OpenSyncSetup(false); | 755 handler_->OpenSyncSetup(false); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 743 kTestUser, | 779 kTestUser, |
| 744 true, | 780 true, |
| 745 kTestCaptchaImageUrl); | 781 kTestCaptchaImageUrl); |
| 746 } else { | 782 } else { |
| 747 ASSERT_FALSE(handler_->is_configuring_sync()); | 783 ASSERT_FALSE(handler_->is_configuring_sync()); |
| 748 ASSERT_TRUE(handler_->have_signin_tracker()); | 784 ASSERT_TRUE(handler_->have_signin_tracker()); |
| 749 } | 785 } |
| 750 } | 786 } |
| 751 | 787 |
| 752 // TODO(kochi): We need equivalent tests for ChromeOS. | 788 // TODO(kochi): We need equivalent tests for ChromeOS. |
| 753 TEST_P(SyncSetupHandlerTest, UnrecoverableErrorInitializingSync) { | 789 TEST_P(SyncSetupHandlerNonCrosTest, UnrecoverableErrorInitializingSync) { |
| 754 EXPECT_CALL(*mock_pss_, IsSyncEnabledAndLoggedIn()) | 790 EXPECT_CALL(*mock_pss_, IsSyncEnabledAndLoggedIn()) |
| 755 .WillRepeatedly(Return(false)); | 791 .WillRepeatedly(Return(false)); |
| 756 EXPECT_CALL(*mock_pss_, IsSyncTokenAvailable()) | 792 EXPECT_CALL(*mock_pss_, IsSyncTokenAvailable()) |
| 757 .WillRepeatedly(Return(false)); | 793 .WillRepeatedly(Return(false)); |
| 758 EXPECT_CALL(*mock_pss_, HasSyncSetupCompleted()) | 794 EXPECT_CALL(*mock_pss_, HasSyncSetupCompleted()) |
| 759 .WillRepeatedly(Return(false)); | 795 .WillRepeatedly(Return(false)); |
| 760 // Open the web UI. | 796 // Open the web UI. |
| 761 handler_->OpenSyncSetup(false); | 797 handler_->OpenSyncSetup(false); |
| 762 | 798 |
| 763 if (!SyncPromoUI::UseWebBasedSigninFlow()) { | 799 if (!SyncPromoUI::UseWebBasedSigninFlow()) { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 792 GoogleServiceAuthError::NONE, | 828 GoogleServiceAuthError::NONE, |
| 793 kTestUser, | 829 kTestUser, |
| 794 true, | 830 true, |
| 795 std::string()); | 831 std::string()); |
| 796 } else { | 832 } else { |
| 797 ASSERT_FALSE(handler_->is_configuring_sync()); | 833 ASSERT_FALSE(handler_->is_configuring_sync()); |
| 798 ASSERT_TRUE(handler_->have_signin_tracker()); | 834 ASSERT_TRUE(handler_->have_signin_tracker()); |
| 799 } | 835 } |
| 800 } | 836 } |
| 801 | 837 |
| 802 TEST_P(SyncSetupHandlerTest, GaiaErrorInitializingSync) { | 838 TEST_P(SyncSetupHandlerNonCrosTest, GaiaErrorInitializingSync) { |
| 803 EXPECT_CALL(*mock_pss_, IsSyncEnabledAndLoggedIn()) | 839 EXPECT_CALL(*mock_pss_, IsSyncEnabledAndLoggedIn()) |
| 804 .WillRepeatedly(Return(false)); | 840 .WillRepeatedly(Return(false)); |
| 805 EXPECT_CALL(*mock_pss_, IsSyncTokenAvailable()) | 841 EXPECT_CALL(*mock_pss_, IsSyncTokenAvailable()) |
| 806 .WillRepeatedly(Return(false)); | 842 .WillRepeatedly(Return(false)); |
| 807 EXPECT_CALL(*mock_pss_, HasSyncSetupCompleted()) | 843 EXPECT_CALL(*mock_pss_, HasSyncSetupCompleted()) |
| 808 .WillRepeatedly(Return(false)); | 844 .WillRepeatedly(Return(false)); |
| 809 // Open the web UI. | 845 // Open the web UI. |
| 810 handler_->OpenSyncSetup(false); | 846 handler_->OpenSyncSetup(false); |
| 811 | 847 |
| 812 if (!SyncPromoUI::UseWebBasedSigninFlow()) { | 848 if (!SyncPromoUI::UseWebBasedSigninFlow()) { |
| (...skipping 29 matching lines...) Expand all Loading... |
| 842 GoogleServiceAuthError::SERVICE_UNAVAILABLE, | 878 GoogleServiceAuthError::SERVICE_UNAVAILABLE, |
| 843 kTestUser, | 879 kTestUser, |
| 844 true, | 880 true, |
| 845 std::string()); | 881 std::string()); |
| 846 } else { | 882 } else { |
| 847 ASSERT_FALSE(handler_->is_configuring_sync()); | 883 ASSERT_FALSE(handler_->is_configuring_sync()); |
| 848 ASSERT_TRUE(handler_->have_signin_tracker()); | 884 ASSERT_TRUE(handler_->have_signin_tracker()); |
| 849 } | 885 } |
| 850 } | 886 } |
| 851 | 887 |
| 888 // Tests that trying to log in with an invalid username results in an error |
| 889 // displayed to the user. |
| 890 TEST_P(SyncSetupHandlerNonCrosTest, SubmitAuthWithInvalidUsername) { |
| 891 SigninManagerMock* mock_signin = |
| 892 static_cast<SigninManagerMock*>(mock_signin_); |
| 893 EXPECT_CALL(*mock_signin, IsAllowedUsername(_)). |
| 894 WillRepeatedly(Return(false)); |
| 895 |
| 896 // Generate a blob of json that matches what would be submitted by the login |
| 897 // javascript code. |
| 898 DictionaryValue args; |
| 899 args.SetString("user", "user@not_allowed.com"); |
| 900 args.SetString("pass", "password"); |
| 901 args.SetString("captcha", std::string()); |
| 902 args.SetString("otp", std::string()); |
| 903 args.SetString("accessCode", std::string()); |
| 904 std::string json; |
| 905 base::JSONWriter::Write(&args, &json); |
| 906 ListValue list_args; |
| 907 list_args.Append(new StringValue(json)); |
| 908 |
| 909 // Mimic a login attempt from the UI. |
| 910 handler_->HandleSubmitAuth(&list_args); |
| 911 |
| 912 // Should result in the login page being displayed again. |
| 913 ASSERT_EQ(1U, web_ui_.call_data().size()); |
| 914 const TestWebUI::CallData& data = web_ui_.call_data()[0]; |
| 915 EXPECT_EQ("SyncSetupOverlay.showSyncSetupPage", data.function_name); |
| 916 std::string page; |
| 917 ASSERT_TRUE(data.arg1->GetAsString(&page)); |
| 918 EXPECT_EQ(page, "login"); |
| 919 |
| 920 // Also make sure that the appropriate error message is being passed. |
| 921 DictionaryValue* dictionary; |
| 922 ASSERT_TRUE(data.arg2->GetAsDictionary(&dictionary)); |
| 923 std::string err = l10n_util::GetStringUTF8(IDS_SYNC_LOGIN_NAME_PROHIBITED); |
| 924 CheckShowSyncSetupArgs(dictionary, |
| 925 err, |
| 926 false, |
| 927 GoogleServiceAuthError::NONE, |
| 928 std::string(), |
| 929 true, |
| 930 std::string()); |
| 931 handler_->CloseSyncSetup(); |
| 932 EXPECT_EQ(NULL, |
| 933 LoginUIServiceFactory::GetForProfile( |
| 934 profile_.get())->current_login_ui()); |
| 935 } |
| 936 |
| 937 #endif // #if !defined(OS_CHROMEOS) |
| 938 |
| 852 TEST_P(SyncSetupHandlerTest, TestSyncEverything) { | 939 TEST_P(SyncSetupHandlerTest, TestSyncEverything) { |
| 853 std::string args = GetConfiguration( | 940 std::string args = GetConfiguration( |
| 854 NULL, SYNC_ALL_DATA, GetAllTypes(), std::string(), ENCRYPT_PASSWORDS); | 941 NULL, SYNC_ALL_DATA, GetAllTypes(), std::string(), ENCRYPT_PASSWORDS); |
| 855 ListValue list_args; | 942 ListValue list_args; |
| 856 list_args.Append(new StringValue(args)); | 943 list_args.Append(new StringValue(args)); |
| 857 EXPECT_CALL(*mock_pss_, IsPassphraseRequiredForDecryption()) | 944 EXPECT_CALL(*mock_pss_, IsPassphraseRequiredForDecryption()) |
| 858 .WillRepeatedly(Return(false)); | 945 .WillRepeatedly(Return(false)); |
| 859 EXPECT_CALL(*mock_pss_, IsPassphraseRequired()) | 946 EXPECT_CALL(*mock_pss_, IsPassphraseRequired()) |
| 860 .WillRepeatedly(Return(false)); | 947 .WillRepeatedly(Return(false)); |
| 861 SetupInitializedProfileSyncService(); | 948 SetupInitializedProfileSyncService(); |
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1246 // This should display the sync setup dialog (not login). | 1333 // This should display the sync setup dialog (not login). |
| 1247 handler_->OpenSyncSetup(false); | 1334 handler_->OpenSyncSetup(false); |
| 1248 | 1335 |
| 1249 ExpectConfig(); | 1336 ExpectConfig(); |
| 1250 const TestWebUI::CallData& data = web_ui_.call_data()[0]; | 1337 const TestWebUI::CallData& data = web_ui_.call_data()[0]; |
| 1251 DictionaryValue* dictionary; | 1338 DictionaryValue* dictionary; |
| 1252 ASSERT_TRUE(data.arg2->GetAsDictionary(&dictionary)); | 1339 ASSERT_TRUE(data.arg2->GetAsDictionary(&dictionary)); |
| 1253 CheckBool(dictionary, "encryptAllData", true); | 1340 CheckBool(dictionary, "encryptAllData", true); |
| 1254 } | 1341 } |
| 1255 | 1342 |
| 1256 // Tests that trying to log in with an invalid username results in an error | |
| 1257 // displayed to the user. | |
| 1258 TEST_P(SyncSetupHandlerTest, SubmitAuthWithInvalidUsername) { | |
| 1259 EXPECT_CALL(*mock_signin_, IsAllowedUsername(_)). | |
| 1260 WillRepeatedly(Return(false)); | |
| 1261 | |
| 1262 // Generate a blob of json that matches what would be submitted by the login | |
| 1263 // javascript code. | |
| 1264 DictionaryValue args; | |
| 1265 args.SetString("user", "user@not_allowed.com"); | |
| 1266 args.SetString("pass", "password"); | |
| 1267 args.SetString("captcha", std::string()); | |
| 1268 args.SetString("otp", std::string()); | |
| 1269 args.SetString("accessCode", std::string()); | |
| 1270 std::string json; | |
| 1271 base::JSONWriter::Write(&args, &json); | |
| 1272 ListValue list_args; | |
| 1273 list_args.Append(new StringValue(json)); | |
| 1274 | |
| 1275 // Mimic a login attempt from the UI. | |
| 1276 handler_->HandleSubmitAuth(&list_args); | |
| 1277 | |
| 1278 // Should result in the login page being displayed again. | |
| 1279 ASSERT_EQ(1U, web_ui_.call_data().size()); | |
| 1280 const TestWebUI::CallData& data = web_ui_.call_data()[0]; | |
| 1281 EXPECT_EQ("SyncSetupOverlay.showSyncSetupPage", data.function_name); | |
| 1282 std::string page; | |
| 1283 ASSERT_TRUE(data.arg1->GetAsString(&page)); | |
| 1284 EXPECT_EQ(page, "login"); | |
| 1285 | |
| 1286 // Also make sure that the appropriate error message is being passed. | |
| 1287 DictionaryValue* dictionary; | |
| 1288 ASSERT_TRUE(data.arg2->GetAsDictionary(&dictionary)); | |
| 1289 std::string err = l10n_util::GetStringUTF8(IDS_SYNC_LOGIN_NAME_PROHIBITED); | |
| 1290 CheckShowSyncSetupArgs(dictionary, | |
| 1291 err, | |
| 1292 false, | |
| 1293 GoogleServiceAuthError::NONE, | |
| 1294 std::string(), | |
| 1295 true, | |
| 1296 std::string()); | |
| 1297 handler_->CloseSyncSetup(); | |
| 1298 EXPECT_EQ(NULL, | |
| 1299 LoginUIServiceFactory::GetForProfile( | |
| 1300 profile_.get())->current_login_ui()); | |
| 1301 } | |
| 1302 | |
| 1303 INSTANTIATE_TEST_CASE_P(SyncSetupHandlerTestWithParam, | 1343 INSTANTIATE_TEST_CASE_P(SyncSetupHandlerTestWithParam, |
| 1304 SyncSetupHandlerTest, | 1344 SyncSetupHandlerTest, |
| 1305 Values(true, false)); | 1345 Values(true, false)); |
| OLD | NEW |