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 "base/prefs/pref_service.h" | 5 #include "base/prefs/pref_service.h" |
6 #include "base/prefs/scoped_user_pref_update.h" | 6 #include "base/prefs/scoped_user_pref_update.h" |
7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
9 #include "base/values.h" | 9 #include "base/values.h" |
10 #include "chrome/browser/chrome_notification_types.h" | 10 #include "chrome/browser/chrome_notification_types.h" |
11 #include "chrome/browser/content_settings/cookie_settings.h" | 11 #include "chrome/browser/content_settings/cookie_settings.h" |
12 #include "chrome/browser/custom_handlers/protocol_handler_registry.h" | 12 #include "chrome/browser/custom_handlers/protocol_handler_registry.h" |
13 #include "chrome/browser/profiles/profile.h" | 13 #include "chrome/browser/profiles/profile.h" |
14 #include "chrome/browser/profiles/profile_info_cache.h" | 14 #include "chrome/browser/profiles/profile_info_cache.h" |
15 #include "chrome/browser/profiles/profile_io_data.h" | 15 #include "chrome/browser/profiles/profile_io_data.h" |
16 #include "chrome/browser/profiles/profile_manager.h" | 16 #include "chrome/browser/profiles/profile_manager.h" |
17 #include "chrome/browser/signin/chrome_signin_client.h" | 17 #include "chrome/browser/signin/chrome_signin_client.h" |
18 #include "chrome/browser/signin/chrome_signin_client_factory.h" | 18 #include "chrome/browser/signin/chrome_signin_client_factory.h" |
19 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" | 19 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" |
20 #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" | 20 #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" |
21 #include "chrome/browser/signin/fake_signin_manager.h" | 21 #include "chrome/browser/signin/fake_signin_manager.h" |
22 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 22 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
23 #include "chrome/browser/signin/signin_manager.h" | 23 #include "chrome/browser/signin/signin_manager.h" |
24 #include "chrome/browser/signin/signin_manager_factory.h" | 24 #include "chrome/browser/signin/signin_manager_factory.h" |
25 #include "chrome/browser/signin/signin_names_io_thread.h" | 25 #include "chrome/browser/signin/signin_names_io_thread.h" |
26 #include "chrome/browser/signin/signin_promo.h" | 26 #include "chrome/browser/signin/signin_promo.h" |
27 #include "chrome/browser/sync/profile_sync_service_factory.h" | 27 #include "chrome/browser/sync/profile_sync_service_factory.h" |
28 #include "chrome/browser/sync/profile_sync_service_mock.h" | |
29 #include "chrome/browser/sync/test_profile_sync_service.h" | 28 #include "chrome/browser/sync/test_profile_sync_service.h" |
30 #include "chrome/browser/ui/sync/one_click_signin_helper.h" | 29 #include "chrome/browser/ui/sync/one_click_signin_helper.h" |
31 #include "chrome/browser/ui/webui/signin/login_ui_service.h" | 30 #include "chrome/browser/ui/webui/signin/login_ui_service.h" |
32 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" | 31 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" |
33 #include "chrome/common/pref_names.h" | 32 #include "chrome/common/pref_names.h" |
34 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 33 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
35 #include "chrome/test/base/testing_browser_process.h" | 34 #include "chrome/test/base/testing_browser_process.h" |
36 #include "chrome/test/base/testing_pref_service_syncable.h" | 35 #include "chrome/test/base/testing_pref_service_syncable.h" |
37 #include "chrome/test/base/testing_profile.h" | 36 #include "chrome/test/base/testing_profile.h" |
38 #include "chrome/test/base/testing_profile_manager.h" | 37 #include "chrome/test/base/testing_profile_manager.h" |
39 #include "components/autofill/core/common/password_form.h" | 38 #include "components/autofill/core/common/password_form.h" |
40 #include "components/signin/core/browser/profile_oauth2_token_service.h" | 39 #include "components/signin/core/browser/profile_oauth2_token_service.h" |
41 #include "components/sync_driver/pref_names.h" | 40 #include "components/sync_driver/pref_names.h" |
42 #include "content/public/browser/browser_context.h" | 41 #include "content/public/browser/browser_context.h" |
43 #include "content/public/browser/navigation_details.h" | 42 #include "content/public/browser/navigation_details.h" |
44 #include "content/public/browser/web_contents.h" | 43 #include "content/public/browser/web_contents.h" |
45 #include "content/public/common/frame_navigate_params.h" | 44 #include "content/public/common/frame_navigate_params.h" |
46 #include "content/public/common/url_constants.h" | 45 #include "content/public/common/url_constants.h" |
47 #include "content/public/test/mock_render_process_host.h" | 46 #include "content/public/test/mock_render_process_host.h" |
48 #include "grit/chromium_strings.h" | 47 #include "grit/chromium_strings.h" |
49 #include "grit/generated_resources.h" | 48 #include "grit/generated_resources.h" |
| 49 #include "testing/gmock/include/gmock/gmock.h" |
50 #include "testing/gtest/include/gtest/gtest.h" | 50 #include "testing/gtest/include/gtest/gtest.h" |
51 #include "ui/base/l10n/l10n_util.h" | 51 #include "ui/base/l10n/l10n_util.h" |
52 | 52 |
53 using ::testing::_; | 53 using ::testing::_; |
54 using ::testing::AtLeast; | 54 using ::testing::AtLeast; |
55 using ::testing::Return; | 55 using ::testing::Return; |
56 | 56 |
57 namespace { | 57 namespace { |
58 | 58 |
59 class SigninManagerMock : public FakeSigninManager { | 59 class SigninManagerMock : public FakeSigninManager { |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 } | 153 } |
154 }; | 154 }; |
155 | 155 |
156 class TestURLRequest : public base::SupportsUserData { | 156 class TestURLRequest : public base::SupportsUserData { |
157 public: | 157 public: |
158 TestURLRequest() {} | 158 TestURLRequest() {} |
159 virtual ~TestURLRequest() {} | 159 virtual ~TestURLRequest() {} |
160 }; | 160 }; |
161 | 161 |
162 class OneClickTestProfileSyncService : public TestProfileSyncService { | 162 class OneClickTestProfileSyncService : public TestProfileSyncService { |
163 public: | 163 public: |
164 virtual ~OneClickTestProfileSyncService() {} | 164 virtual ~OneClickTestProfileSyncService() {} |
165 | 165 |
166 // Helper routine to be used in conjunction with | 166 // Helper routine to be used in conjunction with |
167 // BrowserContextKeyedServiceFactory::SetTestingFactory(). | 167 // BrowserContextKeyedServiceFactory::SetTestingFactory(). |
168 static KeyedService* Build(content::BrowserContext* profile) { | 168 static KeyedService* Build(content::BrowserContext* profile) { |
169 return new OneClickTestProfileSyncService(static_cast<Profile*>(profile)); | 169 return new OneClickTestProfileSyncService(static_cast<Profile*>(profile)); |
170 } | 170 } |
171 | 171 |
172 // Need to control this for certain tests. | 172 // Need to control this for certain tests. |
173 virtual bool FirstSetupInProgress() const OVERRIDE { | 173 virtual bool FirstSetupInProgress() const OVERRIDE { |
174 return first_setup_in_progress_; | 174 return first_setup_in_progress_; |
175 } | 175 } |
176 | 176 |
177 // Controls return value of FirstSetupInProgress. Because some bits | 177 virtual bool sync_initialized() const OVERRIDE { return true; } |
178 // of UI depend on that value, it's useful to control it separately | |
179 // from the internal work and components that are triggered (such as | |
180 // ReconfigureDataTypeManager) to facilitate unit tests. | |
181 void set_first_setup_in_progress(bool in_progress) { | |
182 first_setup_in_progress_ = in_progress; | |
183 } | |
184 | 178 |
185 private: | 179 // Controls return value of FirstSetupInProgress. Because some bits |
186 explicit OneClickTestProfileSyncService(Profile* profile) | 180 // of UI depend on that value, it's useful to control it separately |
187 : TestProfileSyncService( | 181 // from the internal work and components that are triggered (such as |
188 NULL, | 182 // ReconfigureDataTypeManager) to facilitate unit tests. |
189 profile, | 183 void set_first_setup_in_progress(bool in_progress) { |
190 SigninManagerFactory::GetForProfile(profile), | 184 first_setup_in_progress_ = in_progress; |
191 ProfileOAuth2TokenServiceFactory::GetForProfile(profile), | 185 } |
192 browser_sync::MANUAL_START), | |
193 first_setup_in_progress_(false) {} | |
194 | 186 |
195 bool first_setup_in_progress_; | 187 private: |
| 188 explicit OneClickTestProfileSyncService(Profile* profile) |
| 189 : TestProfileSyncService( |
| 190 NULL, |
| 191 profile, |
| 192 SigninManagerFactory::GetForProfile(profile), |
| 193 ProfileOAuth2TokenServiceFactory::GetForProfile(profile), |
| 194 browser_sync::MANUAL_START), |
| 195 first_setup_in_progress_(false) {} |
| 196 |
| 197 bool first_setup_in_progress_; |
196 }; | 198 }; |
197 | 199 |
198 } // namespace | 200 } // namespace |
199 | 201 |
200 class OneClickSigninHelperTest : public ChromeRenderViewHostTestHarness { | 202 class OneClickSigninHelperTest : public ChromeRenderViewHostTestHarness { |
201 public: | 203 public: |
202 OneClickSigninHelperTest(); | 204 OneClickSigninHelperTest(); |
203 | 205 |
204 virtual void SetUp() OVERRIDE; | 206 virtual void SetUp() OVERRIDE; |
205 virtual void TearDown() OVERRIDE; | 207 virtual void TearDown() OVERRIDE; |
206 | 208 |
207 // Sets up the sign-in manager for tests. If |username| is | 209 // Sets up the sign-in manager for tests. If |username| is |
208 // is not empty, the profile of the mock WebContents will be connected to | 210 // is not empty, the profile of the mock WebContents will be connected to |
209 // the given account. | 211 // the given account. |
210 void SetUpSigninManager(const std::string& username); | 212 void SetUpSigninManager(const std::string& username); |
211 | 213 |
212 // Set the ID of the signin process that the test will assume to be the | 214 // Set the ID of the signin process that the test will assume to be the |
213 // only process allowed to sign the user in to Chrome. | 215 // only process allowed to sign the user in to Chrome. |
214 void SetTrustedSigninProcessID(int id); | 216 void SetTrustedSigninProcessID(int id); |
215 | 217 |
216 void AddEmailToOneClickRejectedList(const std::string& email); | 218 void AddEmailToOneClickRejectedList(const std::string& email); |
217 void EnableOneClick(bool enable); | 219 void EnableOneClick(bool enable); |
218 void AllowSigninCookies(bool enable); | 220 void AllowSigninCookies(bool enable); |
219 void SetAllowedUsernamePattern(const std::string& pattern); | 221 void SetAllowedUsernamePattern(const std::string& pattern); |
220 ProfileSyncServiceMock* CreateProfileSyncServiceMock(); | |
221 void SubmitGAIAPassword(OneClickSigninHelper* helper); | 222 void SubmitGAIAPassword(OneClickSigninHelper* helper); |
222 | 223 |
223 SigninManagerMock* signin_manager_; | 224 SigninManagerMock* signin_manager_; |
224 FakeProfileOAuth2TokenService* fake_oauth2_token_service_; | 225 FakeProfileOAuth2TokenService* fake_oauth2_token_service_; |
225 | 226 |
226 protected: | 227 protected: |
227 GoogleServiceAuthError no_error_; | 228 GoogleServiceAuthError no_error_; |
228 | 229 |
229 private: | 230 private: |
230 // ChromeRenderViewHostTestHarness overrides: | 231 // ChromeRenderViewHostTestHarness overrides: |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 cookie_settings->SetDefaultCookieSetting(enable ? CONTENT_SETTING_ALLOW | 294 cookie_settings->SetDefaultCookieSetting(enable ? CONTENT_SETTING_ALLOW |
294 : CONTENT_SETTING_BLOCK); | 295 : CONTENT_SETTING_BLOCK); |
295 } | 296 } |
296 | 297 |
297 void OneClickSigninHelperTest::SetAllowedUsernamePattern( | 298 void OneClickSigninHelperTest::SetAllowedUsernamePattern( |
298 const std::string& pattern) { | 299 const std::string& pattern) { |
299 PrefService* local_state = g_browser_process->local_state(); | 300 PrefService* local_state = g_browser_process->local_state(); |
300 local_state->SetString(prefs::kGoogleServicesUsernamePattern, pattern); | 301 local_state->SetString(prefs::kGoogleServicesUsernamePattern, pattern); |
301 } | 302 } |
302 | 303 |
303 ProfileSyncServiceMock* | |
304 OneClickSigninHelperTest::CreateProfileSyncServiceMock() { | |
305 ProfileSyncServiceMock* sync_service = static_cast<ProfileSyncServiceMock*>( | |
306 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( | |
307 profile(), | |
308 ProfileSyncServiceMock::BuildMockProfileSyncService)); | |
309 EXPECT_CALL(*sync_service, FirstSetupInProgress()).WillRepeatedly( | |
310 Return(false)); | |
311 EXPECT_CALL(*sync_service, sync_initialized()).WillRepeatedly(Return(true)); | |
312 EXPECT_CALL(*sync_service, GetAuthError()). | |
313 WillRepeatedly(::testing::ReturnRef(no_error_)); | |
314 EXPECT_CALL(*sync_service, sync_initialized()).WillRepeatedly(Return(false)); | |
315 ON_CALL(*sync_service, GetRegisteredDataTypes()) | |
316 .WillByDefault(Return(syncer::ModelTypeSet())); | |
317 sync_service->Initialize(); | |
318 return sync_service; | |
319 } | |
320 | |
321 void OneClickSigninHelperTest::SubmitGAIAPassword( | 304 void OneClickSigninHelperTest::SubmitGAIAPassword( |
322 OneClickSigninHelper* helper) { | 305 OneClickSigninHelper* helper) { |
323 autofill::PasswordForm password_form; | 306 autofill::PasswordForm password_form; |
324 password_form.origin = GURL("https://accounts.google.com"); | 307 password_form.origin = GURL("https://accounts.google.com"); |
325 password_form.signon_realm = "https://accounts.google.com"; | 308 password_form.signon_realm = "https://accounts.google.com"; |
326 password_form.password_value = base::UTF8ToUTF16("password"); | 309 password_form.password_value = base::UTF8ToUTF16("password"); |
327 helper->PasswordSubmitted(password_form); | 310 helper->PasswordSubmitted(password_form); |
328 } | 311 } |
329 | 312 |
330 content::BrowserContext* OneClickSigninHelperTest::CreateBrowserContext() { | 313 content::BrowserContext* OneClickSigninHelperTest::CreateBrowserContext() { |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
455 TEST_F(OneClickSigninHelperTest, CanOfferFirstSetup) { | 438 TEST_F(OneClickSigninHelperTest, CanOfferFirstSetup) { |
456 SetUpSigninManager(std::string()); | 439 SetUpSigninManager(std::string()); |
457 | 440 |
458 EXPECT_CALL(*signin_manager_, IsAllowedUsername(_)). | 441 EXPECT_CALL(*signin_manager_, IsAllowedUsername(_)). |
459 WillRepeatedly(Return(true)); | 442 WillRepeatedly(Return(true)); |
460 | 443 |
461 // Invoke OneClickTestProfileSyncService factory function and grab result. | 444 // Invoke OneClickTestProfileSyncService factory function and grab result. |
462 OneClickTestProfileSyncService* sync = | 445 OneClickTestProfileSyncService* sync = |
463 static_cast<OneClickTestProfileSyncService*>( | 446 static_cast<OneClickTestProfileSyncService*>( |
464 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 447 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
465 static_cast<Profile*>(browser_context()), | 448 profile(), OneClickTestProfileSyncService::Build)); |
466 OneClickTestProfileSyncService::Build)); | |
467 sync->Initialize(); | 449 sync->Initialize(); |
468 sync->set_first_setup_in_progress(true); | 450 sync->set_first_setup_in_progress(true); |
469 | 451 |
470 EXPECT_TRUE(OneClickSigninHelper::CanOffer( | 452 EXPECT_TRUE(OneClickSigninHelper::CanOffer( |
471 web_contents(), | 453 web_contents(), |
472 OneClickSigninHelper::CAN_OFFER_FOR_ALL, | 454 OneClickSigninHelper::CAN_OFFER_FOR_ALL, |
473 "foo@gmail.com", NULL)); | 455 "foo@gmail.com", NULL)); |
474 EXPECT_TRUE(OneClickSigninHelper::CanOffer( | 456 EXPECT_TRUE(OneClickSigninHelper::CanOffer( |
475 web_contents(), | 457 web_contents(), |
476 OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY, | 458 OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY, |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
667 } | 649 } |
668 | 650 |
669 // If Chrome signin is triggered from a webstore install, and user chooses to | 651 // If Chrome signin is triggered from a webstore install, and user chooses to |
670 // config sync, then Chrome should redirect immediately to sync settings page, | 652 // config sync, then Chrome should redirect immediately to sync settings page, |
671 // and upon successful setup, redirect back to webstore. | 653 // and upon successful setup, redirect back to webstore. |
672 TEST_F(OneClickSigninHelperTest, SigninFromWebstoreWithConfigSyncfirst) { | 654 TEST_F(OneClickSigninHelperTest, SigninFromWebstoreWithConfigSyncfirst) { |
673 SetUpSigninManager(std::string()); | 655 SetUpSigninManager(std::string()); |
674 EXPECT_CALL(*signin_manager_, IsAllowedUsername(_)) | 656 EXPECT_CALL(*signin_manager_, IsAllowedUsername(_)) |
675 .WillRepeatedly(Return(true)); | 657 .WillRepeatedly(Return(true)); |
676 | 658 |
677 ProfileSyncServiceMock* sync_service = CreateProfileSyncServiceMock(); | 659 TestProfileSyncService* sync_service = |
678 EXPECT_CALL(*sync_service, AddObserver(_)).Times(AtLeast(1)); | 660 static_cast<TestProfileSyncService*>( |
679 EXPECT_CALL(*sync_service, RemoveObserver(_)).Times(AtLeast(1)); | 661 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
680 EXPECT_CALL(*sync_service, sync_initialized()).WillRepeatedly(Return(true)); | 662 profile(), OneClickTestProfileSyncService::Build)); |
681 | 663 |
682 content::WebContents* contents = web_contents(); | 664 content::WebContents* contents = web_contents(); |
683 | 665 |
684 OneClickSigninHelper::CreateForWebContentsWithPasswordManager(contents, NULL); | 666 OneClickSigninHelper::CreateForWebContentsWithPasswordManager(contents, NULL); |
685 OneClickSigninHelper* helper = | 667 OneClickSigninHelper* helper = |
686 OneClickSigninHelper::FromWebContents(contents); | 668 OneClickSigninHelper::FromWebContents(contents); |
687 helper->SetDoNotClearPendingEmailForTesting(); | 669 helper->SetDoNotClearPendingEmailForTesting(); |
688 helper->set_do_not_start_sync_for_testing(); | 670 helper->set_do_not_start_sync_for_testing(); |
689 | 671 |
690 GURL continueUrl("https://chrome.google.com/webstore?source=5"); | 672 GURL continueUrl("https://chrome.google.com/webstore?source=5"); |
691 OneClickSigninHelper::ShowInfoBarUIThread( | 673 OneClickSigninHelper::ShowInfoBarUIThread( |
692 "session_index", "user@gmail.com", | 674 "session_index", "user@gmail.com", |
693 OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT, | 675 OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT, |
694 signin::SOURCE_WEBSTORE_INSTALL, | 676 signin::SOURCE_WEBSTORE_INSTALL, |
695 continueUrl, process()->GetID(), rvh()->GetRoutingID()); | 677 continueUrl, process()->GetID(), rvh()->GetRoutingID()); |
696 | 678 |
697 SubmitGAIAPassword(helper); | 679 SubmitGAIAPassword(helper); |
698 | 680 |
699 NavigateAndCommit(GURL("https://chrome.google.com/webstore?source=3")); | 681 NavigateAndCommit(GURL("https://chrome.google.com/webstore?source=3")); |
700 helper->DidStopLoading(rvh()); | 682 helper->DidStopLoading(rvh()); |
701 helper->OnStateChanged(); | 683 sync_service->NotifyObservers(); |
702 EXPECT_EQ(GURL(continueUrl), contents->GetURL()); | 684 EXPECT_EQ(GURL(continueUrl), contents->GetVisibleURL()); |
703 } | 685 } |
704 | 686 |
705 // Checks that the state of OneClickSigninHelper is cleaned when there is a | 687 // Checks that the state of OneClickSigninHelper is cleaned when there is a |
706 // navigation away from the sign in flow that is not triggered by the | 688 // navigation away from the sign in flow that is not triggered by the |
707 // web contents. | 689 // web contents. |
708 TEST_F(OneClickSigninHelperTest, CleanTransientStateOnNavigate) { | 690 TEST_F(OneClickSigninHelperTest, CleanTransientStateOnNavigate) { |
709 content::WebContents* contents = web_contents(); | 691 content::WebContents* contents = web_contents(); |
710 | 692 |
711 OneClickSigninHelper::CreateForWebContentsWithPasswordManager(contents, NULL); | 693 OneClickSigninHelper::CreateForWebContentsWithPasswordManager(contents, NULL); |
712 OneClickSigninHelper* helper = | 694 OneClickSigninHelper* helper = |
713 OneClickSigninHelper::FromWebContents(contents); | 695 OneClickSigninHelper::FromWebContents(contents); |
714 helper->SetDoNotClearPendingEmailForTesting(); | 696 helper->SetDoNotClearPendingEmailForTesting(); |
715 helper->auto_accept_ = OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT; | 697 helper->auto_accept_ = OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT; |
716 | 698 |
717 content::LoadCommittedDetails details; | 699 content::LoadCommittedDetails details; |
718 content::FrameNavigateParams params; | 700 content::FrameNavigateParams params; |
719 params.url = GURL("http://crbug.com"); | 701 params.url = GURL("http://crbug.com"); |
720 params.transition = content::PAGE_TRANSITION_TYPED; | 702 params.transition = content::PAGE_TRANSITION_TYPED; |
721 helper->DidNavigateMainFrame(details, params); | 703 helper->DidNavigateMainFrame(details, params); |
722 | 704 |
723 EXPECT_EQ(OneClickSigninHelper::AUTO_ACCEPT_NONE, helper->auto_accept_); | 705 EXPECT_EQ(OneClickSigninHelper::AUTO_ACCEPT_NONE, helper->auto_accept_); |
724 } | 706 } |
725 | 707 |
726 // Checks that OneClickSigninHelper doesn't stay an observer of the profile | |
727 // sync service after it's deleted. | |
728 TEST_F(OneClickSigninHelperTest, RemoveObserverFromProfileSyncService) { | |
729 content::WebContents* contents = web_contents(); | |
730 | |
731 ProfileSyncServiceMock* sync_service = CreateProfileSyncServiceMock(); | |
732 | |
733 OneClickSigninHelper::CreateForWebContentsWithPasswordManager(contents, NULL); | |
734 OneClickSigninHelper* helper = | |
735 OneClickSigninHelper::FromWebContents(contents); | |
736 helper->SetDoNotClearPendingEmailForTesting(); | |
737 | |
738 // Need to expect two calls, because sync service also tears down observers. | |
739 // TODO(signin): gmock probably isn't the best solution here. | |
740 EXPECT_CALL(*sync_service, RemoveObserver(_)); | |
741 EXPECT_CALL(*sync_service, RemoveObserver(helper)); | |
742 SetContents(NULL); | |
743 } | |
744 | |
745 // I/O thread tests | 708 // I/O thread tests |
746 | 709 |
747 TEST_F(OneClickSigninHelperIOTest, CanOfferOnIOThread) { | 710 TEST_F(OneClickSigninHelperIOTest, CanOfferOnIOThread) { |
748 scoped_ptr<TestProfileIOData> io_data( | 711 scoped_ptr<TestProfileIOData> io_data( |
749 CreateTestProfileIOData(Profile::REGULAR_PROFILE)); | 712 CreateTestProfileIOData(Profile::REGULAR_PROFILE)); |
750 EXPECT_EQ(OneClickSigninHelper::CAN_OFFER, | 713 EXPECT_EQ(OneClickSigninHelper::CAN_OFFER, |
751 OneClickSigninHelper::CanOfferOnIOThreadImpl( | 714 OneClickSigninHelper::CanOfferOnIOThreadImpl( |
752 valid_gaia_url_, &request_, io_data.get())); | 715 valid_gaia_url_, &request_, io_data.get())); |
753 } | 716 } |
754 | 717 |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1011 args.email = "foo@gmail.com"; | 974 args.email = "foo@gmail.com"; |
1012 args.profile = profile(); | 975 args.profile = profile(); |
1013 MockStarterWrapper* wrapper = new MockStarterWrapper( | 976 MockStarterWrapper* wrapper = new MockStarterWrapper( |
1014 args, OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS); | 977 args, OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS); |
1015 SetCookie("LSID=1234; domain=google.com; secure; httponly"); | 978 SetCookie("LSID=1234; domain=google.com; secure; httponly"); |
1016 | 979 |
1017 EXPECT_CALL(*wrapper, DisplayErrorBubble(_)); | 980 EXPECT_CALL(*wrapper, DisplayErrorBubble(_)); |
1018 wrapper->Start(); | 981 wrapper->Start(); |
1019 base::RunLoop().RunUntilIdle(); | 982 base::RunLoop().RunUntilIdle(); |
1020 } | 983 } |
OLD | NEW |