OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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_internals_message_handler.h" | 5 #include "chrome/browser/ui/webui/sync_internals_message_handler.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
12 #include "chrome/browser/sync/profile_sync_service_factory.h" | 12 #include "chrome/browser/sync/profile_sync_service_factory.h" |
13 #include "chrome/browser/sync/user_event_service_factory.h" | 13 #include "chrome/browser/sync/user_event_service_factory.h" |
14 #include "chrome/test/base/testing_profile.h" | 14 #include "chrome/test/base/testing_profile.h" |
15 #include "components/browser_sync/browser_sync_switches.h" | 15 #include "components/browser_sync/browser_sync_switches.h" |
16 #include "components/sync/driver/about_sync_util.h" | 16 #include "components/sync/driver/about_sync_util.h" |
17 #include "components/sync/driver/fake_sync_service.h" | 17 #include "components/sync/driver/fake_sync_service.h" |
18 #include "components/sync/driver/sync_service.h" | 18 #include "components/sync/driver/sync_service.h" |
19 #include "components/sync/js/js_test_util.h" | 19 #include "components/sync/js/js_test_util.h" |
| 20 #include "components/sync/user_events/fake_user_event_service.h" |
20 #include "content/public/browser/site_instance.h" | 21 #include "content/public/browser/site_instance.h" |
21 #include "content/public/browser/web_contents.h" | 22 #include "content/public/browser/web_contents.h" |
22 #include "content/public/test/test_browser_thread_bundle.h" | 23 #include "content/public/test/test_browser_thread_bundle.h" |
23 #include "content/public/test/test_web_ui.h" | 24 #include "content/public/test/test_web_ui.h" |
24 #include "testing/gtest/include/gtest/gtest.h" | 25 #include "testing/gtest/include/gtest/gtest.h" |
25 | 26 |
26 using base::DictionaryValue; | 27 using base::DictionaryValue; |
27 using base::ListValue; | 28 using base::ListValue; |
28 using base::Value; | 29 using base::Value; |
| 30 using syncer::FakeUserEventService; |
29 using syncer::SyncService; | 31 using syncer::SyncService; |
30 using syncer::SyncServiceObserver; | 32 using syncer::SyncServiceObserver; |
31 using syncer::TypeDebugInfoObserver; | 33 using syncer::TypeDebugInfoObserver; |
32 | 34 |
33 namespace { | 35 namespace { |
34 | 36 |
35 class TestableSyncInternalsMessageHandler : public SyncInternalsMessageHandler { | 37 class TestableSyncInternalsMessageHandler : public SyncInternalsMessageHandler { |
36 public: | 38 public: |
37 TestableSyncInternalsMessageHandler( | 39 TestableSyncInternalsMessageHandler( |
38 content::WebUI* web_ui, | 40 content::WebUI* web_ui, |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 syncer::MockJsController js_controller_; | 92 syncer::MockJsController js_controller_; |
91 base::Callback<void(std::unique_ptr<base::ListValue>)> | 93 base::Callback<void(std::unique_ptr<base::ListValue>)> |
92 get_all_nodes_callback_; | 94 get_all_nodes_callback_; |
93 }; | 95 }; |
94 | 96 |
95 static std::unique_ptr<KeyedService> BuildTestSyncService( | 97 static std::unique_ptr<KeyedService> BuildTestSyncService( |
96 content::BrowserContext* context) { | 98 content::BrowserContext* context) { |
97 return base::MakeUnique<TestSyncService>(); | 99 return base::MakeUnique<TestSyncService>(); |
98 } | 100 } |
99 | 101 |
| 102 static std::unique_ptr<KeyedService> BuildFakeUserEventService( |
| 103 content::BrowserContext* context) { |
| 104 return base::MakeUnique<FakeUserEventService>(); |
| 105 } |
| 106 |
100 class SyncInternalsMessageHandlerTest : public ::testing::Test { | 107 class SyncInternalsMessageHandlerTest : public ::testing::Test { |
101 protected: | 108 protected: |
102 SyncInternalsMessageHandlerTest() { | 109 SyncInternalsMessageHandlerTest() { |
103 site_instance_ = content::SiteInstance::Create(&profile_); | 110 site_instance_ = content::SiteInstance::Create(&profile_); |
104 web_contents_.reset(content::WebContents::Create( | 111 web_contents_.reset(content::WebContents::Create( |
105 content::WebContents::CreateParams(&profile_, site_instance_.get()))); | 112 content::WebContents::CreateParams(&profile_, site_instance_.get()))); |
106 web_ui_.set_web_contents(web_contents_.get()); | 113 web_ui_.set_web_contents(web_contents_.get()); |
107 test_sync_service_ = static_cast<TestSyncService*>( | 114 test_sync_service_ = static_cast<TestSyncService*>( |
108 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 115 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
109 &profile_, &BuildTestSyncService)); | 116 &profile_, &BuildTestSyncService)); |
| 117 fake_user_event_service_ = static_cast<FakeUserEventService*>( |
| 118 browser_sync::UserEventServiceFactory::GetInstance() |
| 119 ->SetTestingFactoryAndUse(&profile_, &BuildFakeUserEventService)); |
110 handler_.reset(new TestableSyncInternalsMessageHandler( | 120 handler_.reset(new TestableSyncInternalsMessageHandler( |
111 &web_ui_, | 121 &web_ui_, |
112 base::BindRepeating( | 122 base::BindRepeating( |
113 &SyncInternalsMessageHandlerTest::ConstructAboutInformation, | 123 &SyncInternalsMessageHandlerTest::ConstructAboutInformation, |
114 base::Unretained(this)))); | 124 base::Unretained(this)))); |
115 } | 125 } |
116 | 126 |
117 std::unique_ptr<DictionaryValue> ConstructAboutInformation( | 127 std::unique_ptr<DictionaryValue> ConstructAboutInformation( |
118 SyncService* service, | 128 SyncService* service, |
119 version_info::Channel channel) { | 129 version_info::Channel channel) { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 } | 161 } |
152 | 162 |
153 void ValidateEmptyAboutInfoCall() { | 163 void ValidateEmptyAboutInfoCall() { |
154 EXPECT_TRUE(web_ui_.call_data().empty()); | 164 EXPECT_TRUE(web_ui_.call_data().empty()); |
155 } | 165 } |
156 | 166 |
157 TestingProfile* profile() { return &profile_; } | 167 TestingProfile* profile() { return &profile_; } |
158 | 168 |
159 TestSyncService* test_sync_service() { return test_sync_service_; } | 169 TestSyncService* test_sync_service() { return test_sync_service_; } |
160 | 170 |
| 171 FakeUserEventService* fake_user_event_service() { |
| 172 return fake_user_event_service_; |
| 173 } |
| 174 |
161 TestableSyncInternalsMessageHandler* handler() { return handler_.get(); } | 175 TestableSyncInternalsMessageHandler* handler() { return handler_.get(); } |
162 | 176 |
163 int CallCountWithName(const std::string& function_name) { | 177 int CallCountWithName(const std::string& function_name) { |
164 int count = 0; | 178 int count = 0; |
165 for (const auto& call_data : web_ui_.call_data()) { | 179 for (const auto& call_data : web_ui_.call_data()) { |
166 if (call_data->function_name() == function_name) { | 180 if (call_data->function_name() == function_name) { |
167 count++; | 181 count++; |
168 } | 182 } |
169 } | 183 } |
170 return count; | 184 return count; |
171 } | 185 } |
172 | 186 |
173 int about_sync_data_delegate_call_count() const { | 187 int about_sync_data_delegate_call_count() const { |
174 return about_sync_data_delegate_call_count_; | 188 return about_sync_data_delegate_call_count_; |
175 } | 189 } |
176 | 190 |
177 const SyncService* last_delegate_sync_service() const { | 191 const SyncService* last_delegate_sync_service() const { |
178 return last_delegate_sync_service_; | 192 return last_delegate_sync_service_; |
179 } | 193 } |
180 | 194 |
181 void ResetHandler() { handler_.reset(); } | 195 void ResetHandler() { handler_.reset(); } |
182 | 196 |
183 private: | 197 private: |
184 content::TestBrowserThreadBundle thread_bundle_; | 198 content::TestBrowserThreadBundle thread_bundle_; |
185 TestingProfile profile_; | 199 TestingProfile profile_; |
186 scoped_refptr<content::SiteInstance> site_instance_; | 200 scoped_refptr<content::SiteInstance> site_instance_; |
187 std::unique_ptr<content::WebContents> web_contents_; | 201 std::unique_ptr<content::WebContents> web_contents_; |
188 content::TestWebUI web_ui_; | 202 content::TestWebUI web_ui_; |
189 TestSyncService* test_sync_service_; | 203 TestSyncService* test_sync_service_; |
| 204 FakeUserEventService* fake_user_event_service_; |
190 std::unique_ptr<TestableSyncInternalsMessageHandler> handler_; | 205 std::unique_ptr<TestableSyncInternalsMessageHandler> handler_; |
191 int about_sync_data_delegate_call_count_ = 0; | 206 int about_sync_data_delegate_call_count_ = 0; |
192 SyncService* last_delegate_sync_service_ = nullptr; | 207 SyncService* last_delegate_sync_service_ = nullptr; |
193 }; | 208 }; |
194 | 209 |
195 TEST_F(SyncInternalsMessageHandlerTest, AddRemoveObservers) { | 210 TEST_F(SyncInternalsMessageHandlerTest, AddRemoveObservers) { |
196 ListValue empty_list; | 211 ListValue empty_list; |
197 | 212 |
198 EXPECT_EQ(0, test_sync_service()->add_observer_count()); | 213 EXPECT_EQ(0, test_sync_service()->add_observer_count()); |
199 handler()->HandleRegisterForEvents(&empty_list); | 214 handler()->HandleRegisterForEvents(&empty_list); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 ProfileSyncServiceFactory::GetInstance()->SetTestingFactory(profile(), | 323 ProfileSyncServiceFactory::GetInstance()->SetTestingFactory(profile(), |
309 nullptr); | 324 nullptr); |
310 | 325 |
311 handler()->AllowJavascriptForTesting(); | 326 handler()->AllowJavascriptForTesting(); |
312 handler()->OnStateChanged(nullptr); | 327 handler()->OnStateChanged(nullptr); |
313 EXPECT_EQ(1, about_sync_data_delegate_call_count()); | 328 EXPECT_EQ(1, about_sync_data_delegate_call_count()); |
314 EXPECT_EQ(nullptr, last_delegate_sync_service()); | 329 EXPECT_EQ(nullptr, last_delegate_sync_service()); |
315 ValidateAboutInfoCall(); | 330 ValidateAboutInfoCall(); |
316 } | 331 } |
317 | 332 |
| 333 TEST_F(SyncInternalsMessageHandlerTest, WriteUserEvent) { |
| 334 ListValue args; |
| 335 args.AppendString("1000000000000000000"); |
| 336 args.AppendString("-1"); |
| 337 handler()->HandleWriteUserEvent(&args); |
| 338 |
| 339 ASSERT_EQ(1u, fake_user_event_service()->GetRecordedUserEvents().size()); |
| 340 const sync_pb::UserEventSpecifics& event = |
| 341 *fake_user_event_service()->GetRecordedUserEvents().begin(); |
| 342 EXPECT_EQ(1000000000000000000, event.event_time_usec()); |
| 343 EXPECT_EQ(-1, event.navigation_id()); |
| 344 } |
| 345 |
| 346 TEST_F(SyncInternalsMessageHandlerTest, WriteUserEventBadParse) { |
| 347 ListValue args; |
| 348 args.AppendString("123abc"); |
| 349 args.AppendString(""); |
| 350 handler()->HandleWriteUserEvent(&args); |
| 351 |
| 352 ASSERT_EQ(1u, fake_user_event_service()->GetRecordedUserEvents().size()); |
| 353 const sync_pb::UserEventSpecifics& event = |
| 354 *fake_user_event_service()->GetRecordedUserEvents().begin(); |
| 355 EXPECT_EQ(0, event.event_time_usec()); |
| 356 EXPECT_EQ(0, event.navigation_id()); |
| 357 } |
| 358 |
318 } // namespace | 359 } // namespace |
OLD | NEW |