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

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

Issue 243583005: Revert of [SyncFS] Post tasks between SyncEngine and SyncWorker (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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
« no previous file with comments | « chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/sync_file_system/drive_backend/sync_worker.h" 5 #include "chrome/browser/sync_file_system/drive_backend/sync_worker.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/weak_ptr.h" 10 #include "base/memory/weak_ptr.h"
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 92
93 void SyncWorker::RegisterOrigin( 93 void SyncWorker::RegisterOrigin(
94 const GURL& origin, 94 const GURL& origin,
95 const SyncStatusCallback& callback) { 95 const SyncStatusCallback& callback) {
96 if (!GetMetadataDatabase() && GetDriveService()->HasRefreshToken()) 96 if (!GetMetadataDatabase() && GetDriveService()->HasRefreshToken())
97 PostInitializeTask(); 97 PostInitializeTask();
98 98
99 scoped_ptr<RegisterAppTask> task( 99 scoped_ptr<RegisterAppTask> task(
100 new RegisterAppTask(context_.get(), origin.host())); 100 new RegisterAppTask(context_.get(), origin.host()));
101 if (task->CanFinishImmediately()) { 101 if (task->CanFinishImmediately()) {
102 context_->GetUiTaskRunner()->PostTask( 102 callback.Run(SYNC_STATUS_OK);
103 FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
104 return; 103 return;
105 } 104 }
106 105
107 // TODO(peria): Forward |callback| to UI thread.
108 task_manager_->ScheduleSyncTask( 106 task_manager_->ScheduleSyncTask(
109 FROM_HERE, 107 FROM_HERE,
110 task.PassAs<SyncTask>(), 108 task.PassAs<SyncTask>(),
111 SyncTaskManager::PRIORITY_HIGH, 109 SyncTaskManager::PRIORITY_HIGH,
112 callback); 110 callback);
113 } 111 }
114 112
115 void SyncWorker::EnableOrigin( 113 void SyncWorker::EnableOrigin(
116 const GURL& origin, 114 const GURL& origin,
117 const SyncStatusCallback& callback) { 115 const SyncStatusCallback& callback) {
118 // TODO(peria): Forward |callback| to UI thread.
119 task_manager_->ScheduleTask( 116 task_manager_->ScheduleTask(
120 FROM_HERE, 117 FROM_HERE,
121 base::Bind(&SyncWorker::DoEnableApp, 118 base::Bind(&SyncWorker::DoEnableApp,
122 weak_ptr_factory_.GetWeakPtr(), 119 weak_ptr_factory_.GetWeakPtr(),
123 origin.host()), 120 origin.host()),
124 SyncTaskManager::PRIORITY_HIGH, 121 SyncTaskManager::PRIORITY_HIGH,
125 callback); 122 callback);
126 } 123 }
127 124
128 void SyncWorker::DisableOrigin( 125 void SyncWorker::DisableOrigin(
129 const GURL& origin, 126 const GURL& origin,
130 const SyncStatusCallback& callback) { 127 const SyncStatusCallback& callback) {
131 // TODO(peria): Forward |callback| to UI thread.
132 task_manager_->ScheduleTask( 128 task_manager_->ScheduleTask(
133 FROM_HERE, 129 FROM_HERE,
134 base::Bind(&SyncWorker::DoDisableApp, 130 base::Bind(&SyncWorker::DoDisableApp,
135 weak_ptr_factory_.GetWeakPtr(), 131 weak_ptr_factory_.GetWeakPtr(),
136 origin.host()), 132 origin.host()),
137 SyncTaskManager::PRIORITY_HIGH, 133 SyncTaskManager::PRIORITY_HIGH,
138 callback); 134 callback);
139 } 135 }
140 136
141 void SyncWorker::UninstallOrigin( 137 void SyncWorker::UninstallOrigin(
142 const GURL& origin, 138 const GURL& origin,
143 RemoteFileSyncService::UninstallFlag flag, 139 RemoteFileSyncService::UninstallFlag flag,
144 const SyncStatusCallback& callback) { 140 const SyncStatusCallback& callback) {
145 // TODO(peria): Forward |callback| to UI thread.
146 task_manager_->ScheduleSyncTask( 141 task_manager_->ScheduleSyncTask(
147 FROM_HERE, 142 FROM_HERE,
148 scoped_ptr<SyncTask>( 143 scoped_ptr<SyncTask>(
149 new UninstallAppTask(context_.get(), origin.host(), flag)), 144 new UninstallAppTask(context_.get(), origin.host(), flag)),
150 SyncTaskManager::PRIORITY_HIGH, 145 SyncTaskManager::PRIORITY_HIGH,
151 callback); 146 callback);
152 } 147 }
153 148
154 void SyncWorker::ProcessRemoteChange( 149 void SyncWorker::ProcessRemoteChange(
155 const SyncFileCallback& callback) { 150 const SyncFileCallback& callback) {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 204
210 void SyncWorker::SetSyncEnabled(bool enabled) { 205 void SyncWorker::SetSyncEnabled(bool enabled) {
211 if (sync_enabled_ == enabled) 206 if (sync_enabled_ == enabled)
212 return; 207 return;
213 208
214 RemoteServiceState old_state = GetCurrentState(); 209 RemoteServiceState old_state = GetCurrentState();
215 sync_enabled_ = enabled; 210 sync_enabled_ = enabled;
216 if (old_state == GetCurrentState()) 211 if (old_state == GetCurrentState())
217 return; 212 return;
218 213
219 context_->GetUiTaskRunner()->PostTask( 214 // TODO(peria): PostTask()
220 FROM_HERE, 215 sync_engine_->UpdateSyncEnabled(enabled);
221 base::Bind(&SyncEngine::UpdateSyncEnabled, sync_engine_, enabled));
222 } 216 }
223 217
224 SyncStatusCode SyncWorker::SetDefaultConflictResolutionPolicy( 218 SyncStatusCode SyncWorker::SetDefaultConflictResolutionPolicy(
225 ConflictResolutionPolicy policy) { 219 ConflictResolutionPolicy policy) {
226 default_conflict_resolution_policy_ = policy; 220 default_conflict_resolution_policy_ = policy;
227 return SYNC_STATUS_OK; 221 return SYNC_STATUS_OK;
228 } 222 }
229 223
230 SyncStatusCode SyncWorker::SetConflictResolutionPolicy( 224 SyncStatusCode SyncWorker::SetConflictResolutionPolicy(
231 const GURL& origin, 225 const GURL& origin,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 267
274 MaybeStartFetchChanges(); 268 MaybeStartFetchChanges();
275 } 269 }
276 270
277 void SyncWorker::NotifyLastOperationStatus( 271 void SyncWorker::NotifyLastOperationStatus(
278 SyncStatusCode status, 272 SyncStatusCode status,
279 bool used_network) { 273 bool used_network) {
280 UpdateServiceStateFromSyncStatusCode(status, used_network); 274 UpdateServiceStateFromSyncStatusCode(status, used_network);
281 275
282 if (GetMetadataDatabase()) { 276 if (GetMetadataDatabase()) {
283 context_->GetUiTaskRunner()->PostTask( 277 // TODO(peria): Post task
284 FROM_HERE, 278 sync_engine_->NotifyLastOperationStatus();
285 base::Bind(&SyncEngine::NotifyLastOperationStatus, sync_engine_));
286 } 279 }
287 } 280 }
288 281
289 void SyncWorker::OnNotificationReceived() { 282 void SyncWorker::OnNotificationReceived() {
290 if (service_state_ == REMOTE_SERVICE_TEMPORARY_UNAVAILABLE) 283 if (service_state_ == REMOTE_SERVICE_TEMPORARY_UNAVAILABLE)
291 UpdateServiceState(REMOTE_SERVICE_OK, "Got push notification for Drive."); 284 UpdateServiceState(REMOTE_SERVICE_OK, "Got push notification for Drive.");
292 285
293 should_check_remote_change_ = true; 286 should_check_remote_change_ = true;
294 MaybeScheduleNextTask(); 287 MaybeScheduleNextTask();
295 } 288 }
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 sync_enabled_(false), 353 sync_enabled_(false),
361 default_conflict_resolution_policy_( 354 default_conflict_resolution_policy_(
362 CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN), 355 CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN),
363 network_available_(false), 356 network_available_(false),
364 context_(sync_engine_context.Pass()), 357 context_(sync_engine_context.Pass()),
365 sync_engine_(sync_engine), 358 sync_engine_(sync_engine),
366 weak_ptr_factory_(this) {} 359 weak_ptr_factory_(this) {}
367 360
368 void SyncWorker::DoDisableApp(const std::string& app_id, 361 void SyncWorker::DoDisableApp(const std::string& app_id,
369 const SyncStatusCallback& callback) { 362 const SyncStatusCallback& callback) {
370 if (GetMetadataDatabase()) { 363 if (GetMetadataDatabase())
371 GetMetadataDatabase()->DisableApp(app_id, callback); 364 GetMetadataDatabase()->DisableApp(app_id, callback);
372 } else { 365 else
373 context_->GetUiTaskRunner()->PostTask( 366 callback.Run(SYNC_STATUS_OK);
374 FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
375 }
376 } 367 }
377 368
378 void SyncWorker::DoEnableApp(const std::string& app_id, 369 void SyncWorker::DoEnableApp(const std::string& app_id,
379 const SyncStatusCallback& callback) { 370 const SyncStatusCallback& callback) {
380 if (GetMetadataDatabase()) { 371 if (GetMetadataDatabase())
381 GetMetadataDatabase()->EnableApp(app_id, callback); 372 GetMetadataDatabase()->EnableApp(app_id, callback);
382 } else { 373 else
383 context_->GetUiTaskRunner()->PostTask( 374 callback.Run(SYNC_STATUS_OK);
384 FROM_HERE, base::Bind(callback, SYNC_STATUS_OK));
385 }
386 } 375 }
387 376
388 void SyncWorker::PostInitializeTask() { 377 void SyncWorker::PostInitializeTask() {
389 DCHECK(!GetMetadataDatabase()); 378 DCHECK(!GetMetadataDatabase());
390 379
391 // This initializer task may not run if MetadataDatabase in context_ is 380 // This initializer task may not run if MetadataDatabase in context_ is
392 // already initialized when it runs. 381 // already initialized when it runs.
393 SyncEngineInitializer* initializer = 382 SyncEngineInitializer* initializer =
394 new SyncEngineInitializer(context_.get(), 383 new SyncEngineInitializer(context_.get(),
395 context_->GetFileTaskRunner(), 384 context_->GetBlockingTaskRunner(),
396 base_dir_.Append(kDatabaseName), 385 base_dir_.Append(kDatabaseName),
397 env_override_); 386 env_override_);
398 task_manager_->ScheduleSyncTask( 387 task_manager_->ScheduleSyncTask(
399 FROM_HERE, 388 FROM_HERE,
400 scoped_ptr<SyncTask>(initializer), 389 scoped_ptr<SyncTask>(initializer),
401 SyncTaskManager::PRIORITY_HIGH, 390 SyncTaskManager::PRIORITY_HIGH,
402 base::Bind(&SyncWorker::DidInitialize, 391 base::Bind(&SyncWorker::DidInitialize, weak_ptr_factory_.GetWeakPtr(),
403 weak_ptr_factory_.GetWeakPtr(),
404 initializer)); 392 initializer));
405 } 393 }
406 394
407 void SyncWorker::DidInitialize(SyncEngineInitializer* initializer, 395 void SyncWorker::DidInitialize(SyncEngineInitializer* initializer,
408 SyncStatusCode status) { 396 SyncStatusCode status) {
409 if (status != SYNC_STATUS_OK) { 397 if (status != SYNC_STATUS_OK) {
410 if (GetDriveService()->HasRefreshToken()) { 398 if (GetDriveService()->HasRefreshToken()) {
411 UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE, 399 UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE,
412 "Could not initialize remote service"); 400 "Could not initialize remote service");
413 } else { 401 } else {
414 UpdateServiceState(REMOTE_SERVICE_AUTHENTICATION_REQUIRED, 402 UpdateServiceState(REMOTE_SERVICE_AUTHENTICATION_REQUIRED,
415 "Authentication required."); 403 "Authentication required.");
416 } 404 }
417 return; 405 return;
418 } 406 }
419 407
420 scoped_ptr<MetadataDatabase> metadata_database = 408 scoped_ptr<MetadataDatabase> metadata_database =
421 initializer->PassMetadataDatabase(); 409 initializer->PassMetadataDatabase();
422 if (metadata_database) 410 if (metadata_database)
423 context_->SetMetadataDatabase(metadata_database.Pass()); 411 context_->SetMetadataDatabase(metadata_database.Pass());
424 412
425 context_->GetUiTaskRunner()->PostTask( 413 // TODO(peria): Post task
426 FROM_HERE, 414 sync_engine_->UpdateRegisteredApps();
427 base::Bind(&SyncEngine::UpdateRegisteredApps, sync_engine_));
428 } 415 }
429 416
430 void SyncWorker::DidProcessRemoteChange(RemoteToLocalSyncer* syncer, 417 void SyncWorker::DidProcessRemoteChange(RemoteToLocalSyncer* syncer,
431 const SyncFileCallback& callback, 418 const SyncFileCallback& callback,
432 SyncStatusCode status) { 419 SyncStatusCode status) {
433 if (syncer->is_sync_root_deletion()) { 420 if (syncer->is_sync_root_deletion()) {
434 MetadataDatabase::ClearDatabase(context_->PassMetadataDatabase()); 421 MetadataDatabase::ClearDatabase(context_->PassMetadataDatabase());
435 PostInitializeTask(); 422 PostInitializeTask();
436 context_->GetUiTaskRunner()->PostTask( 423 callback.Run(status, syncer->url());
437 FROM_HERE, base::Bind(callback, status, syncer->url()));
438 return; 424 return;
439 } 425 }
440 426
441 if (status == SYNC_STATUS_OK) { 427 if (status == SYNC_STATUS_OK) {
442 context_->GetUiTaskRunner()->PostTask( 428 // TODO(peria): Post task
443 FROM_HERE, 429 sync_engine_->DidProcessRemoteChange(syncer);
444 base::Bind(&SyncEngine::DidProcessRemoteChange, sync_engine_, syncer));
445 430
446 if (syncer->sync_action() == SYNC_ACTION_DELETED && 431 if (syncer->sync_action() == SYNC_ACTION_DELETED &&
447 syncer->url().is_valid() && 432 syncer->url().is_valid() &&
448 fileapi::VirtualPath::IsRootPath(syncer->url().path())) { 433 fileapi::VirtualPath::IsRootPath(syncer->url().path())) {
449 RegisterOrigin(syncer->url().origin(), base::Bind(&EmptyStatusCallback)); 434 RegisterOrigin(syncer->url().origin(), base::Bind(&EmptyStatusCallback));
450 } 435 }
451 should_check_conflict_ = true; 436 should_check_conflict_ = true;
452 } 437 }
453 438 callback.Run(status, syncer->url());
454 context_->GetUiTaskRunner()->PostTask(
455 FROM_HERE,
456 base::Bind(callback, status, syncer->url()));
457 } 439 }
458 440
459 void SyncWorker::DidApplyLocalChange(LocalToRemoteSyncer* syncer, 441 void SyncWorker::DidApplyLocalChange(LocalToRemoteSyncer* syncer,
460 const SyncStatusCallback& callback, 442 const SyncStatusCallback& callback,
461 SyncStatusCode status) { 443 SyncStatusCode status) {
462 // TODO(peria): PostTask (Simple replace fails DriveBackendSync* tests) 444 // TODO(peria): Post task
463 sync_engine_->DidApplyLocalChange(syncer, status); 445 sync_engine_->DidApplyLocalChange(syncer, status);
464 446
465 if (status == SYNC_STATUS_UNKNOWN_ORIGIN && syncer->url().is_valid()) { 447 if (status == SYNC_STATUS_UNKNOWN_ORIGIN && syncer->url().is_valid()) {
466 RegisterOrigin(syncer->url().origin(), 448 RegisterOrigin(syncer->url().origin(),
467 base::Bind(&EmptyStatusCallback)); 449 base::Bind(&EmptyStatusCallback));
468 } 450 }
469 451
470 if (syncer->needs_remote_change_listing() && 452 if (syncer->needs_remote_change_listing() &&
471 !listing_remote_changes_) { 453 !listing_remote_changes_) {
472 task_manager_->ScheduleSyncTask( 454 task_manager_->ScheduleSyncTask(
473 FROM_HERE, 455 FROM_HERE,
474 scoped_ptr<SyncTask>(new ListChangesTask(context_.get())), 456 scoped_ptr<SyncTask>(new ListChangesTask(context_.get())),
475 SyncTaskManager::PRIORITY_HIGH, 457 SyncTaskManager::PRIORITY_HIGH,
476 base::Bind(&SyncWorker::DidFetchChanges, 458 base::Bind(&SyncWorker::DidFetchChanges,
477 weak_ptr_factory_.GetWeakPtr())); 459 weak_ptr_factory_.GetWeakPtr()));
478 should_check_remote_change_ = false; 460 should_check_remote_change_ = false;
479 listing_remote_changes_ = true; 461 listing_remote_changes_ = true;
480 time_to_check_changes_ = 462 time_to_check_changes_ =
481 base::TimeTicks::Now() + 463 base::TimeTicks::Now() +
482 base::TimeDelta::FromSeconds(kListChangesRetryDelaySeconds); 464 base::TimeDelta::FromSeconds(kListChangesRetryDelaySeconds);
483 } 465 }
484 466
467 if (status != SYNC_STATUS_OK &&
468 status != SYNC_STATUS_NO_CHANGE_TO_SYNC) {
469 callback.Run(status);
470 return;
471 }
472
485 if (status == SYNC_STATUS_OK) 473 if (status == SYNC_STATUS_OK)
486 should_check_conflict_ = true; 474 should_check_conflict_ = true;
487 475
488 context_->GetUiTaskRunner()->PostTask( 476 callback.Run(status);
489 FROM_HERE, base::Bind(callback, status));
490 } 477 }
491 478
492 void SyncWorker::MaybeStartFetchChanges() { 479 void SyncWorker::MaybeStartFetchChanges() {
493 if (GetCurrentState() == REMOTE_SERVICE_DISABLED) 480 if (GetCurrentState() == REMOTE_SERVICE_DISABLED)
494 return; 481 return;
495 482
496 if (!GetMetadataDatabase()) 483 if (!GetMetadataDatabase())
497 return; 484 return;
498 485
499 if (listing_remote_changes_) 486 if (listing_remote_changes_)
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 const std::string& description) { 576 const std::string& description) {
590 RemoteServiceState old_state = GetCurrentState(); 577 RemoteServiceState old_state = GetCurrentState();
591 service_state_ = state; 578 service_state_ = state;
592 579
593 if (old_state == GetCurrentState()) 580 if (old_state == GetCurrentState())
594 return; 581 return;
595 582
596 util::Log(logging::LOG_VERBOSE, FROM_HERE, 583 util::Log(logging::LOG_VERBOSE, FROM_HERE,
597 "Service state changed: %d->%d: %s", 584 "Service state changed: %d->%d: %s",
598 old_state, GetCurrentState(), description.c_str()); 585 old_state, GetCurrentState(), description.c_str());
599 586 // TODO(peria): Post task
600 context_->GetUiTaskRunner()->PostTask( 587 sync_engine_->UpdateServiceState(description);
601 FROM_HERE,
602 base::Bind(&SyncEngine::UpdateServiceState, sync_engine_, description));
603 } 588 }
604 589
605 } // namespace drive_backend 590 } // namespace drive_backend
606 } // namespace sync_file_system 591 } // namespace sync_file_system
OLDNEW
« no previous file with comments | « chrome/browser/sync_file_system/drive_backend/sync_engine_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698