Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: chrome/browser/sync/test_profile_sync_service.h

Issue 3913005: sync: enable password sync by default. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/chrome/debug
Patch Set: fix mac again Created 10 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/profile.h" 12 #include "chrome/browser/profile.h"
13 #include "chrome/browser/sync/engine/syncapi.h" 13 #include "chrome/browser/sync/engine/syncapi.h"
14 #include "chrome/browser/sync/profile_sync_factory.h" 14 #include "chrome/browser/sync/profile_sync_factory.h"
15 #include "chrome/browser/sync/profile_sync_service.h" 15 #include "chrome/browser/sync/profile_sync_service.h"
16 #include "chrome/browser/sync/glue/data_type_controller.h" 16 #include "chrome/browser/sync/glue/data_type_controller.h"
17 #include "chrome/browser/sync/glue/data_type_manager_impl.h" 17 #include "chrome/browser/sync/glue/data_type_manager_impl.h"
18 #include "chrome/browser/sync/glue/sync_backend_host.h" 18 #include "chrome/browser/sync/glue/sync_backend_host.h"
19 #include "chrome/browser/sync/sessions/session_state.h" 19 #include "chrome/browser/sync/sessions/session_state.h"
20 #include "chrome/browser/sync/syncable/directory_manager.h" 20 #include "chrome/browser/sync/syncable/directory_manager.h"
21 #include "chrome/browser/sync/syncable/syncable.h" 21 #include "chrome/browser/sync/syncable/syncable.h"
22 #include "chrome/common/notification_service.h" 22 #include "chrome/common/notification_service.h"
23 #include "chrome/test/profile_mock.h" 23 #include "chrome/test/profile_mock.h"
24 #include "chrome/test/sync/test_http_bridge_factory.h" 24 #include "chrome/test/sync/test_http_bridge_factory.h"
25 #include "chrome/test/sync/engine/test_id_factory.h"
25 #include "testing/gmock/include/gmock/gmock.h" 26 #include "testing/gmock/include/gmock/gmock.h"
26 27
27 using browser_sync::ModelSafeRoutingInfo; 28 using browser_sync::ModelSafeRoutingInfo;
28 using browser_sync::sessions::ErrorCounters; 29 using browser_sync::sessions::ErrorCounters;
29 using browser_sync::sessions::SyncerStatus; 30 using browser_sync::sessions::SyncerStatus;
30 using browser_sync::sessions::SyncSessionSnapshot; 31 using browser_sync::sessions::SyncSessionSnapshot;
31 using sync_api::UserShare; 32 using sync_api::UserShare;
32 using syncable::DirectoryManager; 33 using syncable::DirectoryManager;
33 using syncable::ModelType; 34 using syncable::ModelType;
34 using syncable::ScopedDirLookup; 35 using syncable::ScopedDirLookup;
35 36
37 class TestProfileSyncService;
38
36 ACTION_P(CallOnPaused, core) { 39 ACTION_P(CallOnPaused, core) {
37 core->OnPaused(); 40 core->OnPaused();
38 }; 41 };
39 42
40 ACTION_P(CallOnResumed, core) { 43 ACTION_P(CallOnResumed, core) {
41 core->OnResumed(); 44 core->OnResumed();
42 } 45 }
43 46
44 ACTION(ReturnNewDataTypeManager) { 47 ACTION(ReturnNewDataTypeManager) {
45 return new browser_sync::DataTypeManagerImpl(arg0, arg1); 48 return new browser_sync::DataTypeManagerImpl(arg0, arg1);
46 } 49 }
47 50
48 namespace browser_sync { 51 namespace browser_sync {
49 52
50 // Mocks out the SyncerThread operations (Pause/Resume) since no thread is 53 // Mocks out the SyncerThread operations (Pause/Resume) since no thread is
51 // running in these tests, and allows tests to provide a task on construction 54 // running in these tests, and allows tests to provide a task on construction
52 // to set up initial nodes to mock out an actual server initial sync 55 // to set up initial nodes to mock out an actual server initial sync
53 // download. 56 // download.
54 class SyncBackendHostForProfileSyncTest : public SyncBackendHost { 57 class SyncBackendHostForProfileSyncTest : public SyncBackendHost {
55 public: 58 public:
56 // |initial_condition_setup_task| can be used to populate nodes before the 59 // |initial_condition_setup_task| can be used to populate nodes before the
57 // OnBackendInitialized callback fires. 60 // OnBackendInitialized callback fires.
58 // |set_initial_sync_ended_on_init| determines whether we pretend that a full 61 // |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 62 // initial download has occurred and set bits for enabled data types. If
60 // this is false, configuring data types will require a syncer nudge. 63 // this is false, configuring data types will require a syncer nudge.
61 // |synchronous_init| causes initialization to block until the syncapi has 64 // |synchronous_init| causes initialization to block until the syncapi has
62 // completed setting itself up and called us back. 65 // completed setting itself up and called us back.
63 SyncBackendHostForProfileSyncTest(SyncFrontend* frontend, 66 SyncBackendHostForProfileSyncTest(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();
101 DirectoryManager* dir_manager = user_share->dir_manager.get();
102 81
103 ScopedDirLookup dir(dir_manager, user_share->name); 82 virtual void HandleInitializationCompletedOnFrontendLoop();
104 if (!dir.good())
105 FAIL();
106
107 ModelSafeRoutingInfo enabled_types;
108 GetModelSafeRoutingInfo(&enabled_types);
109 for (ModelSafeRoutingInfo::const_iterator i = enabled_types.begin();
110 i != enabled_types.end(); ++i) {
111 dir->set_initial_sync_ended_for_type(i->first, true);
112 }
113 }
114
115 virtual void HandleInitializationCompletedOnFrontendLoop() {
116 set_syncapi_initialized(); // Need to do this asap so task below works.
117
118 // Set up any nodes the test wants around before model association.
119 if (initial_condition_setup_task_) {
120 initial_condition_setup_task_->Run();
121 }
122
123 // Pretend we downloaded initial updates and set initial sync ended bits
124 // if we were asked to.
125 if (set_initial_sync_ended_on_init_)
126 SetInitialSyncEndedForEnabledTypes();
127
128 SyncBackendHost::HandleInitializationCompletedOnFrontendLoop();
129 }
130 83
131 // Called when a nudge comes in. 84 // Called when a nudge comes in.
132 void SimulateSyncCycleCompletedInitialSyncEnded() { 85 void SimulateSyncCycleCompletedInitialSyncEnded();
133 syncable::ModelTypeBitSet sync_ended;
134 ModelSafeRoutingInfo enabled_types;
135 GetModelSafeRoutingInfo(&enabled_types);
136 for (ModelSafeRoutingInfo::const_iterator i = enabled_types.begin();
137 i != enabled_types.end(); ++i) {
138 sync_ended.set(i->first);
139 }
140 core_->HandleSyncCycleCompletedOnFrontendLoop(new SyncSessionSnapshot(
141 SyncerStatus(), ErrorCounters(), 0, 0, false,
142 sync_ended, false, false, 0, 0, false));
143 }
144 86
145 virtual sync_api::HttpPostProviderFactory* MakeHttpBridgeFactory( 87 virtual sync_api::HttpPostProviderFactory* MakeHttpBridgeFactory(
146 URLRequestContextGetter* getter) { 88 URLRequestContextGetter* getter) {
147 return new browser_sync::TestHttpBridgeFactory; 89 return new browser_sync::TestHttpBridgeFactory;
148 } 90 }
149 91
150 virtual void InitCore(const Core::DoInitializeOptions& options) { 92 virtual void InitCore(const Core::DoInitializeOptions& options);
151 std::wstring user = L"testuser";
152 core_loop()->PostTask(FROM_HERE,
153 NewRunnableMethod(core_.get(),
154 &SyncBackendHost::Core::DoInitializeForTest,
155 user,
156 options.http_bridge_factory,
157 options.delete_sync_data_folder));
158 93
159 // TODO(akalin): Figure out a better way to do this. 94 static void SetDefaultExpectationsForWorkerCreation(ProfileMock* profile);
160 if (synchronous_init_) {
161 // The SyncBackend posts a task to the current loop when
162 // initialization completes.
163 MessageLoop::current()->Run();
164 }
165 }
166
167 static void SetDefaultExpectationsForWorkerCreation(ProfileMock* profile) {
168 EXPECT_CALL(*profile, GetPasswordStore(testing::_)).
169 WillOnce(testing::Return((PasswordStore*)NULL));
170 EXPECT_CALL(*profile, GetHistoryService(testing::_)).
171 WillOnce(testing::Return((HistoryService*)NULL));
172 }
173 95
174 private: 96 private:
175 Task* initial_condition_setup_task_; 97 Task* initial_condition_setup_task_;
176 bool set_initial_sync_ended_on_init_; 98 bool set_initial_sync_ended_on_init_;
177 bool synchronous_init_; 99 bool synchronous_init_;
178 100 TestProfileSyncService* test_service_;
179 }; 101 };
180 102
181 } // namespace browser_sync 103 } // namespace browser_sync
182 104
183 class TestProfileSyncService : public ProfileSyncService { 105 class TestProfileSyncService : public ProfileSyncService {
184 public: 106 public:
185 TestProfileSyncService(ProfileSyncFactory* factory, 107 TestProfileSyncService(ProfileSyncFactory* factory,
186 Profile* profile, 108 Profile* profile,
187 const std::string& test_user, 109 const std::string& test_user,
188 bool synchronous_backend_initialization, 110 bool synchronous_backend_initialization,
189 Task* initial_condition_setup_task) 111 Task* initial_condition_setup_task);
190 : ProfileSyncService(factory, profile,
191 !test_user.empty() ?
192 test_user : ""),
193 synchronous_backend_initialization_(
194 synchronous_backend_initialization),
195 synchronous_sync_configuration_(false),
196 num_expected_resumes_(1),
197 num_expected_pauses_(1),
198 initial_condition_setup_task_(initial_condition_setup_task),
199 set_initial_sync_ended_on_init_(true) {
200 RegisterPreferences();
201 SetSyncSetupCompleted();
202 }
203 virtual ~TestProfileSyncService() { } 112 virtual ~TestProfileSyncService() { }
204 113
205 virtual void CreateBackend() { 114 virtual void CreateBackend();
206 backend_.reset(new browser_sync::SyncBackendHostForProfileSyncTest(
207 this, profile(),
208 profile()->GetPath(), data_type_controllers(),
209 initial_condition_setup_task_.release(),
210 num_expected_resumes_, num_expected_pauses_,
211 set_initial_sync_ended_on_init_,
212 synchronous_backend_initialization_));
213 }
214 115
215 virtual void OnBackendInitialized() { 116 virtual void OnBackendInitialized();
216 ProfileSyncService::OnBackendInitialized();
217 // TODO(akalin): Figure out a better way to do this.
218 if (synchronous_backend_initialization_) {
219 MessageLoop::current()->Quit();
220 }
221 }
222 117
223 virtual void Observe(NotificationType type, 118 virtual void Observe(NotificationType type,
224 const NotificationSource& source, 119 const NotificationSource& source,
225 const NotificationDetails& details) { 120 const NotificationDetails& details);
226 ProfileSyncService::Observe(type, source, details);
227 if (type == NotificationType::SYNC_CONFIGURE_DONE &&
228 !synchronous_sync_configuration_) {
229 MessageLoop::current()->Quit();
230 }
231 }
232 121
233 void set_num_expected_resumes(int times) { 122 void set_num_expected_resumes(int times) {
234 num_expected_resumes_ = times; 123 num_expected_resumes_ = times;
235 } 124 }
236 void set_num_expected_pauses(int num) { 125 void set_num_expected_pauses(int num) {
237 num_expected_pauses_ = num; 126 num_expected_pauses_ = num;
238 } 127 }
239 void dont_set_initial_sync_ended_on_init() { 128 void dont_set_initial_sync_ended_on_init() {
240 set_initial_sync_ended_on_init_ = false; 129 set_initial_sync_ended_on_init_ = false;
241 } 130 }
242 void set_synchronous_sync_configuration() { 131 void set_synchronous_sync_configuration() {
243 synchronous_sync_configuration_ = true; 132 synchronous_sync_configuration_ = true;
244 } 133 }
245 134
135 browser_sync::TestIdFactory* id_factory() { return &id_factory_; }
136
246 private: 137 private:
247 // When testing under ChromiumOS, this method must not return an empty 138 // When testing under ChromiumOS, this method must not return an empty
248 // value value in order for the profile sync service to start. 139 // value value in order for the profile sync service to start.
249 virtual std::string GetLsidForAuthBootstraping() { 140 virtual std::string GetLsidForAuthBootstraping() {
250 return "foo"; 141 return "foo";
251 } 142 }
252 143
253 bool synchronous_backend_initialization_; 144 bool synchronous_backend_initialization_;
254 145
255 // Set to true when a mock data type manager is being used and the configure 146 // Set to true when a mock data type manager is being used and the configure
256 // step is performed synchronously. 147 // step is performed synchronously.
257 bool synchronous_sync_configuration_; 148 bool synchronous_sync_configuration_;
258 bool set_expect_resume_expectations_; 149 bool set_expect_resume_expectations_;
259 int num_expected_resumes_; 150 int num_expected_resumes_;
260 int num_expected_pauses_; 151 int num_expected_pauses_;
261 152
262 scoped_ptr<Task> initial_condition_setup_task_; 153 scoped_ptr<Task> initial_condition_setup_task_;
263 bool set_initial_sync_ended_on_init_; 154 bool set_initial_sync_ended_on_init_;
155 browser_sync::TestIdFactory id_factory_;
156
264 }; 157 };
265 158
266 #endif // CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_ 159 #endif // CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_
OLDNEW
« no previous file with comments | « chrome/browser/sync/profile_sync_test_util.h ('k') | chrome/browser/sync/test_profile_sync_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698