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

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/sync_engine.cc

Issue 236313009: [SyncFS] Post tasks between SyncEngine and SyncWorker (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Post callback functions Created 6 years, 8 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/sync_file_system/drive_backend/sync_engine.h" 5 #include "chrome/browser/sync_file_system/drive_backend/sync_engine.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/threading/sequenced_worker_pool.h" 10 #include "base/threading/sequenced_worker_pool.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 drive_service->Initialize(signin_manager->GetAuthenticatedAccountId()); 83 drive_service->Initialize(signin_manager->GetAuthenticatedAccountId());
84 84
85 scoped_ptr<drive::DriveUploaderInterface> drive_uploader( 85 scoped_ptr<drive::DriveUploaderInterface> drive_uploader(
86 new drive::DriveUploader(drive_service.get(), drive_task_runner.get())); 86 new drive::DriveUploader(drive_service.get(), drive_task_runner.get()));
87 87
88 drive::DriveNotificationManager* notification_manager = 88 drive::DriveNotificationManager* notification_manager =
89 drive::DriveNotificationManagerFactory::GetForBrowserContext(context); 89 drive::DriveNotificationManagerFactory::GetForBrowserContext(context);
90 ExtensionService* extension_service = 90 ExtensionService* extension_service =
91 extensions::ExtensionSystem::Get(context)->extension_service(); 91 extensions::ExtensionSystem::Get(context)->extension_service();
92 92
93 scoped_refptr<base::SequencedTaskRunner> task_runner( 93 scoped_refptr<base::SequencedTaskRunner> task_runner(
tzik 2014/04/17 17:48:32 s/task_runner/file_task_runner/? Until we complet
peria 2014/04/18 05:19:36 Done. file_task_runner is passed in SyncEngine::In
94 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( 94 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior(
95 worker_pool->GetSequenceToken(), 95 worker_pool->GetSequenceToken(),
96 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)); 96 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
97 97
98 scoped_ptr<drive_backend::SyncEngine> sync_engine( 98 scoped_ptr<drive_backend::SyncEngine> sync_engine(
99 new SyncEngine(drive_service.Pass(), 99 new SyncEngine(drive_service.Pass(),
100 drive_uploader.Pass(), 100 drive_uploader.Pass(),
101 task_runner.get(),
101 notification_manager, 102 notification_manager,
102 extension_service, 103 extension_service,
103 signin_manager)); 104 signin_manager));
104 sync_engine->Initialize(GetSyncFileSystemDir(context->GetPath()), 105 sync_engine->Initialize(GetSyncFileSystemDir(context->GetPath()),
105 task_runner.get(),
106 NULL); 106 NULL);
107 107
108 return sync_engine.Pass(); 108 return sync_engine.Pass();
109 } 109 }
110 110
111 void SyncEngine::AppendDependsOnFactories( 111 void SyncEngine::AppendDependsOnFactories(
112 std::set<BrowserContextKeyedServiceFactory*>* factories) { 112 std::set<BrowserContextKeyedServiceFactory*>* factories) {
113 DCHECK(factories); 113 DCHECK(factories);
114 factories->insert(drive::DriveNotificationManagerFactory::GetInstance()); 114 factories->insert(drive::DriveNotificationManagerFactory::GetInstance());
115 factories->insert(SigninManagerFactory::GetInstance()); 115 factories->insert(SigninManagerFactory::GetInstance());
116 factories->insert( 116 factories->insert(
117 extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); 117 extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
118 } 118 }
119 119
120 SyncEngine::~SyncEngine() { 120 SyncEngine::~SyncEngine() {
121 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); 121 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
122 GetDriveService()->RemoveObserver(this); 122 GetDriveService()->RemoveObserver(this);
123 if (notification_manager_) 123 if (notification_manager_)
124 notification_manager_->RemoveObserver(this); 124 notification_manager_->RemoveObserver(this);
125 } 125 }
126 126
127 void SyncEngine::Initialize(const base::FilePath& base_dir, 127 void SyncEngine::Initialize(const base::FilePath& base_dir,
128 base::SequencedTaskRunner* task_runner,
129 leveldb::Env* env_override) { 128 leveldb::Env* env_override) {
130 scoped_ptr<SyncEngineContext> sync_engine_context( 129 scoped_ptr<SyncEngineContext> sync_engine_context(
131 new SyncEngineContext(drive_service_.get(), 130 new SyncEngineContext(drive_service_.get(),
132 drive_uploader_.get(), 131 drive_uploader_.get(),
133 task_runner)); 132 worker_task_runner_.get(),
tzik 2014/04/17 17:48:32 s/worker/file/? Could you swap the order of these
peria 2014/04/18 05:19:36 Done.
133 base::MessageLoopProxy::current()));
134 // TODO(peria): Move this create function to thread pool. 134 // TODO(peria): Move this create function to thread pool.
135 sync_worker_ = SyncWorker::CreateOnWorker(weak_ptr_factory_.GetWeakPtr(), 135 sync_worker_ = SyncWorker::CreateOnWorker(weak_ptr_factory_.GetWeakPtr(),
136 base_dir, 136 base_dir,
137 sync_engine_context.Pass(), 137 sync_engine_context.Pass(),
138 env_override); 138 env_override);
139 139
140 if (notification_manager_) 140 if (notification_manager_)
141 notification_manager_->AddObserver(this); 141 notification_manager_->AddObserver(this);
142 GetDriveService()->AddObserver(this); 142 GetDriveService()->AddObserver(this);
143 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); 143 net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
144 } 144 }
145 145
146 void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) { 146 void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) {
147 service_observers_.AddObserver(observer); 147 service_observers_.AddObserver(observer);
148 } 148 }
149 149
150 void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) { 150 void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) {
151 file_status_observers_.AddObserver(observer); 151 file_status_observers_.AddObserver(observer);
152 } 152 }
153 153
154 void SyncEngine::RegisterOrigin( 154 void SyncEngine::RegisterOrigin(
155 const GURL& origin, const SyncStatusCallback& callback) { 155 const GURL& origin, const SyncStatusCallback& callback) {
156 sync_worker_->RegisterOrigin(origin, callback); 156 worker_task_runner_->PostTask(
157 FROM_HERE,
158 base::Bind(&SyncWorker::RegisterOrigin,
159 base::Unretained(sync_worker_.get()),
160 origin, callback));
157 } 161 }
158 162
159 void SyncEngine::EnableOrigin( 163 void SyncEngine::EnableOrigin(
160 const GURL& origin, const SyncStatusCallback& callback) { 164 const GURL& origin, const SyncStatusCallback& callback) {
161 sync_worker_->EnableOrigin(origin, callback); 165 worker_task_runner_->PostTask(
166 FROM_HERE,
167 base::Bind(&SyncWorker::EnableOrigin,
168 base::Unretained(sync_worker_.get()),
169 origin, callback));
162 } 170 }
163 171
164 void SyncEngine::DisableOrigin( 172 void SyncEngine::DisableOrigin(
165 const GURL& origin, const SyncStatusCallback& callback) { 173 const GURL& origin, const SyncStatusCallback& callback) {
166 sync_worker_->DisableOrigin(origin, callback); 174 worker_task_runner_->PostTask(
175 FROM_HERE,
176 base::Bind(&SyncWorker::DisableOrigin,
177 base::Unretained(sync_worker_.get()),
178 origin, callback));
167 } 179 }
168 180
169 void SyncEngine::UninstallOrigin( 181 void SyncEngine::UninstallOrigin(
170 const GURL& origin, 182 const GURL& origin,
171 UninstallFlag flag, 183 UninstallFlag flag,
172 const SyncStatusCallback& callback) { 184 const SyncStatusCallback& callback) {
173 sync_worker_->UninstallOrigin(origin, flag, callback); 185 worker_task_runner_->PostTask(
186 FROM_HERE,
187 base::Bind(&SyncWorker::UninstallOrigin,
188 base::Unretained(sync_worker_.get()),
189 origin, flag, callback));
174 } 190 }
175 191
176 void SyncEngine::ProcessRemoteChange(const SyncFileCallback& callback) { 192 void SyncEngine::ProcessRemoteChange(const SyncFileCallback& callback) {
177 sync_worker_->ProcessRemoteChange(callback); 193 worker_task_runner_->PostTask(
194 FROM_HERE,
195 base::Bind(&SyncWorker::ProcessRemoteChange,
196 base::Unretained(sync_worker_.get()),
197 callback));
178 } 198 }
179 199
180 void SyncEngine::SetRemoteChangeProcessor( 200 void SyncEngine::SetRemoteChangeProcessor(RemoteChangeProcessor* processor) {
181 RemoteChangeProcessor* processor) { 201 worker_task_runner_->PostTask(
182 sync_worker_->SetRemoteChangeProcessor(processor); 202 FROM_HERE,
203 base::Bind(&SyncWorker::SetRemoteChangeProcessor,
204 base::Unretained(sync_worker_.get()),
205 processor));
183 } 206 }
184 207
185 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() { 208 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() {
186 return this; 209 return this;
187 } 210 }
188 211
189 bool SyncEngine::IsConflicting(const fileapi::FileSystemURL& url) { 212 bool SyncEngine::IsConflicting(const fileapi::FileSystemURL& url) {
190 // TODO(tzik): Implement this before we support manual conflict resolution. 213 // TODO(tzik): Implement this before we support manual conflict resolution.
191 return false; 214 return false;
192 } 215 }
193 216
194 RemoteServiceState SyncEngine::GetCurrentState() const { 217 RemoteServiceState SyncEngine::GetCurrentState() const {
218 // TODO(peria): Post task
195 return sync_worker_->GetCurrentState(); 219 return sync_worker_->GetCurrentState();
196 } 220 }
197 221
198 void SyncEngine::GetOriginStatusMap(OriginStatusMap* status_map) { 222 void SyncEngine::GetOriginStatusMap(OriginStatusMap* status_map) {
223 // TODO(peria): Make this route asynchronous.
199 sync_worker_->GetOriginStatusMap(status_map); 224 sync_worker_->GetOriginStatusMap(status_map);
200 } 225 }
201 226
202 scoped_ptr<base::ListValue> SyncEngine::DumpFiles(const GURL& origin) { 227 scoped_ptr<base::ListValue> SyncEngine::DumpFiles(const GURL& origin) {
228 // TODO(peria): Make this route asynchronous.
203 return sync_worker_->DumpFiles(origin); 229 return sync_worker_->DumpFiles(origin);
204 } 230 }
205 231
206 scoped_ptr<base::ListValue> SyncEngine::DumpDatabase() { 232 scoped_ptr<base::ListValue> SyncEngine::DumpDatabase() {
233 // TODO(peria): Make this route asynchronous.
207 return sync_worker_->DumpDatabase(); 234 return sync_worker_->DumpDatabase();
208 } 235 }
209 236
210 void SyncEngine::SetSyncEnabled(bool enabled) { 237 void SyncEngine::SetSyncEnabled(bool enabled) {
211 sync_worker_->SetSyncEnabled(enabled); 238 worker_task_runner_->PostTask(
239 FROM_HERE,
240 base::Bind(&SyncWorker::SetSyncEnabled,
241 base::Unretained(sync_worker_.get()),
242 enabled));
212 } 243 }
213 244
214 void SyncEngine::UpdateSyncEnabled(bool enabled) { 245 void SyncEngine::UpdateSyncEnabled(bool enabled) {
215 const char* status_message = enabled ? "Sync is enabled" : "Sync is disabled"; 246 const char* status_message = enabled ? "Sync is enabled" : "Sync is disabled";
216 FOR_EACH_OBSERVER( 247 FOR_EACH_OBSERVER(
217 Observer, service_observers_, 248 Observer, service_observers_,
218 OnRemoteServiceStateUpdated(GetCurrentState(), status_message)); 249 OnRemoteServiceStateUpdated(GetCurrentState(), status_message));
219 } 250 }
220 251
221 SyncStatusCode SyncEngine::SetDefaultConflictResolutionPolicy( 252 SyncStatusCode SyncEngine::SetDefaultConflictResolutionPolicy(
222 ConflictResolutionPolicy policy) { 253 ConflictResolutionPolicy policy) {
254 // TODO(peria): Make this route asynchronous.
223 return sync_worker_->SetDefaultConflictResolutionPolicy(policy); 255 return sync_worker_->SetDefaultConflictResolutionPolicy(policy);
224 } 256 }
225 257
226 SyncStatusCode SyncEngine::SetConflictResolutionPolicy( 258 SyncStatusCode SyncEngine::SetConflictResolutionPolicy(
227 const GURL& origin, 259 const GURL& origin,
228 ConflictResolutionPolicy policy) { 260 ConflictResolutionPolicy policy) {
261 // TODO(peria): Make this route asynchronous.
229 return sync_worker_->SetConflictResolutionPolicy(origin, policy); 262 return sync_worker_->SetConflictResolutionPolicy(origin, policy);
230 } 263 }
231 264
232 ConflictResolutionPolicy SyncEngine::GetDefaultConflictResolutionPolicy() 265 ConflictResolutionPolicy SyncEngine::GetDefaultConflictResolutionPolicy()
233 const { 266 const {
267 // TODO(peria): Make this route asynchronous.
234 return sync_worker_->GetDefaultConflictResolutionPolicy(); 268 return sync_worker_->GetDefaultConflictResolutionPolicy();
235 } 269 }
236 270
237 ConflictResolutionPolicy SyncEngine::GetConflictResolutionPolicy( 271 ConflictResolutionPolicy SyncEngine::GetConflictResolutionPolicy(
238 const GURL& origin) const { 272 const GURL& origin) const {
273 // TODO(peria): Make this route asynchronous.
239 return sync_worker_->GetConflictResolutionPolicy(origin); 274 return sync_worker_->GetConflictResolutionPolicy(origin);
240 } 275 }
241 276
242 void SyncEngine::GetRemoteVersions( 277 void SyncEngine::GetRemoteVersions(
243 const fileapi::FileSystemURL& url, 278 const fileapi::FileSystemURL& url,
244 const RemoteVersionsCallback& callback) { 279 const RemoteVersionsCallback& callback) {
245 // TODO(tzik): Implement this before we support manual conflict resolution. 280 // TODO(tzik): Implement this before we support manual conflict resolution.
246 callback.Run(SYNC_STATUS_FAILED, std::vector<Version>()); 281 callback.Run(SYNC_STATUS_FAILED, std::vector<Version>());
247 } 282 }
248 283
(...skipping 15 matching lines...) Expand all
264 OnRemoteChangeQueueUpdated(metadata_db->CountDirtyTracker())); 299 OnRemoteChangeQueueUpdated(metadata_db->CountDirtyTracker()));
265 } 300 }
266 } 301 }
267 302
268 void SyncEngine::ApplyLocalChange( 303 void SyncEngine::ApplyLocalChange(
269 const FileChange& local_change, 304 const FileChange& local_change,
270 const base::FilePath& local_path, 305 const base::FilePath& local_path,
271 const SyncFileMetadata& local_metadata, 306 const SyncFileMetadata& local_metadata,
272 const fileapi::FileSystemURL& url, 307 const fileapi::FileSystemURL& url,
273 const SyncStatusCallback& callback) { 308 const SyncStatusCallback& callback) {
274 sync_worker_->ApplyLocalChange( 309 worker_task_runner_->PostTask(
275 local_change, local_path, local_metadata, url, callback); 310 FROM_HERE,
311 base::Bind(&SyncWorker::ApplyLocalChange,
312 base::Unretained(sync_worker_.get()),
313 local_change,
314 local_path,
315 local_metadata,
316 url,
317 callback));
276 } 318 }
277 319
278 SyncTaskManager* SyncEngine::GetSyncTaskManagerForTesting() { 320 SyncTaskManager* SyncEngine::GetSyncTaskManagerForTesting() {
321 // TODO(peria): Post task
279 return sync_worker_->GetSyncTaskManager(); 322 return sync_worker_->GetSyncTaskManager();
280 } 323 }
281 324
282 void SyncEngine::OnNotificationReceived() { 325 void SyncEngine::OnNotificationReceived() {
283 sync_worker_->OnNotificationReceived(); 326 worker_task_runner_->PostTask(
327 FROM_HERE,
328 base::Bind(&SyncWorker::OnNotificationReceived,
329 base::Unretained(sync_worker_.get())));
284 } 330 }
285 331
286 void SyncEngine::OnPushNotificationEnabled(bool) {} 332 void SyncEngine::OnPushNotificationEnabled(bool) {}
287 333
288 void SyncEngine::OnReadyToSendRequests() { 334 void SyncEngine::OnReadyToSendRequests() {
289 sync_worker_->OnReadyToSendRequests( 335 const std::string& account_id =
tzik 2014/04/17 17:48:32 Can we use value instead of const ref here? Even t
peria 2014/04/18 05:19:36 Done.
290 signin_manager_ ? signin_manager_->GetAuthenticatedAccountId() : ""); 336 signin_manager_ ? signin_manager_->GetAuthenticatedAccountId() : "";
337
338 worker_task_runner_->PostTask(
339 FROM_HERE,
340 base::Bind(&SyncWorker::OnReadyToSendRequests,
341 base::Unretained(sync_worker_.get()),
342 account_id));
291 } 343 }
292 344
293 void SyncEngine::OnRefreshTokenInvalid() { 345 void SyncEngine::OnRefreshTokenInvalid() {
294 sync_worker_->OnRefreshTokenInvalid(); 346 worker_task_runner_->PostTask(
347 FROM_HERE,
348 base::Bind(&SyncWorker::OnRefreshTokenInvalid,
349 base::Unretained(sync_worker_.get())));
295 } 350 }
296 351
297 void SyncEngine::OnNetworkChanged( 352 void SyncEngine::OnNetworkChanged(
298 net::NetworkChangeNotifier::ConnectionType type) { 353 net::NetworkChangeNotifier::ConnectionType type) {
299 sync_worker_->OnNetworkChanged(type); 354 worker_task_runner_->PostTask(
355 FROM_HERE,
356 base::Bind(&SyncWorker::OnNetworkChanged,
357 base::Unretained(sync_worker_.get()),
358 type));
300 } 359 }
301 360
302 drive::DriveServiceInterface* SyncEngine::GetDriveService() { 361 drive::DriveServiceInterface* SyncEngine::GetDriveService() {
303 return sync_worker_->GetDriveService(); 362 return drive_service_.get();
304 } 363 }
305 364
306 drive::DriveUploaderInterface* SyncEngine::GetDriveUploader() { 365 drive::DriveUploaderInterface* SyncEngine::GetDriveUploader() {
307 return sync_worker_->GetDriveUploader(); 366 return drive_uploader_.get();
308 } 367 }
309 368
310 MetadataDatabase* SyncEngine::GetMetadataDatabase() { 369 MetadataDatabase* SyncEngine::GetMetadataDatabase() {
370 // TODO(peria): Post task
311 return sync_worker_->GetMetadataDatabase(); 371 return sync_worker_->GetMetadataDatabase();
312 } 372 }
313 373
314 SyncEngine::SyncEngine( 374 SyncEngine::SyncEngine(
315 scoped_ptr<drive::DriveServiceInterface> drive_service, 375 scoped_ptr<drive::DriveServiceInterface> drive_service,
316 scoped_ptr<drive::DriveUploaderInterface> drive_uploader, 376 scoped_ptr<drive::DriveUploaderInterface> drive_uploader,
377 base::SequencedTaskRunner* worker_task_runner,
tzik 2014/04/17 17:48:32 s/worker/file/?
peria 2014/04/18 05:19:36 Task runner for file I/O is passed in Initializati
317 drive::DriveNotificationManager* notification_manager, 378 drive::DriveNotificationManager* notification_manager,
318 ExtensionServiceInterface* extension_service, 379 ExtensionServiceInterface* extension_service,
319 SigninManagerBase* signin_manager) 380 SigninManagerBase* signin_manager)
320 : drive_service_(drive_service.Pass()), 381 : drive_service_(drive_service.Pass()),
321 drive_uploader_(drive_uploader.Pass()), 382 drive_uploader_(drive_uploader.Pass()),
322 notification_manager_(notification_manager), 383 notification_manager_(notification_manager),
323 extension_service_(extension_service), 384 extension_service_(extension_service),
324 signin_manager_(signin_manager), 385 signin_manager_(signin_manager),
386 worker_task_runner_(worker_task_runner),
325 weak_ptr_factory_(this) {} 387 weak_ptr_factory_(this) {}
326 388
327 void SyncEngine::DidProcessRemoteChange(RemoteToLocalSyncer* syncer) { 389 void SyncEngine::DidProcessRemoteChange(RemoteToLocalSyncer* syncer) {
328 if (syncer->sync_action() != SYNC_ACTION_NONE && syncer->url().is_valid()) { 390 if (syncer->sync_action() != SYNC_ACTION_NONE && syncer->url().is_valid()) {
329 FOR_EACH_OBSERVER(FileStatusObserver, 391 FOR_EACH_OBSERVER(FileStatusObserver,
330 file_status_observers_, 392 file_status_observers_,
331 OnFileStatusChanged(syncer->url(), 393 OnFileStatusChanged(syncer->url(),
332 SYNC_FILE_STATUS_SYNCED, 394 SYNC_FILE_STATUS_SYNCED,
333 syncer->sync_action(), 395 syncer->sync_action(),
334 SYNC_DIRECTION_REMOTE_TO_LOCAL)); 396 SYNC_DIRECTION_REMOTE_TO_LOCAL));
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 void SyncEngine::NotifyLastOperationStatus() { 464 void SyncEngine::NotifyLastOperationStatus() {
403 FOR_EACH_OBSERVER( 465 FOR_EACH_OBSERVER(
404 Observer, 466 Observer,
405 service_observers_, 467 service_observers_,
406 OnRemoteChangeQueueUpdated( 468 OnRemoteChangeQueueUpdated(
407 GetMetadataDatabase()->CountDirtyTracker())); 469 GetMetadataDatabase()->CountDirtyTracker()));
408 } 470 }
409 471
410 } // namespace drive_backend 472 } // namespace drive_backend
411 } // namespace sync_file_system 473 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698