OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_file_sync_service.h" | 5 #include "chrome/browser/sync_file_system/drive_file_sync_service.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 | 373 |
374 void DriveFileSyncService::DidInitializeMetadataStore( | 374 void DriveFileSyncService::DidInitializeMetadataStore( |
375 const SyncStatusCallback& callback, | 375 const SyncStatusCallback& callback, |
376 SyncStatusCode status, | 376 SyncStatusCode status, |
377 bool created) { | 377 bool created) { |
378 if (status != SYNC_STATUS_OK) { | 378 if (status != SYNC_STATUS_OK) { |
379 callback.Run(status); | 379 callback.Run(status); |
380 return; | 380 return; |
381 } | 381 } |
382 | 382 |
| 383 // TODO(calvinlo): Move the code to delete legacy batch_sync_origin keys from |
| 384 // DB into DriveMetadataStore.InitializeDBOnFileThread. |
| 385 std::vector<GURL> batch_origins_to_delete; |
| 386 typedef std::map<GURL, std::string>::const_iterator origin_itr; |
| 387 for (origin_itr itr = metadata_store_->batch_sync_origins().begin(); |
| 388 itr != metadata_store_->batch_sync_origins().end(); ++itr) { |
| 389 batch_origins_to_delete.push_back(itr->first); |
| 390 } |
| 391 for (std::vector<GURL>::const_iterator itr = batch_origins_to_delete.begin(); |
| 392 itr != batch_origins_to_delete.end(); ++itr) { |
| 393 metadata_store_->RemoveOrigin(*itr, base::Bind(&EmptyStatusCallback)); |
| 394 } |
| 395 |
383 DCHECK(pending_batch_sync_origins_.empty()); | 396 DCHECK(pending_batch_sync_origins_.empty()); |
384 | 397 |
385 UpdateRegisteredOrigins(); | 398 UpdateRegisteredOrigins(); |
386 | 399 |
387 largest_fetched_changestamp_ = metadata_store_->GetLargestChangeStamp(); | 400 largest_fetched_changestamp_ = metadata_store_->GetLargestChangeStamp(); |
388 | 401 |
389 // Mark all the batch sync origins as 'pending' so that we can start | |
390 // batch sync when we're ready. | |
391 for (std::map<GURL, std::string>::const_iterator itr = | |
392 metadata_store_->batch_sync_origins().begin(); | |
393 itr != metadata_store_->batch_sync_origins().end(); | |
394 ++itr) { | |
395 pending_batch_sync_origins_.insert(itr->first); | |
396 } | |
397 | |
398 DriveMetadataStore::URLAndDriveMetadataList to_be_fetched_files; | 402 DriveMetadataStore::URLAndDriveMetadataList to_be_fetched_files; |
399 status = metadata_store_->GetToBeFetchedFiles(&to_be_fetched_files); | 403 status = metadata_store_->GetToBeFetchedFiles(&to_be_fetched_files); |
400 DCHECK_EQ(SYNC_STATUS_OK, status); | 404 DCHECK_EQ(SYNC_STATUS_OK, status); |
401 typedef DriveMetadataStore::URLAndDriveMetadataList::const_iterator iterator; | 405 typedef DriveMetadataStore::URLAndDriveMetadataList::const_iterator iterator; |
402 for (iterator itr = to_be_fetched_files.begin(); | 406 for (iterator itr = to_be_fetched_files.begin(); |
403 itr != to_be_fetched_files.end(); ++itr) { | 407 itr != to_be_fetched_files.end(); ++itr) { |
404 const FileSystemURL& url = itr->first; | 408 const FileSystemURL& url = itr->first; |
405 const DriveMetadata& metadata = itr->second; | 409 const DriveMetadata& metadata = itr->second; |
406 const std::string& resource_id = metadata.resource_id(); | 410 const std::string& resource_id = metadata.resource_id(); |
407 | 411 |
408 SyncFileType file_type = SYNC_FILE_TYPE_FILE; | 412 SyncFileType file_type = SYNC_FILE_TYPE_FILE; |
409 if (metadata.type() == DriveMetadata::RESOURCE_TYPE_FOLDER) | 413 if (metadata.type() == DriveMetadata::RESOURCE_TYPE_FOLDER) |
410 file_type = SYNC_FILE_TYPE_DIRECTORY; | 414 file_type = SYNC_FILE_TYPE_DIRECTORY; |
| 415 if (!metadata_store_->IsIncrementalSyncOrigin(url.origin())) { |
| 416 metadata_store_->DeleteEntry(url, base::Bind(&EmptyStatusCallback)); |
| 417 continue; |
| 418 } |
411 AppendFetchChange(url.origin(), url.path(), resource_id, file_type); | 419 AppendFetchChange(url.origin(), url.path(), resource_id, file_type); |
412 } | 420 } |
413 | 421 |
414 if (!sync_root_resource_id().empty()) | 422 if (!sync_root_resource_id().empty()) |
415 api_util_->EnsureSyncRootIsNotInMyDrive(sync_root_resource_id()); | 423 api_util_->EnsureSyncRootIsNotInMyDrive(sync_root_resource_id()); |
416 | 424 |
417 callback.Run(status); | 425 callback.Run(status); |
418 may_have_unfetched_changes_ = true; | 426 may_have_unfetched_changes_ = true; |
419 | 427 |
420 google_apis::DriveNotificationManager* drive_notification_manager = | 428 google_apis::DriveNotificationManager* drive_notification_manager = |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
503 | 511 |
504 void DriveFileSyncService::DoEnableOriginForTrackingChanges( | 512 void DriveFileSyncService::DoEnableOriginForTrackingChanges( |
505 const GURL& origin, | 513 const GURL& origin, |
506 const SyncStatusCallback& callback) { | 514 const SyncStatusCallback& callback) { |
507 if (!metadata_store_->IsOriginDisabled(origin)) { | 515 if (!metadata_store_->IsOriginDisabled(origin)) { |
508 callback.Run(SYNC_STATUS_OK); | 516 callback.Run(SYNC_STATUS_OK); |
509 return; | 517 return; |
510 } | 518 } |
511 | 519 |
512 metadata_store_->EnableOrigin(origin, callback); | 520 metadata_store_->EnableOrigin(origin, callback); |
513 pending_batch_sync_origins_.insert(origin); | 521 pending_batch_sync_origins_.insert( |
| 522 *metadata_store_->disabled_origins().find(origin)); |
514 } | 523 } |
515 | 524 |
516 void DriveFileSyncService::DoDisableOriginForTrackingChanges( | 525 void DriveFileSyncService::DoDisableOriginForTrackingChanges( |
517 const GURL& origin, | 526 const GURL& origin, |
518 const SyncStatusCallback& callback) { | 527 const SyncStatusCallback& callback) { |
519 if (!metadata_store_->IsBatchSyncOrigin(origin) && | 528 pending_batch_sync_origins_.erase(origin); |
520 !metadata_store_->IsIncrementalSyncOrigin(origin)) { | 529 if (!metadata_store_->IsIncrementalSyncOrigin(origin)) { |
521 callback.Run(SYNC_STATUS_OK); | 530 callback.Run(SYNC_STATUS_OK); |
522 return; | 531 return; |
523 } | 532 } |
524 | 533 |
525 remote_change_handler_.RemoveChangesForOrigin(origin); | 534 remote_change_handler_.RemoveChangesForOrigin(origin); |
526 pending_batch_sync_origins_.erase(origin); | |
527 metadata_store_->DisableOrigin(origin, callback); | 535 metadata_store_->DisableOrigin(origin, callback); |
528 } | 536 } |
529 | 537 |
530 void DriveFileSyncService::DoUninstallOrigin( | 538 void DriveFileSyncService::DoUninstallOrigin( |
531 const GURL& origin, | 539 const GURL& origin, |
532 const SyncStatusCallback& callback) { | 540 const SyncStatusCallback& callback) { |
| 541 // Because origin management is now split between DriveFileSyncService and |
| 542 // DriveMetadataStore, resource_id must be checked for in two places. |
533 std::string resource_id = metadata_store_->GetResourceIdForOrigin(origin); | 543 std::string resource_id = metadata_store_->GetResourceIdForOrigin(origin); |
| 544 if (resource_id.empty()) { |
| 545 std::map<GURL, std::string>::const_iterator iterator = |
| 546 pending_batch_sync_origins_.find(origin); |
| 547 if (iterator != pending_batch_sync_origins_.end()) |
| 548 resource_id = iterator->second; |
| 549 } |
534 | 550 |
535 // An empty resource_id indicates either one of following two cases: | 551 // An empty resource_id indicates either one of following two cases: |
536 // 1) origin is not in metadata_store_ because the extension was never | 552 // 1) origin is not in metadata_store_ because the extension was never |
537 // run or it's not managed by this service, and thus no | 553 // run or it's not managed by this service, and thus no |
538 // origin directory on the remote drive was created. | 554 // origin directory on the remote drive was created. |
539 // 2) origin or sync root folder is deleted on Drive. | 555 // 2) origin or sync root folder is deleted on Drive. |
540 if (resource_id.empty()) { | 556 if (resource_id.empty()) { |
541 callback.Run(SYNC_STATUS_UNKNOWN_ORIGIN); | 557 callback.Run(SYNC_STATUS_UNKNOWN_ORIGIN); |
542 return; | 558 return; |
543 } | 559 } |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
611 running_local_sync_task_.reset(new drive::LocalChangeProcessorDelegate( | 627 running_local_sync_task_.reset(new drive::LocalChangeProcessorDelegate( |
612 AsWeakPtr(), local_file_change, local_file_path, | 628 AsWeakPtr(), local_file_change, local_file_path, |
613 local_file_metadata, url)); | 629 local_file_metadata, url)); |
614 running_local_sync_task_->Run(base::Bind( | 630 running_local_sync_task_->Run(base::Bind( |
615 &DriveFileSyncService::DidApplyLocalChange, AsWeakPtr(), callback)); | 631 &DriveFileSyncService::DidApplyLocalChange, AsWeakPtr(), callback)); |
616 } | 632 } |
617 | 633 |
618 void DriveFileSyncService::UpdateRegisteredOrigins() { | 634 void DriveFileSyncService::UpdateRegisteredOrigins() { |
619 ExtensionService* extension_service = | 635 ExtensionService* extension_service = |
620 extensions::ExtensionSystem::Get(profile_)->extension_service(); | 636 extensions::ExtensionSystem::Get(profile_)->extension_service(); |
| 637 DCHECK(pending_batch_sync_origins_.empty()); |
| 638 DCHECK(metadata_store_->batch_sync_origins().empty()); |
621 if (!extension_service) | 639 if (!extension_service) |
622 return; | 640 return; |
623 | 641 |
624 std::vector<GURL> origins; | 642 std::vector<GURL> origins; |
625 metadata_store_->GetAllOrigins(&origins); | 643 metadata_store_->GetAllOrigins(&origins); |
| 644 |
| 645 // Update the status of every origin using status from ExtensionService. |
626 for (std::vector<GURL>::const_iterator itr = origins.begin(); | 646 for (std::vector<GURL>::const_iterator itr = origins.begin(); |
627 itr != origins.end(); ++itr) { | 647 itr != origins.end(); ++itr) { |
628 std::string extension_id = itr->host(); | 648 std::string extension_id = itr->host(); |
629 GURL origin = | 649 GURL origin = |
630 extensions::Extension::GetBaseURLFromExtensionId(extension_id); | 650 extensions::Extension::GetBaseURLFromExtensionId(extension_id); |
631 | 651 |
632 if (!extension_service->GetInstalledExtension(extension_id)) { | 652 if (!extension_service->GetInstalledExtension(extension_id)) { |
633 // Extension has been uninstalled. | 653 // Extension has been uninstalled. |
634 UninstallOrigin(origin, base::Bind(&EmptyStatusCallback)); | 654 UninstallOrigin(origin, base::Bind(&EmptyStatusCallback)); |
635 } else if ((metadata_store_->IsBatchSyncOrigin(origin) || | 655 } else if (metadata_store_->IsIncrementalSyncOrigin(origin) && |
636 metadata_store_->IsIncrementalSyncOrigin(origin)) && | |
637 !extension_service->IsExtensionEnabled(extension_id)) { | 656 !extension_service->IsExtensionEnabled(extension_id)) { |
638 // Extension has been disabled. | 657 // Incremental Extension has been disabled. |
639 metadata_store_->DisableOrigin(origin, base::Bind(&EmptyStatusCallback)); | 658 metadata_store_->DisableOrigin(origin, base::Bind(&EmptyStatusCallback)); |
640 } else if (metadata_store_->IsOriginDisabled(origin) && | 659 } else if (metadata_store_->IsOriginDisabled(origin) && |
641 extension_service->IsExtensionEnabled(extension_id)) { | 660 extension_service->IsExtensionEnabled(extension_id)) { |
642 // Extension has been re-enabled. | 661 // Extension has been re-enabled. |
| 662 pending_batch_sync_origins_.insert( |
| 663 *metadata_store_->disabled_origins().find(origin)); |
643 metadata_store_->EnableOrigin(origin, base::Bind(&EmptyStatusCallback)); | 664 metadata_store_->EnableOrigin(origin, base::Bind(&EmptyStatusCallback)); |
644 pending_batch_sync_origins_.insert(origin); | |
645 } | 665 } |
646 } | 666 } |
647 } | 667 } |
648 | 668 |
649 void DriveFileSyncService::StartBatchSync( | 669 void DriveFileSyncService::StartBatchSync( |
650 const SyncStatusCallback& callback) { | 670 const SyncStatusCallback& callback) { |
651 DCHECK(GetCurrentState() == REMOTE_SERVICE_OK || may_have_unfetched_changes_); | 671 DCHECK(GetCurrentState() == REMOTE_SERVICE_OK || may_have_unfetched_changes_); |
| 672 DCHECK(!pending_batch_sync_origins_.empty()); |
652 | 673 |
653 if (pending_batch_sync_origins_.empty()) { | 674 GURL origin = pending_batch_sync_origins_.begin()->first; |
654 callback.Run(SYNC_STATUS_OK); | 675 std::string resource_id = pending_batch_sync_origins_.begin()->second; |
655 return; | 676 DCHECK(!resource_id.empty()); |
656 } | |
657 | |
658 GURL origin = *pending_batch_sync_origins_.begin(); | |
659 pending_batch_sync_origins_.erase(pending_batch_sync_origins_.begin()); | 677 pending_batch_sync_origins_.erase(pending_batch_sync_origins_.begin()); |
660 std::string resource_id = metadata_store_->GetResourceIdForOrigin(origin); | |
661 DCHECK(!resource_id.empty()); | |
662 | 678 |
663 DCHECK(!metadata_store_->IsOriginDisabled(origin)); | 679 DCHECK(!metadata_store_->IsOriginDisabled(origin)); |
664 | 680 |
665 DVLOG(1) << "Start batch sync for:" << origin.spec(); | 681 DVLOG(1) << "Start batch sync for:" << origin.spec(); |
666 | 682 |
667 api_util_->GetLargestChangeStamp( | 683 api_util_->GetLargestChangeStamp( |
668 base::Bind(&DriveFileSyncService::DidGetLargestChangeStampForBatchSync, | 684 base::Bind(&DriveFileSyncService::DidGetLargestChangeStampForBatchSync, |
669 AsWeakPtr(), | 685 AsWeakPtr(), |
670 callback, | 686 callback, |
671 origin, | 687 origin, |
(...skipping 16 matching lines...) Expand all Loading... |
688 &DriveFileSyncService::DidGetDriveDirectoryForOrigin, | 704 &DriveFileSyncService::DidGetDriveDirectoryForOrigin, |
689 AsWeakPtr(), origin, callback)); | 705 AsWeakPtr(), origin, callback)); |
690 return; | 706 return; |
691 } | 707 } |
692 | 708 |
693 if (status != SYNC_STATUS_OK) { | 709 if (status != SYNC_STATUS_OK) { |
694 callback.Run(status); | 710 callback.Run(status); |
695 return; | 711 return; |
696 } | 712 } |
697 | 713 |
698 // Add this origin to batch sync origin if it hasn't been already. | 714 if (!metadata_store_->IsKnownOrigin(origin)) |
699 if (!metadata_store_->IsKnownOrigin(origin)) { | 715 pending_batch_sync_origins_.insert(std::make_pair(origin, resource_id)); |
700 metadata_store_->AddBatchSyncOrigin(origin, resource_id); | |
701 pending_batch_sync_origins_.insert(origin); | |
702 } | |
703 | 716 |
704 callback.Run(SYNC_STATUS_OK); | 717 callback.Run(SYNC_STATUS_OK); |
705 } | 718 } |
706 | 719 |
707 void DriveFileSyncService::DidUninstallOrigin( | 720 void DriveFileSyncService::DidUninstallOrigin( |
708 const GURL& origin, | 721 const GURL& origin, |
709 const SyncStatusCallback& callback, | 722 const SyncStatusCallback& callback, |
710 google_apis::GDataErrorCode error) { | 723 google_apis::GDataErrorCode error) { |
711 SyncStatusCode status = GDataErrorCodeToSyncStatusCodeWrapper(error); | 724 SyncStatusCode status = GDataErrorCodeToSyncStatusCodeWrapper(error); |
712 if (status != SYNC_STATUS_OK) { | 725 if (status != SYNC_STATUS_OK) { |
713 callback.Run(status); | 726 callback.Run(status); |
714 return; | 727 return; |
715 } | 728 } |
716 | 729 |
717 // Origin directory has been removed so it's now safe to remove the origin | 730 // Origin directory has been removed so it's now safe to remove the origin |
718 // from the metadata store. | 731 // from the metadata store. |
719 DoUnregisterOriginForTrackingChanges(origin, callback); | 732 DoUnregisterOriginForTrackingChanges(origin, callback); |
720 } | 733 } |
721 | 734 |
722 void DriveFileSyncService::DidGetLargestChangeStampForBatchSync( | 735 void DriveFileSyncService::DidGetLargestChangeStampForBatchSync( |
723 const SyncStatusCallback& callback, | 736 const SyncStatusCallback& callback, |
724 const GURL& origin, | 737 const GURL& origin, |
725 const std::string& resource_id, | 738 const std::string& resource_id, |
726 google_apis::GDataErrorCode error, | 739 google_apis::GDataErrorCode error, |
727 int64 largest_changestamp) { | 740 int64 largest_changestamp) { |
728 if (error != google_apis::HTTP_SUCCESS) { | 741 if (error != google_apis::HTTP_SUCCESS) { |
729 pending_batch_sync_origins_.insert(origin); | 742 pending_batch_sync_origins_.insert(std::make_pair(origin, resource_id)); |
730 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); | 743 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); |
731 return; | 744 return; |
732 } | 745 } |
733 | 746 |
734 if (metadata_store_->incremental_sync_origins().empty()) { | 747 if (metadata_store_->incremental_sync_origins().empty()) { |
735 largest_fetched_changestamp_ = largest_changestamp; | 748 largest_fetched_changestamp_ = largest_changestamp; |
736 metadata_store_->SetLargestChangeStamp( | 749 metadata_store_->SetLargestChangeStamp( |
737 largest_changestamp, | 750 largest_changestamp, |
738 base::Bind(&EmptyStatusCallback)); | 751 base::Bind(&EmptyStatusCallback)); |
739 } | 752 } |
740 | 753 |
741 api_util_->ListFiles( | 754 api_util_->ListFiles( |
742 resource_id, | 755 resource_id, |
743 base::Bind(&DriveFileSyncService::DidGetDirectoryContentForBatchSync, | 756 base::Bind(&DriveFileSyncService::DidGetDirectoryContentForBatchSync, |
744 AsWeakPtr(), | 757 AsWeakPtr(), |
745 callback, | 758 callback, |
746 origin, | 759 origin, |
| 760 resource_id, |
747 largest_changestamp)); | 761 largest_changestamp)); |
748 } | 762 } |
749 | 763 |
750 void DriveFileSyncService::DidGetDirectoryContentForBatchSync( | 764 void DriveFileSyncService::DidGetDirectoryContentForBatchSync( |
751 const SyncStatusCallback& callback, | 765 const SyncStatusCallback& callback, |
752 const GURL& origin, | 766 const GURL& origin, |
| 767 const std::string& resource_id, |
753 int64 largest_changestamp, | 768 int64 largest_changestamp, |
754 google_apis::GDataErrorCode error, | 769 google_apis::GDataErrorCode error, |
755 scoped_ptr<google_apis::ResourceList> feed) { | 770 scoped_ptr<google_apis::ResourceList> feed) { |
756 if (error != google_apis::HTTP_SUCCESS) { | 771 if (error != google_apis::HTTP_SUCCESS) { |
757 pending_batch_sync_origins_.insert(origin); | 772 pending_batch_sync_origins_.insert(std::make_pair(origin, resource_id)); |
758 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); | 773 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); |
759 return; | 774 return; |
760 } | 775 } |
761 | 776 |
762 typedef ScopedVector<google_apis::ResourceEntry>::const_iterator iterator; | 777 typedef ScopedVector<google_apis::ResourceEntry>::const_iterator iterator; |
763 for (iterator itr = feed->entries().begin(); | 778 for (iterator itr = feed->entries().begin(); |
764 itr != feed->entries().end(); ++itr) { | 779 itr != feed->entries().end(); ++itr) { |
765 AppendRemoteChange(origin, **itr, largest_changestamp, | 780 const google_apis::ResourceEntry& entry = **itr; |
| 781 AppendRemoteChange(origin, entry, largest_changestamp, |
766 RemoteChangeHandler::REMOTE_SYNC_TYPE_BATCH); | 782 RemoteChangeHandler::REMOTE_SYNC_TYPE_BATCH); |
| 783 |
| 784 // Save to be fetched file to DB for restore in case of crash. |
| 785 DriveMetadata metadata; |
| 786 metadata.set_resource_id(entry.resource_id()); |
| 787 metadata.set_md5_checksum(entry.file_md5()); |
| 788 metadata.set_conflicted(false); |
| 789 metadata.set_to_be_fetched(true); |
| 790 |
| 791 base::FilePath path = TitleToPath(entry.title()); |
| 792 fileapi::FileSystemURL url(CreateSyncableFileSystemURL( |
| 793 origin, kServiceName, path)); |
| 794 // TODO(calvinlo): Write metadata and origin data as single batch command |
| 795 // so it's not possible for the DB to contain a DriveMetadata with an |
| 796 // unknown origin. |
| 797 metadata_store_->UpdateEntry(url, metadata, |
| 798 base::Bind(&EmptyStatusCallback)); |
767 } | 799 } |
768 | 800 |
769 GURL next_feed_url; | 801 GURL next_feed_url; |
770 if (feed->GetNextFeedURL(&next_feed_url)) { | 802 if (feed->GetNextFeedURL(&next_feed_url)) { |
771 api_util_->ContinueListing( | 803 api_util_->ContinueListing( |
772 next_feed_url, | 804 next_feed_url, |
773 base::Bind(&DriveFileSyncService::DidGetDirectoryContentForBatchSync, | 805 base::Bind(&DriveFileSyncService::DidGetDirectoryContentForBatchSync, |
774 AsWeakPtr(), | 806 AsWeakPtr(), |
775 callback, | 807 callback, |
776 origin, | 808 origin, |
| 809 resource_id, |
777 largest_changestamp)); | 810 largest_changestamp)); |
778 return; | 811 return; |
779 } | 812 } |
780 | 813 |
781 // Move |origin| to the incremental sync origin set if the origin has no file. | 814 metadata_store_->AddIncrementalSyncOrigin(origin, resource_id); |
782 if (metadata_store_->IsBatchSyncOrigin(origin) && | |
783 !remote_change_handler_.HasChangesForOrigin(origin)) { | |
784 metadata_store_->MoveBatchSyncOriginToIncremental(origin); | |
785 } | |
786 | |
787 may_have_unfetched_changes_ = true; | 815 may_have_unfetched_changes_ = true; |
788 callback.Run(SYNC_STATUS_OK); | 816 callback.Run(SYNC_STATUS_OK); |
789 } | 817 } |
790 | 818 |
791 // TODO(tzik): Factor out this conflict resolution function. | 819 // TODO(tzik): Factor out this conflict resolution function. |
792 ConflictResolutionResult DriveFileSyncService::ResolveConflictForLocalSync( | 820 ConflictResolutionResult DriveFileSyncService::ResolveConflictForLocalSync( |
793 SyncFileType local_file_type, | 821 SyncFileType local_file_type, |
794 const base::Time& local_updated_time, | 822 const base::Time& local_updated_time, |
795 SyncFileType remote_file_type, | 823 SyncFileType remote_file_type, |
796 const base::Time& remote_updated_time) { | 824 const base::Time& remote_updated_time) { |
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1359 DVLOG(3) << "Append remote change: " << path.value() | 1387 DVLOG(3) << "Append remote change: " << path.value() |
1360 << " (" << normalized_path << ")" | 1388 << " (" << normalized_path << ")" |
1361 << "@" << changestamp << " " | 1389 << "@" << changestamp << " " |
1362 << file_change.DebugString(); | 1390 << file_change.DebugString(); |
1363 | 1391 |
1364 return true; | 1392 return true; |
1365 } | 1393 } |
1366 | 1394 |
1367 void DriveFileSyncService::RemoveRemoteChange( | 1395 void DriveFileSyncService::RemoveRemoteChange( |
1368 const FileSystemURL& url) { | 1396 const FileSystemURL& url) { |
1369 if (!remote_change_handler_.RemoveChangeForURL(url)) | 1397 remote_change_handler_.RemoveChangeForURL(url); |
1370 return; | |
1371 if (metadata_store_->IsBatchSyncOrigin(url.origin()) && | |
1372 !remote_change_handler_.HasChangesForOrigin(url.origin())) { | |
1373 metadata_store_->MoveBatchSyncOriginToIncremental(url.origin()); | |
1374 } | |
1375 } | 1398 } |
1376 | 1399 |
1377 void DriveFileSyncService::MarkConflict( | 1400 void DriveFileSyncService::MarkConflict( |
1378 const fileapi::FileSystemURL& url, | 1401 const fileapi::FileSystemURL& url, |
1379 DriveMetadata* drive_metadata, | 1402 DriveMetadata* drive_metadata, |
1380 const SyncStatusCallback& callback) { | 1403 const SyncStatusCallback& callback) { |
1381 DCHECK(drive_metadata); | 1404 DCHECK(drive_metadata); |
1382 if (drive_metadata->resource_id().empty()) { | 1405 if (drive_metadata->resource_id().empty()) { |
1383 // If the file does not have valid drive_metadata in the metadata store | 1406 // If the file does not have valid drive_metadata in the metadata store |
1384 // we must have a pending remote change entry. | 1407 // we must have a pending remote change entry. |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1701 | 1724 |
1702 void DriveFileSyncService::DidEnsureOriginRoot( | 1725 void DriveFileSyncService::DidEnsureOriginRoot( |
1703 const GURL& origin, | 1726 const GURL& origin, |
1704 const ResourceIdCallback& callback, | 1727 const ResourceIdCallback& callback, |
1705 google_apis::GDataErrorCode error, | 1728 google_apis::GDataErrorCode error, |
1706 const std::string& resource_id) { | 1729 const std::string& resource_id) { |
1707 SyncStatusCode status = GDataErrorCodeToSyncStatusCodeWrapper(error); | 1730 SyncStatusCode status = GDataErrorCodeToSyncStatusCodeWrapper(error); |
1708 if (status == SYNC_STATUS_OK && | 1731 if (status == SYNC_STATUS_OK && |
1709 metadata_store_->IsKnownOrigin(origin)) { | 1732 metadata_store_->IsKnownOrigin(origin)) { |
1710 metadata_store_->SetOriginRootDirectory(origin, resource_id); | 1733 metadata_store_->SetOriginRootDirectory(origin, resource_id); |
1711 if (metadata_store_->IsBatchSyncOrigin(origin)) | |
1712 pending_batch_sync_origins_.insert(origin); | |
1713 } | 1734 } |
1714 callback.Run(status, resource_id); | 1735 callback.Run(status, resource_id); |
1715 } | 1736 } |
1716 | 1737 |
1717 std::string DriveFileSyncService::sync_root_resource_id() { | 1738 std::string DriveFileSyncService::sync_root_resource_id() { |
1718 return metadata_store_->sync_root_directory(); | 1739 return metadata_store_->sync_root_directory(); |
1719 } | 1740 } |
1720 | 1741 |
1721 } // namespace sync_file_system | 1742 } // namespace sync_file_system |
OLD | NEW |