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 |