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 1120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1131 sync_client_->UploadNewFile( | 1131 sync_client_->UploadNewFile( |
1132 origin_resource_id, | 1132 origin_resource_id, |
1133 local_file_path, | 1133 local_file_path, |
1134 url.path().AsUTF8Unsafe(), | 1134 url.path().AsUTF8Unsafe(), |
1135 base::Bind(&DriveFileSyncService::DidUploadNewFileForLocalSync, | 1135 base::Bind(&DriveFileSyncService::DidUploadNewFileForLocalSync, |
1136 AsWeakPtr(), base::Passed(¶m))); | 1136 AsWeakPtr(), base::Passed(¶m))); |
1137 return; | 1137 return; |
1138 } | 1138 } |
1139 case LOCAL_SYNC_OPERATION_UPDATE: { | 1139 case LOCAL_SYNC_OPERATION_UPDATE: { |
1140 DCHECK(param->has_drive_metadata); | 1140 DCHECK(param->has_drive_metadata); |
| 1141 DCHECK(!param->drive_metadata.is_folder()); |
1141 sync_client_->UploadExistingFile( | 1142 sync_client_->UploadExistingFile( |
1142 drive_metadata.resource_id(), | 1143 drive_metadata.resource_id(), |
1143 drive_metadata.md5_checksum(), | 1144 drive_metadata.md5_checksum(), |
1144 local_file_path, | 1145 local_file_path, |
1145 base::Bind(&DriveFileSyncService::DidUploadExistingFileForLocalSync, | 1146 base::Bind(&DriveFileSyncService::DidUploadExistingFileForLocalSync, |
1146 AsWeakPtr(), base::Passed(¶m))); | 1147 AsWeakPtr(), base::Passed(¶m))); |
1147 return; | 1148 return; |
1148 } | 1149 } |
1149 case LOCAL_SYNC_OPERATION_DELETE: { | 1150 case LOCAL_SYNC_OPERATION_DELETE: { |
1150 DCHECK(param->has_drive_metadata); | 1151 DCHECK(param->has_drive_metadata); |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1286 google_apis::GDataErrorCode error, | 1287 google_apis::GDataErrorCode error, |
1287 const std::string& resource_id, | 1288 const std::string& resource_id, |
1288 const std::string& file_md5) { | 1289 const std::string& file_md5) { |
1289 DCHECK(param); | 1290 DCHECK(param); |
1290 const FileSystemURL& url = param->url; | 1291 const FileSystemURL& url = param->url; |
1291 if (error == google_apis::HTTP_CREATED) { | 1292 if (error == google_apis::HTTP_CREATED) { |
1292 param->drive_metadata.set_resource_id(resource_id); | 1293 param->drive_metadata.set_resource_id(resource_id); |
1293 param->drive_metadata.set_md5_checksum(file_md5); | 1294 param->drive_metadata.set_md5_checksum(file_md5); |
1294 param->drive_metadata.set_conflicted(false); | 1295 param->drive_metadata.set_conflicted(false); |
1295 param->drive_metadata.set_to_be_fetched(false); | 1296 param->drive_metadata.set_to_be_fetched(false); |
| 1297 param->drive_metadata.set_is_folder(false); |
1296 const DriveMetadata& metadata = param->drive_metadata; | 1298 const DriveMetadata& metadata = param->drive_metadata; |
1297 metadata_store_->UpdateEntry( | 1299 metadata_store_->UpdateEntry( |
1298 url, metadata, | 1300 url, metadata, |
1299 base::Bind(&DriveFileSyncService::DidApplyLocalChange, | 1301 base::Bind(&DriveFileSyncService::DidApplyLocalChange, |
1300 AsWeakPtr(), base::Passed(¶m), error)); | 1302 AsWeakPtr(), base::Passed(¶m), error)); |
1301 NotifyObserversFileStatusChanged(url, | 1303 NotifyObserversFileStatusChanged(url, |
1302 SYNC_FILE_STATUS_SYNCED, | 1304 SYNC_FILE_STATUS_SYNCED, |
1303 SYNC_ACTION_ADDED, | 1305 SYNC_ACTION_ADDED, |
1304 SYNC_DIRECTION_LOCAL_TO_REMOTE); | 1306 SYNC_DIRECTION_LOCAL_TO_REMOTE); |
1305 return; | 1307 return; |
1306 } | 1308 } |
1307 FinalizeLocalSync(param->token.Pass(), param->callback, | 1309 FinalizeLocalSync(param->token.Pass(), param->callback, |
1308 GDataErrorCodeToSyncStatusCodeWrapper(error)); | 1310 GDataErrorCodeToSyncStatusCodeWrapper(error)); |
1309 } | 1311 } |
1310 | 1312 |
1311 void DriveFileSyncService::DidUploadExistingFileForLocalSync( | 1313 void DriveFileSyncService::DidUploadExistingFileForLocalSync( |
1312 scoped_ptr<ApplyLocalChangeParam> param, | 1314 scoped_ptr<ApplyLocalChangeParam> param, |
1313 google_apis::GDataErrorCode error, | 1315 google_apis::GDataErrorCode error, |
1314 const std::string& resource_id, | 1316 const std::string& resource_id, |
1315 const std::string& file_md5) { | 1317 const std::string& file_md5) { |
1316 DCHECK(param); | 1318 DCHECK(param); |
1317 DCHECK(param->has_drive_metadata); | 1319 DCHECK(param->has_drive_metadata); |
1318 const FileSystemURL& url = param->url; | 1320 const FileSystemURL& url = param->url; |
1319 switch (error) { | 1321 switch (error) { |
1320 case google_apis::HTTP_SUCCESS: { | 1322 case google_apis::HTTP_SUCCESS: { |
1321 param->drive_metadata.set_resource_id(resource_id); | 1323 param->drive_metadata.set_resource_id(resource_id); |
1322 param->drive_metadata.set_md5_checksum(file_md5); | 1324 param->drive_metadata.set_md5_checksum(file_md5); |
1323 param->drive_metadata.set_conflicted(false); | 1325 param->drive_metadata.set_conflicted(false); |
1324 param->drive_metadata.set_to_be_fetched(false); | 1326 param->drive_metadata.set_to_be_fetched(false); |
| 1327 param->drive_metadata.set_is_folder(false); |
1325 const DriveMetadata& metadata = param->drive_metadata; | 1328 const DriveMetadata& metadata = param->drive_metadata; |
1326 metadata_store_->UpdateEntry( | 1329 metadata_store_->UpdateEntry( |
1327 url, metadata, | 1330 url, metadata, |
1328 base::Bind(&DriveFileSyncService::DidApplyLocalChange, | 1331 base::Bind(&DriveFileSyncService::DidApplyLocalChange, |
1329 AsWeakPtr(), base::Passed(¶m), error)); | 1332 AsWeakPtr(), base::Passed(¶m), error)); |
1330 NotifyObserversFileStatusChanged(url, | 1333 NotifyObserversFileStatusChanged(url, |
1331 SYNC_FILE_STATUS_SYNCED, | 1334 SYNC_FILE_STATUS_SYNCED, |
1332 SYNC_ACTION_UPDATED, | 1335 SYNC_ACTION_UPDATED, |
1333 SYNC_DIRECTION_LOCAL_TO_REMOTE); | 1336 SYNC_DIRECTION_LOCAL_TO_REMOTE); |
1334 return; | 1337 return; |
(...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2077 return false; | 2080 return false; |
2078 *change = found_path->second; | 2081 *change = found_path->second; |
2079 return true; | 2082 return true; |
2080 } | 2083 } |
2081 | 2084 |
2082 void DriveFileSyncService::MarkConflict( | 2085 void DriveFileSyncService::MarkConflict( |
2083 const fileapi::FileSystemURL& url, | 2086 const fileapi::FileSystemURL& url, |
2084 DriveMetadata* drive_metadata, | 2087 DriveMetadata* drive_metadata, |
2085 const SyncStatusCallback& callback) { | 2088 const SyncStatusCallback& callback) { |
2086 DCHECK(drive_metadata); | 2089 DCHECK(drive_metadata); |
| 2090 // For now conflict involving directories should be resolved automatically. |
| 2091 // TODO(nhiroki): support manual conflict handling for directory operations. |
| 2092 // (http://crbug.com/231827) |
| 2093 DCHECK(!drive_metadata->is_folder()); |
| 2094 |
2087 if (drive_metadata->resource_id().empty()) { | 2095 if (drive_metadata->resource_id().empty()) { |
2088 // If the file does not have valid drive_metadata in the metadata store | 2096 // If the file does not have valid drive_metadata in the metadata store |
2089 // we must have a pending remote change entry. | 2097 // we must have a pending remote change entry. |
2090 RemoteChange remote_change; | 2098 RemoteChange remote_change; |
2091 const bool has_remote_change = | 2099 const bool has_remote_change = |
2092 GetPendingChangeForFileSystemURL(url, &remote_change); | 2100 GetPendingChangeForFileSystemURL(url, &remote_change); |
2093 DCHECK(has_remote_change); | 2101 DCHECK(has_remote_change); |
2094 drive_metadata->set_resource_id(remote_change.resource_id); | 2102 drive_metadata->set_resource_id(remote_change.resource_id); |
2095 drive_metadata->set_md5_checksum(std::string()); | 2103 drive_metadata->set_md5_checksum(std::string()); |
2096 } | 2104 } |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2454 pending_batch_sync_origins_.insert(origin); | 2462 pending_batch_sync_origins_.insert(origin); |
2455 } | 2463 } |
2456 callback.Run(status, resource_id); | 2464 callback.Run(status, resource_id); |
2457 } | 2465 } |
2458 | 2466 |
2459 std::string DriveFileSyncService::sync_root_resource_id() { | 2467 std::string DriveFileSyncService::sync_root_resource_id() { |
2460 return metadata_store_->sync_root_directory(); | 2468 return metadata_store_->sync_root_directory(); |
2461 } | 2469 } |
2462 | 2470 |
2463 } // namespace sync_file_system | 2471 } // namespace sync_file_system |
OLD | NEW |