| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/sync/one_click_signin_sync_observer.h" | 5 #include "chrome/browser/ui/sync/one_click_signin_sync_observer.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 virtual ~MockWebContentsObserver() {} | 42 virtual ~MockWebContentsObserver() {} |
| 43 | 43 |
| 44 // A hook to verify that the OneClickSigninSyncObserver initiated a redirect | 44 // A hook to verify that the OneClickSigninSyncObserver initiated a redirect |
| 45 // to the continue URL. Navigations in unit_tests never complete, but a | 45 // to the continue URL. Navigations in unit_tests never complete, but a |
| 46 // navigation start is a sufficient signal for the purposes of this test. | 46 // navigation start is a sufficient signal for the purposes of this test. |
| 47 // Listening for this call also has the advantage of being synchronous. | 47 // Listening for this call also has the advantage of being synchronous. |
| 48 MOCK_METHOD2(DidStartNavigationToPendingEntry, | 48 MOCK_METHOD2(DidStartNavigationToPendingEntry, |
| 49 void(const GURL&, content::ReloadType)); | 49 void(const GURL&, content::ReloadType)); |
| 50 }; | 50 }; |
| 51 | 51 |
| 52 class OneClickTestProfileSyncService : public TestProfileSyncService { | 52 class OneClickTestProfileSyncService |
| 53 : public browser_sync::TestProfileSyncService { |
| 53 public: | 54 public: |
| 54 ~OneClickTestProfileSyncService() override {} | 55 ~OneClickTestProfileSyncService() override {} |
| 55 | 56 |
| 56 // Helper routine to be used in conjunction with | 57 // Helper routine to be used in conjunction with |
| 57 // BrowserContextKeyedServiceFactory::SetTestingFactory(). | 58 // BrowserContextKeyedServiceFactory::SetTestingFactory(). |
| 58 static std::unique_ptr<KeyedService> Build(content::BrowserContext* profile) { | 59 static std::unique_ptr<KeyedService> Build(content::BrowserContext* profile) { |
| 59 return base::WrapUnique(new OneClickTestProfileSyncService( | 60 return base::WrapUnique(new OneClickTestProfileSyncService( |
| 60 CreateProfileSyncServiceParamsForTest( | 61 CreateProfileSyncServiceParamsForTest( |
| 61 Profile::FromBrowserContext(profile)))); | 62 Profile::FromBrowserContext(profile)))); |
| 62 } | 63 } |
| 63 | 64 |
| 64 bool IsFirstSetupInProgress() const override { | 65 bool IsFirstSetupInProgress() const override { |
| 65 return first_setup_in_progress_; | 66 return first_setup_in_progress_; |
| 66 } | 67 } |
| 67 | 68 |
| 68 bool IsSyncActive() const override { return sync_active_; } | 69 bool IsSyncActive() const override { return sync_active_; } |
| 69 | 70 |
| 70 void set_first_setup_in_progress(bool in_progress) { | 71 void set_first_setup_in_progress(bool in_progress) { |
| 71 first_setup_in_progress_ = in_progress; | 72 first_setup_in_progress_ = in_progress; |
| 72 } | 73 } |
| 73 | 74 |
| 74 void set_sync_active(bool active) { | 75 void set_sync_active(bool active) { |
| 75 sync_active_ = active; | 76 sync_active_ = active; |
| 76 } | 77 } |
| 77 | 78 |
| 78 private: | 79 private: |
| 79 explicit OneClickTestProfileSyncService( | 80 explicit OneClickTestProfileSyncService(InitParams init_params) |
| 80 ProfileSyncService::InitParams init_params) | 81 : browser_sync::TestProfileSyncService(std::move(init_params)), |
| 81 : TestProfileSyncService(std::move(init_params)), | |
| 82 first_setup_in_progress_(false), | 82 first_setup_in_progress_(false), |
| 83 sync_active_(false) {} | 83 sync_active_(false) {} |
| 84 | 84 |
| 85 bool first_setup_in_progress_; | 85 bool first_setup_in_progress_; |
| 86 bool sync_active_; | 86 bool sync_active_; |
| 87 | 87 |
| 88 DISALLOW_COPY_AND_ASSIGN(OneClickTestProfileSyncService); | 88 DISALLOW_COPY_AND_ASSIGN(OneClickTestProfileSyncService); |
| 89 }; | 89 }; |
| 90 | 90 |
| 91 class TestOneClickSigninSyncObserver : public OneClickSigninSyncObserver { | 91 class TestOneClickSigninSyncObserver : public OneClickSigninSyncObserver { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 119 class OneClickSigninSyncObserverTest : public ChromeRenderViewHostTestHarness { | 119 class OneClickSigninSyncObserverTest : public ChromeRenderViewHostTestHarness { |
| 120 public: | 120 public: |
| 121 OneClickSigninSyncObserverTest() | 121 OneClickSigninSyncObserverTest() |
| 122 : sync_service_(NULL), | 122 : sync_service_(NULL), |
| 123 sync_observer_(NULL), | 123 sync_observer_(NULL), |
| 124 sync_observer_destroyed_(true) {} | 124 sync_observer_destroyed_(true) {} |
| 125 | 125 |
| 126 void SetUp() override { | 126 void SetUp() override { |
| 127 ChromeRenderViewHostTestHarness::SetUp(); | 127 ChromeRenderViewHostTestHarness::SetUp(); |
| 128 web_contents_observer_.reset(new MockWebContentsObserver(web_contents())); | 128 web_contents_observer_.reset(new MockWebContentsObserver(web_contents())); |
| 129 sync_service_ = | 129 sync_service_ = static_cast<OneClickTestProfileSyncService*>( |
| 130 static_cast<OneClickTestProfileSyncService*>( | 130 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
| 131 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 131 profile(), OneClickTestProfileSyncService::Build)); |
| 132 profile(), OneClickTestProfileSyncService::Build)); | |
| 133 } | 132 } |
| 134 | 133 |
| 135 void TearDown() override { | 134 void TearDown() override { |
| 136 // Verify that the |sync_observer_| unregistered as an observer from the | 135 // Verify that the |sync_observer_| unregistered as an observer from the |
| 137 // sync service and freed its memory. | 136 // sync service and freed its memory. |
| 138 EXPECT_TRUE(sync_observer_destroyed_); | 137 EXPECT_TRUE(sync_observer_destroyed_); |
| 139 if (sync_service_) | 138 if (sync_service_) |
| 140 EXPECT_FALSE(sync_service_->HasObserver(sync_observer_)); | 139 EXPECT_FALSE(sync_service_->HasObserver(sync_observer_)); |
| 141 ChromeRenderViewHostTestHarness::TearDown(); | 140 ChromeRenderViewHostTestHarness::TearDown(); |
| 142 } | 141 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 166 TestOneClickSigninSyncObserver* sync_observer_; | 165 TestOneClickSigninSyncObserver* sync_observer_; |
| 167 bool sync_observer_destroyed_; | 166 bool sync_observer_destroyed_; |
| 168 | 167 |
| 169 DISALLOW_COPY_AND_ASSIGN(OneClickSigninSyncObserverTest); | 168 DISALLOW_COPY_AND_ASSIGN(OneClickSigninSyncObserverTest); |
| 170 }; | 169 }; |
| 171 | 170 |
| 172 // Verify that if no Sync service is present, e.g. because Sync is disabled, the | 171 // Verify that if no Sync service is present, e.g. because Sync is disabled, the |
| 173 // observer immediately loads the continue URL. | 172 // observer immediately loads the continue URL. |
| 174 TEST_F(OneClickSigninSyncObserverTest, NoSyncService_RedirectsImmediately) { | 173 TEST_F(OneClickSigninSyncObserverTest, NoSyncService_RedirectsImmediately) { |
| 175 // Simulate disabling Sync. | 174 // Simulate disabling Sync. |
| 176 sync_service_ = | 175 sync_service_ = static_cast<OneClickTestProfileSyncService*>( |
| 177 static_cast<OneClickTestProfileSyncService*>( | 176 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
| 178 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 177 profile(), BuildNullService)); |
| 179 profile(), BuildNullService)); | |
| 180 | 178 |
| 181 // The observer should immediately redirect to the continue URL. | 179 // The observer should immediately redirect to the continue URL. |
| 182 EXPECT_CALL(*web_contents_observer_, DidStartNavigationToPendingEntry(_, _)); | 180 EXPECT_CALL(*web_contents_observer_, DidStartNavigationToPendingEntry(_, _)); |
| 183 CreateSyncObserver(kContinueUrl); | 181 CreateSyncObserver(kContinueUrl); |
| 184 EXPECT_EQ(GURL(kContinueUrl), web_contents()->GetVisibleURL()); | 182 EXPECT_EQ(GURL(kContinueUrl), web_contents()->GetVisibleURL()); |
| 185 | 183 |
| 186 // The |sync_observer_| will be destroyed asynchronously, so manually pump | 184 // The |sync_observer_| will be destroyed asynchronously, so manually pump |
| 187 // the message loop to wait for the destruction. | 185 // the message loop to wait for the destruction. |
| 188 content::RunAllPendingInMessageLoop(); | 186 content::RunAllPendingInMessageLoop(); |
| 189 } | 187 } |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT, false); | 248 signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT, false); |
| 251 CreateSyncObserver(continue_url.spec()); | 249 CreateSyncObserver(continue_url.spec()); |
| 252 sync_service_->set_first_setup_in_progress(false); | 250 sync_service_->set_first_setup_in_progress(false); |
| 253 sync_service_->set_sync_active(true); | 251 sync_service_->set_sync_active(true); |
| 254 | 252 |
| 255 EXPECT_CALL(*web_contents_observer_, | 253 EXPECT_CALL(*web_contents_observer_, |
| 256 DidStartNavigationToPendingEntry(_, _)).Times(0); | 254 DidStartNavigationToPendingEntry(_, _)).Times(0); |
| 257 sync_service_->NotifyObservers(); | 255 sync_service_->NotifyObservers(); |
| 258 EXPECT_NE(GURL(kContinueUrl), web_contents()->GetVisibleURL()); | 256 EXPECT_NE(GURL(kContinueUrl), web_contents()->GetVisibleURL()); |
| 259 } | 257 } |
| OLD | NEW |