| OLD | NEW |
| 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/local_change_processor_delegate.
h" | 5 #include "chrome/browser/sync_file_system/drive/local_change_processor_delegate.
h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback.h" | 8 #include "base/callback.h" |
| 9 #include "chrome/browser/sync_file_system/drive/api_util.h" | 9 #include "chrome/browser/sync_file_system/drive/api_util.h" |
| 10 #include "chrome/browser/sync_file_system/drive_file_sync_service.h" | 10 #include "chrome/browser/sync_file_system/drive_file_sync_service.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 local_change_(local_change), | 25 local_change_(local_change), |
| 26 local_path_(local_path), | 26 local_path_(local_path), |
| 27 local_metadata_(local_metadata), | 27 local_metadata_(local_metadata), |
| 28 has_drive_metadata_(false), | 28 has_drive_metadata_(false), |
| 29 has_remote_change_(false), | 29 has_remote_change_(false), |
| 30 weak_factory_(this) {} | 30 weak_factory_(this) {} |
| 31 | 31 |
| 32 LocalChangeProcessorDelegate::~LocalChangeProcessorDelegate() {} | 32 LocalChangeProcessorDelegate::~LocalChangeProcessorDelegate() {} |
| 33 | 33 |
| 34 void LocalChangeProcessorDelegate::Run(const SyncStatusCallback& callback) { | 34 void LocalChangeProcessorDelegate::Run(const SyncStatusCallback& callback) { |
| 35 if (!sync_service_) | 35 if (!sync_service_.get()) |
| 36 return; | 36 return; |
| 37 | 37 |
| 38 // TODO(nhiroki): support directory operations (http://crbug.com/161442). | 38 // TODO(nhiroki): support directory operations (http://crbug.com/161442). |
| 39 DCHECK(IsSyncFSDirectoryOperationEnabled() || !local_change_.IsDirectory()); | 39 DCHECK(IsSyncFSDirectoryOperationEnabled() || !local_change_.IsDirectory()); |
| 40 | 40 |
| 41 has_drive_metadata_ = | 41 has_drive_metadata_ = |
| 42 metadata_store()->ReadEntry(url_, &drive_metadata_) == SYNC_STATUS_OK; | 42 metadata_store()->ReadEntry(url_, &drive_metadata_) == SYNC_STATUS_OK; |
| 43 | 43 |
| 44 if (!has_drive_metadata_) | 44 if (!has_drive_metadata_) |
| 45 drive_metadata_.set_md5_checksum(std::string()); | 45 drive_metadata_.set_md5_checksum(std::string()); |
| 46 | 46 |
| 47 sync_service_->EnsureOriginRootDirectory( | 47 sync_service_->EnsureOriginRootDirectory( |
| 48 url_.origin(), | 48 url_.origin(), |
| 49 base::Bind(&LocalChangeProcessorDelegate::DidGetOriginRoot, | 49 base::Bind(&LocalChangeProcessorDelegate::DidGetOriginRoot, |
| 50 weak_factory_.GetWeakPtr(), | 50 weak_factory_.GetWeakPtr(), |
| 51 callback)); | 51 callback)); |
| 52 } | 52 } |
| 53 | 53 |
| 54 void LocalChangeProcessorDelegate::DidGetOriginRoot( | 54 void LocalChangeProcessorDelegate::DidGetOriginRoot( |
| 55 const SyncStatusCallback& callback, | 55 const SyncStatusCallback& callback, |
| 56 SyncStatusCode status, | 56 SyncStatusCode status, |
| 57 const std::string& origin_resource_id) { | 57 const std::string& origin_resource_id) { |
| 58 if (!sync_service_) | 58 if (!sync_service_.get()) |
| 59 return; | 59 return; |
| 60 | 60 |
| 61 if (status != SYNC_STATUS_OK) { | 61 if (status != SYNC_STATUS_OK) { |
| 62 callback.Run(status); | 62 callback.Run(status); |
| 63 return; | 63 return; |
| 64 } | 64 } |
| 65 | 65 |
| 66 origin_resource_id_ = origin_resource_id; | 66 origin_resource_id_ = origin_resource_id; |
| 67 | 67 |
| 68 has_remote_change_ = | 68 has_remote_change_ = |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 callback.Run(SYNC_STATUS_FAILED); | 116 callback.Run(SYNC_STATUS_FAILED); |
| 117 return; | 117 return; |
| 118 } | 118 } |
| 119 } | 119 } |
| 120 NOTREACHED(); | 120 NOTREACHED(); |
| 121 callback.Run(SYNC_STATUS_FAILED); | 121 callback.Run(SYNC_STATUS_FAILED); |
| 122 } | 122 } |
| 123 | 123 |
| 124 void LocalChangeProcessorDelegate::UploadNewFile( | 124 void LocalChangeProcessorDelegate::UploadNewFile( |
| 125 const SyncStatusCallback& callback) { | 125 const SyncStatusCallback& callback) { |
| 126 if (!sync_service_) | 126 if (!sync_service_.get()) |
| 127 return; | 127 return; |
| 128 | 128 |
| 129 api_util()->UploadNewFile( | 129 api_util()->UploadNewFile( |
| 130 origin_resource_id_, | 130 origin_resource_id_, |
| 131 local_path_, | 131 local_path_, |
| 132 DriveFileSyncService::PathToTitle(url_.path()), | 132 DriveFileSyncService::PathToTitle(url_.path()), |
| 133 base::Bind(&LocalChangeProcessorDelegate::DidUploadNewFile, | 133 base::Bind(&LocalChangeProcessorDelegate::DidUploadNewFile, |
| 134 weak_factory_.GetWeakPtr(), callback)); | 134 weak_factory_.GetWeakPtr(), callback)); |
| 135 } | 135 } |
| 136 | 136 |
| 137 void LocalChangeProcessorDelegate::DidUploadNewFile( | 137 void LocalChangeProcessorDelegate::DidUploadNewFile( |
| 138 const SyncStatusCallback& callback, | 138 const SyncStatusCallback& callback, |
| 139 google_apis::GDataErrorCode error, | 139 google_apis::GDataErrorCode error, |
| 140 const std::string& resource_id, | 140 const std::string& resource_id, |
| 141 const std::string& md5) { | 141 const std::string& md5) { |
| 142 if (!sync_service_) | 142 if (!sync_service_.get()) |
| 143 return; | 143 return; |
| 144 | 144 |
| 145 switch (error) { | 145 switch (error) { |
| 146 case google_apis::HTTP_CREATED: | 146 case google_apis::HTTP_CREATED: |
| 147 UpdateMetadata( | 147 UpdateMetadata( |
| 148 resource_id, md5, DriveMetadata::RESOURCE_TYPE_FILE, | 148 resource_id, md5, DriveMetadata::RESOURCE_TYPE_FILE, |
| 149 base::Bind(&LocalChangeProcessorDelegate::DidApplyLocalChange, | 149 base::Bind(&LocalChangeProcessorDelegate::DidApplyLocalChange, |
| 150 weak_factory_.GetWeakPtr(), callback, error)); | 150 weak_factory_.GetWeakPtr(), callback, error)); |
| 151 sync_service_->NotifyObserversFileStatusChanged( | 151 sync_service_->NotifyObserversFileStatusChanged( |
| 152 url_, | 152 url_, |
| 153 SYNC_FILE_STATUS_SYNCED, | 153 SYNC_FILE_STATUS_SYNCED, |
| 154 SYNC_ACTION_ADDED, | 154 SYNC_ACTION_ADDED, |
| 155 SYNC_DIRECTION_LOCAL_TO_REMOTE); | 155 SYNC_DIRECTION_LOCAL_TO_REMOTE); |
| 156 return; | 156 return; |
| 157 case google_apis::HTTP_CONFLICT: | 157 case google_apis::HTTP_CONFLICT: |
| 158 HandleCreationConflict(resource_id, DriveMetadata::RESOURCE_TYPE_FILE, | 158 HandleCreationConflict(resource_id, DriveMetadata::RESOURCE_TYPE_FILE, |
| 159 callback); | 159 callback); |
| 160 return; | 160 return; |
| 161 default: | 161 default: |
| 162 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); | 162 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); |
| 163 } | 163 } |
| 164 } | 164 } |
| 165 | 165 |
| 166 void LocalChangeProcessorDelegate::CreateDirectory( | 166 void LocalChangeProcessorDelegate::CreateDirectory( |
| 167 const SyncStatusCallback& callback) { | 167 const SyncStatusCallback& callback) { |
| 168 if (!sync_service_) | 168 if (!sync_service_.get()) |
| 169 return; | 169 return; |
| 170 | 170 |
| 171 DCHECK(IsSyncFSDirectoryOperationEnabled()); | 171 DCHECK(IsSyncFSDirectoryOperationEnabled()); |
| 172 api_util()->CreateDirectory( | 172 api_util()->CreateDirectory( |
| 173 origin_resource_id_, | 173 origin_resource_id_, |
| 174 DriveFileSyncService::PathToTitle(url_.path()), | 174 DriveFileSyncService::PathToTitle(url_.path()), |
| 175 base::Bind(&LocalChangeProcessorDelegate::DidCreateDirectory, | 175 base::Bind(&LocalChangeProcessorDelegate::DidCreateDirectory, |
| 176 weak_factory_.GetWeakPtr(), callback)); | 176 weak_factory_.GetWeakPtr(), callback)); |
| 177 } | 177 } |
| 178 | 178 |
| 179 void LocalChangeProcessorDelegate::DidCreateDirectory( | 179 void LocalChangeProcessorDelegate::DidCreateDirectory( |
| 180 const SyncStatusCallback& callback, | 180 const SyncStatusCallback& callback, |
| 181 google_apis::GDataErrorCode error, | 181 google_apis::GDataErrorCode error, |
| 182 const std::string& resource_id) { | 182 const std::string& resource_id) { |
| 183 if (!sync_service_) | 183 if (!sync_service_.get()) |
| 184 return; | 184 return; |
| 185 | 185 |
| 186 switch (error) { | 186 switch (error) { |
| 187 case google_apis::HTTP_SUCCESS: | 187 case google_apis::HTTP_SUCCESS: |
| 188 case google_apis::HTTP_CREATED: { | 188 case google_apis::HTTP_CREATED: { |
| 189 UpdateMetadata( | 189 UpdateMetadata( |
| 190 resource_id, std::string(), DriveMetadata::RESOURCE_TYPE_FOLDER, | 190 resource_id, std::string(), DriveMetadata::RESOURCE_TYPE_FOLDER, |
| 191 base::Bind(&LocalChangeProcessorDelegate::DidApplyLocalChange, | 191 base::Bind(&LocalChangeProcessorDelegate::DidApplyLocalChange, |
| 192 weak_factory_.GetWeakPtr(), callback, error)); | 192 weak_factory_.GetWeakPtr(), callback, error)); |
| 193 sync_service_->NotifyObserversFileStatusChanged( | 193 sync_service_->NotifyObserversFileStatusChanged( |
| 194 url_, | 194 url_, |
| 195 SYNC_FILE_STATUS_SYNCED, | 195 SYNC_FILE_STATUS_SYNCED, |
| 196 SYNC_ACTION_ADDED, | 196 SYNC_ACTION_ADDED, |
| 197 SYNC_DIRECTION_LOCAL_TO_REMOTE); | 197 SYNC_DIRECTION_LOCAL_TO_REMOTE); |
| 198 return; | 198 return; |
| 199 } | 199 } |
| 200 | 200 |
| 201 case google_apis::HTTP_CONFLICT: | 201 case google_apis::HTTP_CONFLICT: |
| 202 // There were conflicts and a file was left. | 202 // There were conflicts and a file was left. |
| 203 // TODO(kinuko): Handle the latter case (http://crbug.com/237090). | 203 // TODO(kinuko): Handle the latter case (http://crbug.com/237090). |
| 204 // Fall-through | 204 // Fall-through |
| 205 | 205 |
| 206 default: | 206 default: |
| 207 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); | 207 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); |
| 208 } | 208 } |
| 209 } | 209 } |
| 210 | 210 |
| 211 void LocalChangeProcessorDelegate::UploadExistingFile( | 211 void LocalChangeProcessorDelegate::UploadExistingFile( |
| 212 const SyncStatusCallback& callback) { | 212 const SyncStatusCallback& callback) { |
| 213 if (!sync_service_) | 213 if (!sync_service_.get()) |
| 214 return; | 214 return; |
| 215 | 215 |
| 216 DCHECK(has_drive_metadata_); | 216 DCHECK(has_drive_metadata_); |
| 217 api_util()->UploadExistingFile( | 217 api_util()->UploadExistingFile( |
| 218 drive_metadata_.resource_id(), | 218 drive_metadata_.resource_id(), |
| 219 drive_metadata_.md5_checksum(), | 219 drive_metadata_.md5_checksum(), |
| 220 local_path_, | 220 local_path_, |
| 221 base::Bind(&LocalChangeProcessorDelegate::DidUploadExistingFile, | 221 base::Bind(&LocalChangeProcessorDelegate::DidUploadExistingFile, |
| 222 weak_factory_.GetWeakPtr(), callback)); | 222 weak_factory_.GetWeakPtr(), callback)); |
| 223 } | 223 } |
| 224 | 224 |
| 225 void LocalChangeProcessorDelegate::DidUploadExistingFile( | 225 void LocalChangeProcessorDelegate::DidUploadExistingFile( |
| 226 const SyncStatusCallback& callback, | 226 const SyncStatusCallback& callback, |
| 227 google_apis::GDataErrorCode error, | 227 google_apis::GDataErrorCode error, |
| 228 const std::string& resource_id, | 228 const std::string& resource_id, |
| 229 const std::string& md5) { | 229 const std::string& md5) { |
| 230 if (!sync_service_) | 230 if (!sync_service_.get()) |
| 231 return; | 231 return; |
| 232 | 232 |
| 233 DCHECK(has_drive_metadata_); | 233 DCHECK(has_drive_metadata_); |
| 234 switch (error) { | 234 switch (error) { |
| 235 case google_apis::HTTP_SUCCESS: | 235 case google_apis::HTTP_SUCCESS: |
| 236 UpdateMetadata( | 236 UpdateMetadata( |
| 237 resource_id, md5, DriveMetadata::RESOURCE_TYPE_FILE, | 237 resource_id, md5, DriveMetadata::RESOURCE_TYPE_FILE, |
| 238 base::Bind(&LocalChangeProcessorDelegate::DidApplyLocalChange, | 238 base::Bind(&LocalChangeProcessorDelegate::DidApplyLocalChange, |
| 239 weak_factory_.GetWeakPtr(), callback, error)); | 239 weak_factory_.GetWeakPtr(), callback, error)); |
| 240 sync_service_->NotifyObserversFileStatusChanged( | 240 sync_service_->NotifyObserversFileStatusChanged( |
| (...skipping 20 matching lines...) Expand all Loading... |
| 261 GDataErrorCodeToSyncStatusCodeWrapper(error); | 261 GDataErrorCodeToSyncStatusCodeWrapper(error); |
| 262 DCHECK_NE(SYNC_STATUS_OK, status); | 262 DCHECK_NE(SYNC_STATUS_OK, status); |
| 263 callback.Run(status); | 263 callback.Run(status); |
| 264 return; | 264 return; |
| 265 } | 265 } |
| 266 } | 266 } |
| 267 } | 267 } |
| 268 | 268 |
| 269 void LocalChangeProcessorDelegate::DeleteFile( | 269 void LocalChangeProcessorDelegate::DeleteFile( |
| 270 const SyncStatusCallback& callback) { | 270 const SyncStatusCallback& callback) { |
| 271 if (!sync_service_) | 271 if (!sync_service_.get()) |
| 272 return; | 272 return; |
| 273 | 273 |
| 274 DCHECK(has_drive_metadata_); | 274 DCHECK(has_drive_metadata_); |
| 275 api_util()->DeleteFile( | 275 api_util()->DeleteFile( |
| 276 drive_metadata_.resource_id(), | 276 drive_metadata_.resource_id(), |
| 277 drive_metadata_.md5_checksum(), | 277 drive_metadata_.md5_checksum(), |
| 278 base::Bind(&LocalChangeProcessorDelegate::DidDeleteFile, | 278 base::Bind(&LocalChangeProcessorDelegate::DidDeleteFile, |
| 279 weak_factory_.GetWeakPtr(), callback)); | 279 weak_factory_.GetWeakPtr(), callback)); |
| 280 } | 280 } |
| 281 | 281 |
| 282 void LocalChangeProcessorDelegate::DeleteDirectory( | 282 void LocalChangeProcessorDelegate::DeleteDirectory( |
| 283 const SyncStatusCallback& callback) { | 283 const SyncStatusCallback& callback) { |
| 284 if (!sync_service_) | 284 if (!sync_service_.get()) |
| 285 return; | 285 return; |
| 286 | 286 |
| 287 DCHECK(IsSyncFSDirectoryOperationEnabled()); | 287 DCHECK(IsSyncFSDirectoryOperationEnabled()); |
| 288 DCHECK(has_drive_metadata_); | 288 DCHECK(has_drive_metadata_); |
| 289 // This does not handle recursive directory deletion | 289 // This does not handle recursive directory deletion |
| 290 // (which should not happen other than after a restart). | 290 // (which should not happen other than after a restart). |
| 291 api_util()->DeleteFile( | 291 api_util()->DeleteFile( |
| 292 drive_metadata_.resource_id(), | 292 drive_metadata_.resource_id(), |
| 293 std::string(), // empty md5 | 293 std::string(), // empty md5 |
| 294 base::Bind(&LocalChangeProcessorDelegate::DidDeleteFile, | 294 base::Bind(&LocalChangeProcessorDelegate::DidDeleteFile, |
| 295 weak_factory_.GetWeakPtr(), callback)); | 295 weak_factory_.GetWeakPtr(), callback)); |
| 296 } | 296 } |
| 297 | 297 |
| 298 void LocalChangeProcessorDelegate::DidDeleteFile( | 298 void LocalChangeProcessorDelegate::DidDeleteFile( |
| 299 const SyncStatusCallback& callback, | 299 const SyncStatusCallback& callback, |
| 300 google_apis::GDataErrorCode error) { | 300 google_apis::GDataErrorCode error) { |
| 301 if (!sync_service_) | 301 if (!sync_service_.get()) |
| 302 return; | 302 return; |
| 303 | 303 |
| 304 DCHECK(has_drive_metadata_); | 304 DCHECK(has_drive_metadata_); |
| 305 | 305 |
| 306 switch (error) { | 306 switch (error) { |
| 307 // Regardless of whether the deletion has succeeded (HTTP_SUCCESS) or | 307 // Regardless of whether the deletion has succeeded (HTTP_SUCCESS) or |
| 308 // has failed with ETag conflict error (HTTP_PRECONDITION or HTTP_CONFLICT) | 308 // has failed with ETag conflict error (HTTP_PRECONDITION or HTTP_CONFLICT) |
| 309 // we should just delete the drive_metadata. | 309 // we should just delete the drive_metadata. |
| 310 // In the former case the file should be just gone now, and | 310 // In the former case the file should be just gone now, and |
| 311 // in the latter case the remote change will be applied in a future | 311 // in the latter case the remote change will be applied in a future |
| (...skipping 19 matching lines...) Expand all Loading... |
| 331 GDataErrorCodeToSyncStatusCodeWrapper(error); | 331 GDataErrorCodeToSyncStatusCodeWrapper(error); |
| 332 DCHECK_NE(SYNC_STATUS_OK, status); | 332 DCHECK_NE(SYNC_STATUS_OK, status); |
| 333 callback.Run(status); | 333 callback.Run(status); |
| 334 return; | 334 return; |
| 335 } | 335 } |
| 336 } | 336 } |
| 337 } | 337 } |
| 338 | 338 |
| 339 void LocalChangeProcessorDelegate::ResolveToLocal( | 339 void LocalChangeProcessorDelegate::ResolveToLocal( |
| 340 const SyncStatusCallback& callback) { | 340 const SyncStatusCallback& callback) { |
| 341 if (!sync_service_) | 341 if (!sync_service_.get()) |
| 342 return; | 342 return; |
| 343 | 343 |
| 344 api_util()->DeleteFile( | 344 api_util()->DeleteFile( |
| 345 drive_metadata_.resource_id(), | 345 drive_metadata_.resource_id(), |
| 346 drive_metadata_.md5_checksum(), | 346 drive_metadata_.md5_checksum(), |
| 347 base::Bind( | 347 base::Bind( |
| 348 &LocalChangeProcessorDelegate::DidDeleteFileToResolveToLocal, | 348 &LocalChangeProcessorDelegate::DidDeleteFileToResolveToLocal, |
| 349 weak_factory_.GetWeakPtr(), callback)); | 349 weak_factory_.GetWeakPtr(), callback)); |
| 350 } | 350 } |
| 351 | 351 |
| 352 void LocalChangeProcessorDelegate::DidDeleteFileToResolveToLocal( | 352 void LocalChangeProcessorDelegate::DidDeleteFileToResolveToLocal( |
| 353 const SyncStatusCallback& callback, | 353 const SyncStatusCallback& callback, |
| 354 google_apis::GDataErrorCode error) { | 354 google_apis::GDataErrorCode error) { |
| 355 if (!sync_service_) | 355 if (!sync_service_.get()) |
| 356 return; | 356 return; |
| 357 | 357 |
| 358 if (error != google_apis::HTTP_SUCCESS && | 358 if (error != google_apis::HTTP_SUCCESS && |
| 359 error != google_apis::HTTP_NOT_FOUND) { | 359 error != google_apis::HTTP_NOT_FOUND) { |
| 360 remote_change_handler()->RemoveChangeForURL(url_); | 360 remote_change_handler()->RemoveChangeForURL(url_); |
| 361 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); | 361 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); |
| 362 return; | 362 return; |
| 363 } | 363 } |
| 364 | 364 |
| 365 DCHECK_NE(SYNC_FILE_TYPE_UNKNOWN, local_metadata_.file_type); | 365 DCHECK_NE(SYNC_FILE_TYPE_UNKNOWN, local_metadata_.file_type); |
| 366 if (local_metadata_.file_type == SYNC_FILE_TYPE_FILE) { | 366 if (local_metadata_.file_type == SYNC_FILE_TYPE_FILE) { |
| 367 UploadNewFile(callback); | 367 UploadNewFile(callback); |
| 368 return; | 368 return; |
| 369 } | 369 } |
| 370 | 370 |
| 371 DCHECK(IsSyncFSDirectoryOperationEnabled()); | 371 DCHECK(IsSyncFSDirectoryOperationEnabled()); |
| 372 DCHECK_EQ(SYNC_FILE_TYPE_DIRECTORY, local_metadata_.file_type); | 372 DCHECK_EQ(SYNC_FILE_TYPE_DIRECTORY, local_metadata_.file_type); |
| 373 CreateDirectory(callback); | 373 CreateDirectory(callback); |
| 374 } | 374 } |
| 375 | 375 |
| 376 void LocalChangeProcessorDelegate::ResolveToRemote( | 376 void LocalChangeProcessorDelegate::ResolveToRemote( |
| 377 const SyncStatusCallback& callback) { | 377 const SyncStatusCallback& callback) { |
| 378 if (!sync_service_) | 378 if (!sync_service_.get()) |
| 379 return; | 379 return; |
| 380 | 380 |
| 381 // Mark the file as to-be-fetched. | 381 // Mark the file as to-be-fetched. |
| 382 DCHECK(!drive_metadata_.resource_id().empty()); | 382 DCHECK(!drive_metadata_.resource_id().empty()); |
| 383 | 383 |
| 384 SyncFileType type = remote_change_.change.file_type(); | 384 SyncFileType type = remote_change_.change.file_type(); |
| 385 SetMetadataToBeFetched( | 385 SetMetadataToBeFetched( |
| 386 DriveFileSyncService::SyncFileTypeToDriveMetadataResourceType(type), | 386 DriveFileSyncService::SyncFileTypeToDriveMetadataResourceType(type), |
| 387 base::Bind(&LocalChangeProcessorDelegate::DidResolveToRemote, | 387 base::Bind(&LocalChangeProcessorDelegate::DidResolveToRemote, |
| 388 weak_factory_.GetWeakPtr(), callback)); | 388 weak_factory_.GetWeakPtr(), callback)); |
| 389 // The synced notification will be dispatched when the remote file is | 389 // The synced notification will be dispatched when the remote file is |
| 390 // downloaded. | 390 // downloaded. |
| 391 } | 391 } |
| 392 | 392 |
| 393 void LocalChangeProcessorDelegate::DidResolveToRemote( | 393 void LocalChangeProcessorDelegate::DidResolveToRemote( |
| 394 const SyncStatusCallback& callback, | 394 const SyncStatusCallback& callback, |
| 395 SyncStatusCode status) { | 395 SyncStatusCode status) { |
| 396 if (!sync_service_) | 396 if (!sync_service_.get()) |
| 397 return; | 397 return; |
| 398 | 398 |
| 399 DCHECK(has_drive_metadata_); | 399 DCHECK(has_drive_metadata_); |
| 400 if (status != SYNC_STATUS_OK) { | 400 if (status != SYNC_STATUS_OK) { |
| 401 callback.Run(status); | 401 callback.Run(status); |
| 402 return; | 402 return; |
| 403 } | 403 } |
| 404 | 404 |
| 405 SyncFileType file_type = SYNC_FILE_TYPE_FILE; | 405 SyncFileType file_type = SYNC_FILE_TYPE_FILE; |
| 406 if (drive_metadata_.type() == DriveMetadata::RESOURCE_TYPE_FOLDER) | 406 if (drive_metadata_.type() == DriveMetadata::RESOURCE_TYPE_FOLDER) |
| 407 file_type = SYNC_FILE_TYPE_DIRECTORY; | 407 file_type = SYNC_FILE_TYPE_DIRECTORY; |
| 408 sync_service_->AppendFetchChange( | 408 sync_service_->AppendFetchChange( |
| 409 url_.origin(), url_.path(), drive_metadata_.resource_id(), file_type); | 409 url_.origin(), url_.path(), drive_metadata_.resource_id(), file_type); |
| 410 callback.Run(status); | 410 callback.Run(status); |
| 411 } | 411 } |
| 412 | 412 |
| 413 void LocalChangeProcessorDelegate::DidApplyLocalChange( | 413 void LocalChangeProcessorDelegate::DidApplyLocalChange( |
| 414 const SyncStatusCallback& callback, | 414 const SyncStatusCallback& callback, |
| 415 const google_apis::GDataErrorCode error, | 415 const google_apis::GDataErrorCode error, |
| 416 SyncStatusCode status) { | 416 SyncStatusCode status) { |
| 417 if (!sync_service_) | 417 if (!sync_service_.get()) |
| 418 return; | 418 return; |
| 419 | 419 |
| 420 if (status == SYNC_STATUS_OK) { | 420 if (status == SYNC_STATUS_OK) { |
| 421 remote_change_handler()->RemoveChangeForURL(url_); | 421 remote_change_handler()->RemoveChangeForURL(url_); |
| 422 status = GDataErrorCodeToSyncStatusCodeWrapper(error); | 422 status = GDataErrorCodeToSyncStatusCodeWrapper(error); |
| 423 } | 423 } |
| 424 callback.Run(status); | 424 callback.Run(status); |
| 425 } | 425 } |
| 426 | 426 |
| 427 void LocalChangeProcessorDelegate::UpdateMetadata( | 427 void LocalChangeProcessorDelegate::UpdateMetadata( |
| 428 const std::string& resource_id, | 428 const std::string& resource_id, |
| 429 const std::string& md5, | 429 const std::string& md5, |
| 430 DriveMetadata::ResourceType type, | 430 DriveMetadata::ResourceType type, |
| 431 const SyncStatusCallback& callback) { | 431 const SyncStatusCallback& callback) { |
| 432 if (!sync_service_) | 432 if (!sync_service_.get()) |
| 433 return; | 433 return; |
| 434 | 434 |
| 435 drive_metadata_.set_resource_id(resource_id); | 435 drive_metadata_.set_resource_id(resource_id); |
| 436 drive_metadata_.set_md5_checksum(md5); | 436 drive_metadata_.set_md5_checksum(md5); |
| 437 drive_metadata_.set_conflicted(false); | 437 drive_metadata_.set_conflicted(false); |
| 438 drive_metadata_.set_to_be_fetched(false); | 438 drive_metadata_.set_to_be_fetched(false); |
| 439 drive_metadata_.set_type(type); | 439 drive_metadata_.set_type(type); |
| 440 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); | 440 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); |
| 441 } | 441 } |
| 442 | 442 |
| 443 void LocalChangeProcessorDelegate::ResetMetadataMD5( | 443 void LocalChangeProcessorDelegate::ResetMetadataMD5( |
| 444 const SyncStatusCallback& callback) { | 444 const SyncStatusCallback& callback) { |
| 445 if (!sync_service_) | 445 if (!sync_service_.get()) |
| 446 return; | 446 return; |
| 447 | 447 |
| 448 drive_metadata_.set_md5_checksum(std::string()); | 448 drive_metadata_.set_md5_checksum(std::string()); |
| 449 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); | 449 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); |
| 450 } | 450 } |
| 451 | 451 |
| 452 void LocalChangeProcessorDelegate::SetMetadataToBeFetched( | 452 void LocalChangeProcessorDelegate::SetMetadataToBeFetched( |
| 453 DriveMetadata::ResourceType type, | 453 DriveMetadata::ResourceType type, |
| 454 const SyncStatusCallback& callback) { | 454 const SyncStatusCallback& callback) { |
| 455 if (!sync_service_) | 455 if (!sync_service_.get()) |
| 456 return; | 456 return; |
| 457 | 457 |
| 458 drive_metadata_.set_md5_checksum(std::string()); | 458 drive_metadata_.set_md5_checksum(std::string()); |
| 459 drive_metadata_.set_conflicted(false); | 459 drive_metadata_.set_conflicted(false); |
| 460 drive_metadata_.set_to_be_fetched(true); | 460 drive_metadata_.set_to_be_fetched(true); |
| 461 drive_metadata_.set_type(type); | 461 drive_metadata_.set_type(type); |
| 462 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); | 462 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); |
| 463 } | 463 } |
| 464 | 464 |
| 465 void LocalChangeProcessorDelegate::SetMetadataConflict( | 465 void LocalChangeProcessorDelegate::SetMetadataConflict( |
| 466 const SyncStatusCallback& callback) { | 466 const SyncStatusCallback& callback) { |
| 467 if (!sync_service_) | 467 if (!sync_service_.get()) |
| 468 return; | 468 return; |
| 469 | 469 |
| 470 drive_metadata_.set_conflicted(true); | 470 drive_metadata_.set_conflicted(true); |
| 471 drive_metadata_.set_to_be_fetched(false); | 471 drive_metadata_.set_to_be_fetched(false); |
| 472 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); | 472 metadata_store()->UpdateEntry(url_, drive_metadata_, callback); |
| 473 } | 473 } |
| 474 | 474 |
| 475 void LocalChangeProcessorDelegate::DeleteMetadata( | 475 void LocalChangeProcessorDelegate::DeleteMetadata( |
| 476 const SyncStatusCallback& callback) { | 476 const SyncStatusCallback& callback) { |
| 477 metadata_store()->DeleteEntry(url_, callback); | 477 metadata_store()->DeleteEntry(url_, callback); |
| 478 } | 478 } |
| 479 | 479 |
| 480 void LocalChangeProcessorDelegate::HandleCreationConflict( | 480 void LocalChangeProcessorDelegate::HandleCreationConflict( |
| 481 const std::string& resource_id, | 481 const std::string& resource_id, |
| 482 DriveMetadata::ResourceType type, | 482 DriveMetadata::ResourceType type, |
| 483 const SyncStatusCallback& callback) { | 483 const SyncStatusCallback& callback) { |
| 484 if (!sync_service_) | 484 if (!sync_service_.get()) |
| 485 return; | 485 return; |
| 486 | 486 |
| 487 // File-file conflict is found. | 487 // File-file conflict is found. |
| 488 // Populates a fake drive_metadata and set has_drive_metadata = true. | 488 // Populates a fake drive_metadata and set has_drive_metadata = true. |
| 489 // In HandleConflictLocalSync: | 489 // In HandleConflictLocalSync: |
| 490 // - If conflict_resolution is manual, we'll change conflicted to true | 490 // - If conflict_resolution is manual, we'll change conflicted to true |
| 491 // and save the metadata. | 491 // and save the metadata. |
| 492 // - Otherwise we'll save the metadata with empty md5 and will start | 492 // - Otherwise we'll save the metadata with empty md5 and will start |
| 493 // over local sync as UploadExistingFile. | 493 // over local sync as UploadExistingFile. |
| 494 drive_metadata_.set_resource_id(resource_id); | 494 drive_metadata_.set_resource_id(resource_id); |
| 495 drive_metadata_.set_md5_checksum(std::string()); | 495 drive_metadata_.set_md5_checksum(std::string()); |
| 496 drive_metadata_.set_conflicted(false); | 496 drive_metadata_.set_conflicted(false); |
| 497 drive_metadata_.set_to_be_fetched(false); | 497 drive_metadata_.set_to_be_fetched(false); |
| 498 drive_metadata_.set_type(type); | 498 drive_metadata_.set_type(type); |
| 499 has_drive_metadata_ = true; | 499 has_drive_metadata_ = true; |
| 500 HandleConflict(callback); | 500 HandleConflict(callback); |
| 501 } | 501 } |
| 502 | 502 |
| 503 void LocalChangeProcessorDelegate::HandleConflict( | 503 void LocalChangeProcessorDelegate::HandleConflict( |
| 504 const SyncStatusCallback& callback) { | 504 const SyncStatusCallback& callback) { |
| 505 if (!sync_service_) | 505 if (!sync_service_.get()) |
| 506 return; | 506 return; |
| 507 | 507 |
| 508 DCHECK(!drive_metadata_.resource_id().empty()); | 508 DCHECK(!drive_metadata_.resource_id().empty()); |
| 509 api_util()->GetResourceEntry( | 509 api_util()->GetResourceEntry( |
| 510 drive_metadata_.resource_id(), | 510 drive_metadata_.resource_id(), |
| 511 base::Bind( | 511 base::Bind( |
| 512 &LocalChangeProcessorDelegate::DidGetEntryForConflictResolution, | 512 &LocalChangeProcessorDelegate::DidGetEntryForConflictResolution, |
| 513 weak_factory_.GetWeakPtr(), callback)); | 513 weak_factory_.GetWeakPtr(), callback)); |
| 514 } | 514 } |
| 515 | 515 |
| 516 void LocalChangeProcessorDelegate::DidGetEntryForConflictResolution( | 516 void LocalChangeProcessorDelegate::DidGetEntryForConflictResolution( |
| 517 const SyncStatusCallback& callback, | 517 const SyncStatusCallback& callback, |
| 518 google_apis::GDataErrorCode error, | 518 google_apis::GDataErrorCode error, |
| 519 scoped_ptr<google_apis::ResourceEntry> entry) { | 519 scoped_ptr<google_apis::ResourceEntry> entry) { |
| 520 if (!sync_service_) | 520 if (!sync_service_.get()) |
| 521 return; | 521 return; |
| 522 | 522 |
| 523 SyncFileType local_file_type = local_metadata_.file_type; | 523 SyncFileType local_file_type = local_metadata_.file_type; |
| 524 base::Time local_modification_time = local_metadata_.last_modified; | 524 base::Time local_modification_time = local_metadata_.last_modified; |
| 525 | 525 |
| 526 SyncFileType remote_file_type; | 526 SyncFileType remote_file_type; |
| 527 base::Time remote_modification_time = entry->updated_time(); | 527 base::Time remote_modification_time = entry->updated_time(); |
| 528 if (entry->is_file()) | 528 if (entry->is_file()) |
| 529 remote_file_type = SYNC_FILE_TYPE_FILE; | 529 remote_file_type = SYNC_FILE_TYPE_FILE; |
| 530 else if (entry->is_folder()) | 530 else if (entry->is_folder()) |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 610 APIUtilInterface* LocalChangeProcessorDelegate::api_util() { | 610 APIUtilInterface* LocalChangeProcessorDelegate::api_util() { |
| 611 return sync_service_->api_util_.get(); | 611 return sync_service_->api_util_.get(); |
| 612 } | 612 } |
| 613 | 613 |
| 614 RemoteChangeHandler* LocalChangeProcessorDelegate::remote_change_handler() { | 614 RemoteChangeHandler* LocalChangeProcessorDelegate::remote_change_handler() { |
| 615 return &sync_service_->remote_change_handler_; | 615 return &sync_service_->remote_change_handler_; |
| 616 } | 616 } |
| 617 | 617 |
| 618 } // namespace drive | 618 } // namespace drive |
| 619 } // namespace sync_file_system | 619 } // namespace sync_file_system |
| OLD | NEW |