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

Side by Side Diff: chrome/browser/sync_file_system/drive_file_sync_service.cc

Issue 12744008: SyncFS: store disabled origins in DriveMetadataStore (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 7 years, 9 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) 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 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 OriginToChangesMap::iterator found = origin_to_changes_map_.find(origin); 413 OriginToChangesMap::iterator found = origin_to_changes_map_.find(origin);
414 if (found != origin_to_changes_map_.end()) { 414 if (found != origin_to_changes_map_.end()) {
415 for (PathToChangeMap::iterator itr = found->second.begin(); 415 for (PathToChangeMap::iterator itr = found->second.begin();
416 itr != found->second.end(); ++itr) 416 itr != found->second.end(); ++itr)
417 pending_changes_.erase(itr->second.position_in_queue); 417 pending_changes_.erase(itr->second.position_in_queue);
418 origin_to_changes_map_.erase(found); 418 origin_to_changes_map_.erase(found);
419 } 419 }
420 pending_batch_sync_origins_.erase(origin); 420 pending_batch_sync_origins_.erase(origin);
421 421
422 metadata_store_->RemoveOrigin(origin, base::Bind( 422 metadata_store_->RemoveOrigin(origin, base::Bind(
423 &DriveFileSyncService::DidRemoveOriginOnMetadataStore, 423 &DriveFileSyncService::DidChangeOriginOnMetadataStore,
424 AsWeakPtr(), base::Passed(&token), callback)); 424 AsWeakPtr(), base::Passed(&token), callback));
425 } 425 }
426 426
427 void DriveFileSyncService::EnableOriginForTrackingChanges(
428 const GURL& origin,
429 const SyncStatusCallback& callback) {
430 scoped_ptr<TaskToken> token(GetToken(FROM_HERE, TASK_TYPE_DATABASE, ""));
431 if (!token) {
432 pending_tasks_.push_back(base::Bind(
433 &DriveFileSyncService::EnableOriginForTrackingChanges,
434 AsWeakPtr(), origin, callback));
435 return;
436 }
437
438 metadata_store_->EnableSyncOrigin(origin, base::Bind(
439 &DriveFileSyncService::DidChangeOriginOnMetadataStore,
440 AsWeakPtr(), base::Passed(&token), callback));
441 pending_batch_sync_origins_.insert(origin);
442 }
443
444 void DriveFileSyncService::DisableOriginForTrackingChanges(
445 const GURL& origin,
446 const SyncStatusCallback& callback) {
447 scoped_ptr<TaskToken> token(GetToken(FROM_HERE, TASK_TYPE_DATABASE, ""));
448 if (!token) {
449 pending_tasks_.push_back(base::Bind(
450 &DriveFileSyncService::DisableOriginForTrackingChanges,
451 AsWeakPtr(), origin, callback));
452 return;
453 }
454
455 metadata_store_->DisableSyncOrigin(origin, base::Bind(
456 &DriveFileSyncService::DidChangeOriginOnMetadataStore,
457 AsWeakPtr(), base::Passed(&token), callback));
458 }
459
427 void DriveFileSyncService::DeleteOriginDirectory( 460 void DriveFileSyncService::DeleteOriginDirectory(
428 const GURL& origin, 461 const GURL& origin,
429 const SyncStatusCallback& callback) { 462 const SyncStatusCallback& callback) {
430 scoped_ptr<TaskToken> token(GetToken( 463 scoped_ptr<TaskToken> token(GetToken(
431 FROM_HERE, TASK_TYPE_DATABASE, "Delete Origin Directory")); 464 FROM_HERE, TASK_TYPE_DATABASE, "Delete Origin Directory"));
432 if (!token) { 465 if (!token) {
433 pending_tasks_.push_back(base::Bind( 466 pending_tasks_.push_back(base::Bind(
434 &DriveFileSyncService::DeleteOriginDirectory, 467 &DriveFileSyncService::DeleteOriginDirectory,
435 AsWeakPtr(), origin, callback)); 468 AsWeakPtr(), origin, callback));
436 return; 469 return;
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
846 879
847 void DriveFileSyncService::DidInitializeMetadataStore( 880 void DriveFileSyncService::DidInitializeMetadataStore(
848 scoped_ptr<TaskToken> token, 881 scoped_ptr<TaskToken> token,
849 SyncStatusCode status, 882 SyncStatusCode status,
850 bool created) { 883 bool created) {
851 if (status != SYNC_STATUS_OK) { 884 if (status != SYNC_STATUS_OK) {
852 NotifyTaskDone(status, token.Pass()); 885 NotifyTaskDone(status, token.Pass());
853 return; 886 return;
854 } 887 }
855 888
856 // Remove any origins that are not installed or enabled. 889 UpdateRegisteredOrigins();
857 UnregisterInactiveExtensionsIds();
858 890
859 largest_fetched_changestamp_ = metadata_store_->GetLargestChangeStamp(); 891 largest_fetched_changestamp_ = metadata_store_->GetLargestChangeStamp();
860 892
861 // Mark all the batch sync origins as 'pending' so that we can start 893 // Mark all the batch sync origins as 'pending' so that we can start
862 // batch sync when we're ready. 894 // batch sync when we're ready.
863 DCHECK(pending_batch_sync_origins_.empty()); 895 DCHECK(pending_batch_sync_origins_.empty());
864 for (std::map<GURL, std::string>::const_iterator itr = 896 for (std::map<GURL, std::string>::const_iterator itr =
865 metadata_store_->batch_sync_origins().begin(); 897 metadata_store_->batch_sync_origins().begin();
866 itr != metadata_store_->batch_sync_origins().end(); 898 itr != metadata_store_->batch_sync_origins().end();
867 ++itr) { 899 ++itr) {
(...skipping 11 matching lines...) Expand all
879 const std::string& resource_id = itr->second; 911 const std::string& resource_id = itr->second;
880 AppendFetchChange(url.origin(), url.path(), resource_id); 912 AppendFetchChange(url.origin(), url.path(), resource_id);
881 } 913 }
882 914
883 // It's ok to fail, so we pass EmptyResourceIdCallback here. 915 // It's ok to fail, so we pass EmptyResourceIdCallback here.
884 GetSyncRootDirectory(token.Pass(), base::Bind(&EmptyResourceIdCallback)); 916 GetSyncRootDirectory(token.Pass(), base::Bind(&EmptyResourceIdCallback));
885 917
886 RegisterDriveNotifications(); 918 RegisterDriveNotifications();
887 } 919 }
888 920
889 void DriveFileSyncService::UnregisterInactiveExtensionsIds() { 921 void DriveFileSyncService::UpdateRegisteredOrigins() {
890 ExtensionService* extension_service = 922 ExtensionService* extension_service =
891 extensions::ExtensionSystem::Get(profile_)->extension_service(); 923 extensions::ExtensionSystem::Get(profile_)->extension_service();
892 if (!extension_service) 924 if (!extension_service)
893 return; 925 return;
894 std::vector<GURL> tracked_origins;
895 metadata_store_->GetAllOrigins(&tracked_origins);
896 926
897 for (std::vector<GURL>::const_iterator itr = tracked_origins.begin(); 927 std::vector<GURL> disabled_origins;
898 itr != tracked_origins.end(); 928 metadata_store_->GetDisabledOrigins(&disabled_origins);
899 ++itr) { 929 for (std::vector<GURL>::const_iterator itr = disabled_origins.begin();
900 // Make sure the registered extension is installed and enabled. 930 itr != disabled_origins.end(); ++itr) {
901 std::string extension_id = itr->host(); 931 std::string extension_id = itr->host();
902 const extensions::Extension* installed_extension = 932 GURL origin =
903 extension_service->GetExtensionById(extension_id, 933 extensions::Extension::GetBaseURLFromExtensionId(extension_id);
904 false /* include_disabled */); 934
905 if (installed_extension != NULL) 935 if (extension_service->GetInstalledExtension(extension_id) == NULL) {
936 // Extension is uninstalled. Unregister origin.
937 metadata_store_->RemoveOrigin(
938 origin, base::Bind(&DidRemoveOrigin, origin));
906 continue; 939 continue;
940 }
907 941
908 // Extension is either disabled or uninstalled. Unregister origin. 942 if (extension_service->IsExtensionEnabled(extension_id)) {
909 GURL origin = extensions::Extension::GetBaseURLFromExtensionId( 943 // Extension is enabled. Enable origin.
910 extension_id); 944 metadata_store_->EnableSyncOrigin(
911 metadata_store_->RemoveOrigin(origin, base::Bind(&DidRemoveOrigin, origin)); 945 origin, base::Bind(&EmptyStatusCallback));
946 pending_batch_sync_origins_.insert(origin);
947 continue;
948 }
949
950 // Extension is still disabled.
951 }
952
953 std::vector<GURL> enabled_origins;
954 metadata_store_->GetEnabledOrigins(&enabled_origins);
955 for (std::vector<GURL>::const_iterator itr = enabled_origins.begin();
956 itr != enabled_origins.end(); ++itr) {
957 std::string extension_id = itr->host();
958 GURL origin =
959 extensions::Extension::GetBaseURLFromExtensionId(extension_id);
960
961 if (extension_service->GetInstalledExtension(extension_id) == NULL) {
962 // Extension is uninstalled. Unregister origin.
963 metadata_store_->RemoveOrigin(
964 origin, base::Bind(&DidRemoveOrigin, origin));
965 continue;
966 }
967
968 if (!extension_service->IsExtensionEnabled(extension_id)) {
969 // Extension is disabled. Disable origin.
970 metadata_store_->DisableSyncOrigin(
971 origin, base::Bind(&EmptyStatusCallback));
972 continue;
973 }
974
975 // Extension is still enabled.
912 } 976 }
913 } 977 }
914 978
915 void DriveFileSyncService::GetSyncRootDirectory( 979 void DriveFileSyncService::GetSyncRootDirectory(
916 scoped_ptr<TaskToken> token, 980 scoped_ptr<TaskToken> token,
917 const ResourceIdCallback& callback) { 981 const ResourceIdCallback& callback) {
918 token->UpdateTask(FROM_HERE, TASK_TYPE_DRIVE, "Retrieving drive root"); 982 token->UpdateTask(FROM_HERE, TASK_TYPE_DRIVE, "Retrieving drive root");
919 sync_client_->GetDriveDirectoryForSyncRoot( 983 sync_client_->GetDriveDirectoryForSyncRoot(
920 base::Bind(&DriveFileSyncService::DidGetSyncRootDirectory, 984 base::Bind(&DriveFileSyncService::DidGetSyncRootDirectory,
921 AsWeakPtr(), base::Passed(&token), callback)); 985 AsWeakPtr(), base::Passed(&token), callback));
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
1010 const std::string& resource_id) { 1074 const std::string& resource_id) {
1011 if (error != google_apis::HTTP_SUCCESS && 1075 if (error != google_apis::HTTP_SUCCESS &&
1012 error != google_apis::HTTP_CREATED) { 1076 error != google_apis::HTTP_CREATED) {
1013 SyncStatusCode status = 1077 SyncStatusCode status =
1014 GDataErrorCodeToSyncStatusCodeWrapper(error); 1078 GDataErrorCodeToSyncStatusCodeWrapper(error);
1015 NotifyTaskDone(status, token.Pass()); 1079 NotifyTaskDone(status, token.Pass());
1016 callback.Run(status); 1080 callback.Run(status);
1017 return; 1081 return;
1018 } 1082 }
1019 1083
1020 metadata_store_->AddBatchSyncOrigin(origin, resource_id); 1084 if (!metadata_store_->IsDisabledSyncOrigin(origin)) {
1021 pending_batch_sync_origins_.insert(origin); 1085 metadata_store_->AddBatchSyncOrigin(origin, resource_id);
1086 pending_batch_sync_origins_.insert(origin);
1087 }
1022 1088
1023 NotifyTaskDone(SYNC_STATUS_OK, token.Pass()); 1089 NotifyTaskDone(SYNC_STATUS_OK, token.Pass());
1024 callback.Run(SYNC_STATUS_OK); 1090 callback.Run(SYNC_STATUS_OK);
1025 } 1091 }
1026 1092
1027 void DriveFileSyncService::DidDeleteOriginDirectory( 1093 void DriveFileSyncService::DidDeleteOriginDirectory(
1028 scoped_ptr<TaskToken> token, 1094 scoped_ptr<TaskToken> token,
1029 const SyncStatusCallback& callback, 1095 const SyncStatusCallback& callback,
1030 google_apis::GDataErrorCode error) { 1096 google_apis::GDataErrorCode error) {
1031 SyncStatusCode status = GDataErrorCodeToSyncStatusCodeWrapper(error); 1097 SyncStatusCode status = GDataErrorCodeToSyncStatusCodeWrapper(error);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1102 // (indicates that we may have longer polling cycle), trigger the first 1168 // (indicates that we may have longer polling cycle), trigger the first
1103 // incremental sync on next task cycle. 1169 // incremental sync on next task cycle.
1104 if (pending_batch_sync_origins_.empty() && 1170 if (pending_batch_sync_origins_.empty() &&
1105 push_notification_enabled_) { 1171 push_notification_enabled_) {
1106 may_have_unfetched_changes_ = true; 1172 may_have_unfetched_changes_ = true;
1107 } 1173 }
1108 1174
1109 NotifyTaskDone(SYNC_STATUS_OK, token.Pass()); 1175 NotifyTaskDone(SYNC_STATUS_OK, token.Pass());
1110 } 1176 }
1111 1177
1112 void DriveFileSyncService::DidRemoveOriginOnMetadataStore( 1178 void DriveFileSyncService::DidChangeOriginOnMetadataStore(
1113 scoped_ptr<TaskToken> token, 1179 scoped_ptr<TaskToken> token,
1114 const SyncStatusCallback& callback, 1180 const SyncStatusCallback& callback,
1115 SyncStatusCode status) { 1181 SyncStatusCode status) {
1116 NotifyTaskDone(status, token.Pass()); 1182 NotifyTaskDone(status, token.Pass());
1117 callback.Run(status); 1183 callback.Run(status);
1118 } 1184 }
1119 1185
1120 void DriveFileSyncService::DidGetRemoteFileMetadata( 1186 void DriveFileSyncService::DidGetRemoteFileMetadata(
1121 const SyncFileMetadataCallback& callback, 1187 const SyncFileMetadataCallback& callback,
1122 google_apis::GDataErrorCode error, 1188 google_apis::GDataErrorCode error,
(...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after
2277 DCHECK_EQ(SYNC_ACTION_NONE, action_taken); 2343 DCHECK_EQ(SYNC_ACTION_NONE, action_taken);
2278 DCHECK_EQ(SYNC_DIRECTION_NONE, direction); 2344 DCHECK_EQ(SYNC_DIRECTION_NONE, direction);
2279 } 2345 }
2280 2346
2281 FOR_EACH_OBSERVER( 2347 FOR_EACH_OBSERVER(
2282 FileStatusObserver, file_status_observers_, 2348 FileStatusObserver, file_status_observers_,
2283 OnFileStatusChanged(url, sync_status, action_taken, direction)); 2349 OnFileStatusChanged(url, sync_status, action_taken, direction));
2284 } 2350 }
2285 2351
2286 } // namespace sync_file_system 2352 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698