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

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

Issue 98043004: [SyncFS] Run ConflictResolver only when it is needed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix test expectation Created 7 years 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
« no previous file with comments | « chrome/browser/sync_file_system/drive_backend/sync_engine.h ('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 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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/threading/sequenced_worker_pool.h" 8 #include "base/threading/sequenced_worker_pool.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chrome/browser/drive/drive_api_service.h" 10 #include "chrome/browser/drive/drive_api_service.h"
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 drive::DriveNotificationManager* notification_manager, 389 drive::DriveNotificationManager* notification_manager,
390 ExtensionServiceInterface* extension_service) 390 ExtensionServiceInterface* extension_service)
391 : base_dir_(base_dir), 391 : base_dir_(base_dir),
392 task_runner_(task_runner), 392 task_runner_(task_runner),
393 drive_service_(drive_service.Pass()), 393 drive_service_(drive_service.Pass()),
394 drive_uploader_(drive_uploader.Pass()), 394 drive_uploader_(drive_uploader.Pass()),
395 notification_manager_(notification_manager), 395 notification_manager_(notification_manager),
396 extension_service_(extension_service), 396 extension_service_(extension_service),
397 remote_change_processor_(NULL), 397 remote_change_processor_(NULL),
398 service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE), 398 service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE),
399 should_check_conflict_(true),
399 should_check_remote_change_(true), 400 should_check_remote_change_(true),
400 sync_enabled_(false), 401 sync_enabled_(false),
401 conflict_resolution_policy_(CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN), 402 conflict_resolution_policy_(CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN),
402 network_available_(false), 403 network_available_(false),
403 weak_ptr_factory_(this) { 404 weak_ptr_factory_(this) {
404 } 405 }
405 406
406 void SyncEngine::DoDisableApp(const std::string& app_id, 407 void SyncEngine::DoDisableApp(const std::string& app_id,
407 const SyncStatusCallback& callback) { 408 const SyncStatusCallback& callback) {
408 metadata_database_->DisableApp(app_id, callback); 409 metadata_database_->DisableApp(app_id, callback);
(...skipping 18 matching lines...) Expand all
427 428
428 if (syncer->url().is_valid() && syncer->sync_action() != SYNC_ACTION_NONE) { 429 if (syncer->url().is_valid() && syncer->sync_action() != SYNC_ACTION_NONE) {
429 FOR_EACH_OBSERVER(FileStatusObserver, 430 FOR_EACH_OBSERVER(FileStatusObserver,
430 file_status_observers_, 431 file_status_observers_,
431 OnFileStatusChanged(syncer->url(), 432 OnFileStatusChanged(syncer->url(),
432 SYNC_FILE_STATUS_SYNCED, 433 SYNC_FILE_STATUS_SYNCED,
433 syncer->sync_action(), 434 syncer->sync_action(),
434 SYNC_DIRECTION_REMOTE_TO_LOCAL)); 435 SYNC_DIRECTION_REMOTE_TO_LOCAL));
435 } 436 }
436 437
438 if (status == SYNC_STATUS_OK)
439 should_check_conflict_ = true;
437 callback.Run(status, syncer->url()); 440 callback.Run(status, syncer->url());
438 } 441 }
439 442
440 void SyncEngine::DidApplyLocalChange(LocalToRemoteSyncer* syncer, 443 void SyncEngine::DidApplyLocalChange(LocalToRemoteSyncer* syncer,
441 const SyncStatusCallback& callback, 444 const SyncStatusCallback& callback,
442 SyncStatusCode status) { 445 SyncStatusCode status) {
443 util::Log(logging::LOG_VERBOSE, FROM_HERE, 446 util::Log(logging::LOG_VERBOSE, FROM_HERE,
444 "[Local->Remote] ApplyLocalChange finished --> %s", 447 "[Local->Remote] ApplyLocalChange finished --> %s",
445 SyncStatusCodeToString(status)); 448 SyncStatusCodeToString(status));
446 449
(...skipping 15 matching lines...) Expand all
462 465
463 if (status != SYNC_STATUS_OK && 466 if (status != SYNC_STATUS_OK &&
464 status != SYNC_STATUS_NO_CHANGE_TO_SYNC) { 467 status != SYNC_STATUS_NO_CHANGE_TO_SYNC) {
465 callback.Run(status); 468 callback.Run(status);
466 return; 469 return;
467 } 470 }
468 471
469 if (status == SYNC_STATUS_NO_CHANGE_TO_SYNC) 472 if (status == SYNC_STATUS_NO_CHANGE_TO_SYNC)
470 metadata_database_->PromoteLowerPriorityTrackersToNormal(); 473 metadata_database_->PromoteLowerPriorityTrackersToNormal();
471 474
475 if (status == SYNC_STATUS_OK)
476 should_check_conflict_ = true;
472 callback.Run(status); 477 callback.Run(status);
473 } 478 }
474 479
475 void SyncEngine::MaybeStartFetchChanges() { 480 void SyncEngine::MaybeStartFetchChanges() {
476 if (GetCurrentState() == REMOTE_SERVICE_DISABLED) 481 if (GetCurrentState() == REMOTE_SERVICE_DISABLED)
477 return; 482 return;
478 483
479 if (!metadata_database_) 484 if (!metadata_database_)
480 return; 485 return;
481 486
482 base::TimeTicks now = base::TimeTicks::Now(); 487 base::TimeTicks now = base::TimeTicks::Now();
483 if (!should_check_remote_change_ && now < time_to_check_changes_) { 488 if (!should_check_remote_change_ && now < time_to_check_changes_) {
484 if (!metadata_database_->HasDirtyTracker()) { 489 if (!metadata_database_->HasDirtyTracker() && should_check_conflict_) {
485 task_manager_->ScheduleSyncTaskIfIdle( 490 task_manager_->ScheduleSyncTaskIfIdle(
486 scoped_ptr<SyncTask>(new ConflictResolver(this)), 491 scoped_ptr<SyncTask>(new ConflictResolver(this)),
487 SyncStatusCallback()); 492 base::Bind(&SyncEngine::DidResolveConflict,
493 weak_ptr_factory_.GetWeakPtr()));
488 } 494 }
489 return; 495 return;
490 } 496 }
491 497
492 if (task_manager_->ScheduleSyncTaskIfIdle( 498 if (task_manager_->ScheduleSyncTaskIfIdle(
493 scoped_ptr<SyncTask>(new ListChangesTask(this)), 499 scoped_ptr<SyncTask>(new ListChangesTask(this)),
494 SyncStatusCallback())) { 500 base::Bind(&SyncEngine::DidFetchChanges,
501 weak_ptr_factory_.GetWeakPtr()))) {
495 should_check_remote_change_ = false; 502 should_check_remote_change_ = false;
496 time_to_check_changes_ = 503 time_to_check_changes_ =
497 now + base::TimeDelta::FromSeconds(kListChangesRetryDelaySeconds); 504 now + base::TimeDelta::FromSeconds(kListChangesRetryDelaySeconds);
498 } 505 }
499 } 506 }
500 507
508 void SyncEngine::DidResolveConflict(SyncStatusCode status) {
509 if (status == SYNC_STATUS_NO_CONFLICT)
510 should_check_conflict_ = false;
511 }
512
513 void SyncEngine::DidFetchChanges(SyncStatusCode status) {
514 if (status == SYNC_STATUS_OK)
515 should_check_conflict_ = true;
516 }
517
501 void SyncEngine::UpdateServiceStateFromSyncStatusCode( 518 void SyncEngine::UpdateServiceStateFromSyncStatusCode(
502 SyncStatusCode status, 519 SyncStatusCode status,
503 bool used_network) { 520 bool used_network) {
504 switch (status) { 521 switch (status) {
505 case SYNC_STATUS_OK: 522 case SYNC_STATUS_OK:
506 if (used_network) 523 if (used_network)
507 UpdateServiceState(REMOTE_SERVICE_OK, std::string()); 524 UpdateServiceState(REMOTE_SERVICE_OK, std::string());
508 break; 525 break;
509 526
510 // Authentication error. 527 // Authentication error.
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 tracker.tracker_kind() == TRACKER_KIND_APP_ROOT; 607 tracker.tracker_kind() == TRACKER_KIND_APP_ROOT;
591 if (is_app_enabled && !is_app_root_tracker_enabled) 608 if (is_app_enabled && !is_app_root_tracker_enabled)
592 EnableOrigin(origin, base::Bind(&EmptyStatusCallback)); 609 EnableOrigin(origin, base::Bind(&EmptyStatusCallback));
593 else if (!is_app_enabled && is_app_root_tracker_enabled) 610 else if (!is_app_enabled && is_app_root_tracker_enabled)
594 DisableOrigin(origin, base::Bind(&EmptyStatusCallback)); 611 DisableOrigin(origin, base::Bind(&EmptyStatusCallback));
595 } 612 }
596 } 613 }
597 614
598 } // namespace drive_backend 615 } // namespace drive_backend
599 } // namespace sync_file_system 616 } // namespace sync_file_system
OLDNEW
« no previous file with comments | « chrome/browser/sync_file_system/drive_backend/sync_engine.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698