OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #ifndef CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_ | 5 #ifndef CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_ |
6 #define CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_ | 6 #define CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 | 10 |
11 #include "base/message_loop.h" | 11 #include "base/message_loop.h" |
12 #include "chrome/browser/sync/engine/syncapi.h" | 12 #include "chrome/browser/sync/engine/syncapi.h" |
13 #include "chrome/browser/sync/profile_sync_factory.h" | 13 #include "chrome/browser/sync/profile_sync_factory.h" |
14 #include "chrome/browser/sync/profile_sync_service.h" | 14 #include "chrome/browser/sync/profile_sync_service.h" |
15 #include "chrome/browser/sync/glue/data_type_controller.h" | 15 #include "chrome/browser/sync/glue/data_type_controller.h" |
16 #include "chrome/browser/sync/glue/data_type_manager_impl.h" | 16 #include "chrome/browser/sync/glue/data_type_manager_impl.h" |
17 #include "chrome/browser/sync/glue/sync_backend_host.h" | 17 #include "chrome/browser/sync/glue/sync_backend_host.h" |
18 #include "chrome/browser/sync/sessions/session_state.h" | 18 #include "chrome/browser/sync/sessions/session_state.h" |
19 #include "chrome/browser/sync/syncable/directory_manager.h" | 19 #include "chrome/browser/sync/syncable/directory_manager.h" |
20 #include "chrome/browser/sync/syncable/syncable.h" | 20 #include "chrome/browser/sync/syncable/syncable.h" |
21 #include "chrome/test/profile_mock.h" | 21 #include "chrome/test/profile_mock.h" |
22 #include "chrome/test/sync/test_http_bridge_factory.h" | 22 #include "chrome/test/sync/test_http_bridge_factory.h" |
| 23 #include "chrome/test/sync/engine/test_id_factory.h" |
23 #include "testing/gmock/include/gmock/gmock.h" | 24 #include "testing/gmock/include/gmock/gmock.h" |
24 | 25 |
25 class Profile; | 26 class Profile; |
| 27 class TestProfileSyncService; |
26 | 28 |
27 using browser_sync::ModelSafeRoutingInfo; | 29 using browser_sync::ModelSafeRoutingInfo; |
28 using browser_sync::sessions::ErrorCounters; | 30 using browser_sync::sessions::ErrorCounters; |
29 using browser_sync::sessions::SyncerStatus; | 31 using browser_sync::sessions::SyncerStatus; |
30 using browser_sync::sessions::SyncSessionSnapshot; | 32 using browser_sync::sessions::SyncSessionSnapshot; |
31 using sync_api::UserShare; | 33 using sync_api::UserShare; |
32 using syncable::DirectoryManager; | 34 using syncable::DirectoryManager; |
33 using syncable::ModelType; | 35 using syncable::ModelType; |
34 using syncable::ScopedDirLookup; | 36 using syncable::ScopedDirLookup; |
35 | 37 |
(...skipping 17 matching lines...) Expand all Loading... |
53 // download. | 55 // download. |
54 class SyncBackendHostForProfileSyncTest : public SyncBackendHost { | 56 class SyncBackendHostForProfileSyncTest : public SyncBackendHost { |
55 public: | 57 public: |
56 // |initial_condition_setup_task| can be used to populate nodes before the | 58 // |initial_condition_setup_task| can be used to populate nodes before the |
57 // OnBackendInitialized callback fires. | 59 // OnBackendInitialized callback fires. |
58 // |set_initial_sync_ended_on_init| determines whether we pretend that a full | 60 // |set_initial_sync_ended_on_init| determines whether we pretend that a full |
59 // initial download has occurred and set bits for enabled data types. If | 61 // initial download has occurred and set bits for enabled data types. If |
60 // this is false, configuring data types will require a syncer nudge. | 62 // this is false, configuring data types will require a syncer nudge. |
61 // |synchronous_init| causes initialization to block until the syncapi has | 63 // |synchronous_init| causes initialization to block until the syncapi has |
62 // completed setting itself up and called us back. | 64 // completed setting itself up and called us back. |
63 SyncBackendHostForProfileSyncTest(SyncFrontend* frontend, | 65 SyncBackendHostForProfileSyncTest( |
| 66 TestProfileSyncService* service, |
64 Profile* profile, | 67 Profile* profile, |
65 const FilePath& profile_path, | 68 const FilePath& profile_path, |
66 const DataTypeController::TypeMap& data_type_controllers, | 69 const DataTypeController::TypeMap& data_type_controllers, |
67 Task* initial_condition_setup_task, | 70 Task* initial_condition_setup_task, |
68 int num_expected_resumes, | 71 int num_expected_resumes, |
69 int num_expected_pauses, | 72 int num_expected_pauses, |
70 bool set_initial_sync_ended_on_init, | 73 bool set_initial_sync_ended_on_init, |
71 bool synchronous_init) | 74 bool synchronous_init); |
72 : browser_sync::SyncBackendHost(frontend, profile, profile_path, | |
73 data_type_controllers), | |
74 initial_condition_setup_task_(initial_condition_setup_task), | |
75 set_initial_sync_ended_on_init_(set_initial_sync_ended_on_init), | |
76 synchronous_init_(synchronous_init) { | |
77 // By default, the RequestPause and RequestResume methods will | |
78 // send the confirmation notification and return true. | |
79 ON_CALL(*this, RequestPause()). | |
80 WillByDefault(testing::DoAll(CallOnPaused(core_), | |
81 testing::Return(true))); | |
82 ON_CALL(*this, RequestResume()). | |
83 WillByDefault(testing::DoAll(CallOnResumed(core_), | |
84 testing::Return(true))); | |
85 ON_CALL(*this, RequestNudge()).WillByDefault(testing::Invoke(this, | |
86 &SyncBackendHostForProfileSyncTest:: | |
87 SimulateSyncCycleCompletedInitialSyncEnded)); | |
88 | |
89 EXPECT_CALL(*this, RequestPause()).Times(num_expected_pauses); | |
90 EXPECT_CALL(*this, RequestResume()).Times(num_expected_resumes); | |
91 EXPECT_CALL(*this, RequestNudge()). | |
92 Times(set_initial_sync_ended_on_init ? 0 : 1); | |
93 } | |
94 | 75 |
95 MOCK_METHOD0(RequestPause, bool()); | 76 MOCK_METHOD0(RequestPause, bool()); |
96 MOCK_METHOD0(RequestResume, bool()); | 77 MOCK_METHOD0(RequestResume, bool()); |
97 MOCK_METHOD0(RequestNudge, void()); | 78 MOCK_METHOD0(RequestNudge, void()); |
98 | 79 |
99 void SetInitialSyncEndedForEnabledTypes() { | 80 void SetInitialSyncEndedForEnabledTypes() { |
100 UserShare* user_share = core_->syncapi()->GetUserShare(); | 81 UserShare* user_share = core_->syncapi()->GetUserShare(); |
101 DirectoryManager* dir_manager = user_share->dir_manager.get(); | 82 DirectoryManager* dir_manager = user_share->dir_manager.get(); |
102 | 83 |
103 ScopedDirLookup dir(dir_manager, user_share->name); | 84 ScopedDirLookup dir(dir_manager, user_share->name); |
104 if (!dir.good()) | 85 if (!dir.good()) |
105 FAIL(); | 86 FAIL(); |
106 | 87 |
107 ModelSafeRoutingInfo enabled_types; | 88 ModelSafeRoutingInfo enabled_types; |
108 GetModelSafeRoutingInfo(&enabled_types); | 89 GetModelSafeRoutingInfo(&enabled_types); |
109 for (ModelSafeRoutingInfo::const_iterator i = enabled_types.begin(); | 90 for (ModelSafeRoutingInfo::const_iterator i = enabled_types.begin(); |
110 i != enabled_types.end(); ++i) { | 91 i != enabled_types.end(); ++i) { |
111 dir->set_initial_sync_ended_for_type(i->first, true); | 92 dir->set_initial_sync_ended_for_type(i->first, true); |
112 } | 93 } |
113 } | 94 } |
114 | 95 |
115 virtual void ConfigureDataTypes(const syncable::ModelTypeSet& types, | 96 virtual void ConfigureDataTypes(const syncable::ModelTypeSet& types, |
116 CancelableTask* ready_task) { | 97 CancelableTask* ready_task) { |
117 SetAutofillMigrationState(syncable::MIGRATED); | 98 SetAutofillMigrationState(syncable::MIGRATED); |
118 SyncBackendHost::ConfigureDataTypes(types, ready_task); | 99 SyncBackendHost::ConfigureDataTypes(types, ready_task); |
119 } | 100 } |
120 | 101 |
121 virtual void HandleInitializationCompletedOnFrontendLoop() { | |
122 set_syncapi_initialized(); // Need to do this asap so task below works. | |
123 | |
124 // Set up any nodes the test wants around before model association. | |
125 if (initial_condition_setup_task_) { | |
126 initial_condition_setup_task_->Run(); | |
127 } | |
128 | |
129 // Pretend we downloaded initial updates and set initial sync ended bits | |
130 // if we were asked to. | |
131 if (set_initial_sync_ended_on_init_) | |
132 SetInitialSyncEndedForEnabledTypes(); | |
133 | |
134 SyncBackendHost::HandleInitializationCompletedOnFrontendLoop(); | |
135 } | |
136 | |
137 // Called when a nudge comes in. | 102 // Called when a nudge comes in. |
138 void SimulateSyncCycleCompletedInitialSyncEnded() { | 103 void SimulateSyncCycleCompletedInitialSyncEnded() { |
139 syncable::ModelTypeBitSet sync_ended; | 104 syncable::ModelTypeBitSet sync_ended; |
140 ModelSafeRoutingInfo enabled_types; | 105 ModelSafeRoutingInfo enabled_types; |
141 GetModelSafeRoutingInfo(&enabled_types); | 106 GetModelSafeRoutingInfo(&enabled_types); |
142 std::string download_progress_markers[syncable::MODEL_TYPE_COUNT]; | 107 std::string download_progress_markers[syncable::MODEL_TYPE_COUNT]; |
143 for (ModelSafeRoutingInfo::const_iterator i = enabled_types.begin(); | 108 for (ModelSafeRoutingInfo::const_iterator i = enabled_types.begin(); |
144 i != enabled_types.end(); ++i) { | 109 i != enabled_types.end(); ++i) { |
145 sync_ended.set(i->first); | 110 sync_ended.set(i->first); |
146 } | 111 } |
147 core_->HandleSyncCycleCompletedOnFrontendLoop(new SyncSessionSnapshot( | 112 core_->HandleSyncCycleCompletedOnFrontendLoop(new SyncSessionSnapshot( |
148 SyncerStatus(), ErrorCounters(), 0, false, | 113 SyncerStatus(), ErrorCounters(), 0, false, |
149 sync_ended, download_progress_markers, false, false, 0, 0, false)); | 114 sync_ended, download_progress_markers, false, false, 0, 0, false)); |
150 } | 115 } |
151 | 116 |
| 117 virtual void HandleInitializationCompletedOnFrontendLoop(); |
| 118 |
152 virtual sync_api::HttpPostProviderFactory* MakeHttpBridgeFactory( | 119 virtual sync_api::HttpPostProviderFactory* MakeHttpBridgeFactory( |
153 URLRequestContextGetter* getter) { | 120 URLRequestContextGetter* getter) { |
154 return new browser_sync::TestHttpBridgeFactory; | 121 return new browser_sync::TestHttpBridgeFactory; |
155 } | 122 } |
156 | 123 |
157 virtual void InitCore(const Core::DoInitializeOptions& options) { | 124 virtual void InitCore(const Core::DoInitializeOptions& options) { |
158 std::wstring user = L"testuser"; | 125 std::wstring user = L"testuser"; |
159 core_loop()->PostTask(FROM_HERE, | 126 core_loop()->PostTask(FROM_HERE, |
160 NewRunnableMethod(core_.get(), | 127 NewRunnableMethod(core_.get(), |
161 &SyncBackendHost::Core::DoInitializeForTest, | 128 &SyncBackendHost::Core::DoInitializeForTest, |
(...skipping 16 matching lines...) Expand all Loading... |
178 | 145 |
179 static void SetHistoryServiceExpectations(ProfileMock* profile) { | 146 static void SetHistoryServiceExpectations(ProfileMock* profile) { |
180 EXPECT_CALL(*profile, GetHistoryService(testing::_)). | 147 EXPECT_CALL(*profile, GetHistoryService(testing::_)). |
181 WillOnce(testing::Return((HistoryService*)NULL)); | 148 WillOnce(testing::Return((HistoryService*)NULL)); |
182 } | 149 } |
183 | 150 |
184 private: | 151 private: |
185 Task* initial_condition_setup_task_; | 152 Task* initial_condition_setup_task_; |
186 bool set_initial_sync_ended_on_init_; | 153 bool set_initial_sync_ended_on_init_; |
187 bool synchronous_init_; | 154 bool synchronous_init_; |
| 155 TestProfileSyncService* test_service_; |
188 }; | 156 }; |
189 | 157 |
190 } // namespace browser_sync | 158 } // namespace browser_sync |
191 | 159 |
192 class TestProfileSyncService : public ProfileSyncService { | 160 class TestProfileSyncService : public ProfileSyncService { |
193 public: | 161 public: |
194 TestProfileSyncService(ProfileSyncFactory* factory, | 162 TestProfileSyncService(ProfileSyncFactory* factory, |
195 Profile* profile, | 163 Profile* profile, |
196 const std::string& test_user, | 164 const std::string& test_user, |
197 bool synchronous_backend_initialization, | 165 bool synchronous_backend_initialization, |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 void set_num_expected_pauses(int num) { | 213 void set_num_expected_pauses(int num) { |
246 num_expected_pauses_ = num; | 214 num_expected_pauses_ = num; |
247 } | 215 } |
248 void dont_set_initial_sync_ended_on_init() { | 216 void dont_set_initial_sync_ended_on_init() { |
249 set_initial_sync_ended_on_init_ = false; | 217 set_initial_sync_ended_on_init_ = false; |
250 } | 218 } |
251 void set_synchronous_sync_configuration() { | 219 void set_synchronous_sync_configuration() { |
252 synchronous_sync_configuration_ = true; | 220 synchronous_sync_configuration_ = true; |
253 } | 221 } |
254 | 222 |
| 223 browser_sync::TestIdFactory* id_factory() { return &id_factory_; } |
| 224 |
255 private: | 225 private: |
256 // When testing under ChromiumOS, this method must not return an empty | 226 // When testing under ChromiumOS, this method must not return an empty |
257 // value value in order for the profile sync service to start. | 227 // value value in order for the profile sync service to start. |
258 virtual std::string GetLsidForAuthBootstraping() { | 228 virtual std::string GetLsidForAuthBootstraping() { |
259 return "foo"; | 229 return "foo"; |
260 } | 230 } |
261 | 231 |
262 bool synchronous_backend_initialization_; | 232 bool synchronous_backend_initialization_; |
263 | 233 |
264 // Set to true when a mock data type manager is being used and the configure | 234 // Set to true when a mock data type manager is being used and the configure |
265 // step is performed synchronously. | 235 // step is performed synchronously. |
266 bool synchronous_sync_configuration_; | 236 bool synchronous_sync_configuration_; |
267 bool set_expect_resume_expectations_; | 237 bool set_expect_resume_expectations_; |
268 int num_expected_resumes_; | 238 int num_expected_resumes_; |
269 int num_expected_pauses_; | 239 int num_expected_pauses_; |
270 | 240 |
271 scoped_ptr<Task> initial_condition_setup_task_; | 241 scoped_ptr<Task> initial_condition_setup_task_; |
272 bool set_initial_sync_ended_on_init_; | 242 bool set_initial_sync_ended_on_init_; |
| 243 browser_sync::TestIdFactory id_factory_; |
273 }; | 244 }; |
274 | 245 |
| 246 |
| 247 |
275 #endif // CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_ | 248 #endif // CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_ |
OLD | NEW |