X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fchrome%2Fbrowser%2Fsync_file_system%2Fdrive_backend%2Flocal_to_remote_syncer.cc;h=f6d6719a3533fd7dfb0aab9f934430820876dde6;hb=ff3e2503a20db9193d323c1d19c38c68004dec4a;hp=e786edce90906e94b9d8113a8aeb11747aa5e8b2;hpb=7338fba38ba696536d1cc9d389afd716a6ab2fe6;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.cc b/src/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.cc index e786edc..f6d6719 100644 --- a/src/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.cc +++ b/src/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.cc @@ -370,6 +370,11 @@ void LocalToRemoteSyncer::DidDeleteRemoteFile( // For PRECONDITION / CONFLICT case, the remote file is modified since the // last sync completed. As our policy for deletion-modification conflict // resolution, ignore the local deletion. + if (error == google_apis::HTTP_NOT_FOUND) { + metadata_database()->UpdateByDeletedRemoteFile( + remote_file_tracker_->file_id(), callback); + return; + } callback.Run(SYNC_STATUS_OK); } @@ -628,18 +633,29 @@ void LocalToRemoteSyncer::DidCreateRemoteFolder( return; } - if (metadata_database()->TryNoSideEffectActivation( + MetadataDatabase::ActivationStatus activation_status = + metadata_database()->TryActivateTracker( remote_parent_folder_tracker_->tracker_id(), - file_id, callback)) { - // |callback| will be invoked by MetadataDatabase in this case. - return; + file_id, callback); + switch (activation_status) { + case MetadataDatabase::ACTIVATION_PENDING: + // |callback| will be invoked by MetadataDatabase later in this case. + return; + case MetadataDatabase::ACTIVATION_FAILED_ANOTHER_ACTIVE_TRACKER: + // The activation failed due to another tracker that has another parent. + // Detach the folder from the current parent to avoid using this folder as + // active folder. + drive_service()->RemoveResourceFromDirectory( + remote_parent_folder_tracker_->file_id(), file_id, + base::Bind(&LocalToRemoteSyncer::DidDetachResourceForCreationConflict, + weak_ptr_factory_.GetWeakPtr(), + callback)); + return; } - drive_service()->RemoveResourceFromDirectory( - remote_parent_folder_tracker_->file_id(), file_id, - base::Bind(&LocalToRemoteSyncer::DidDetachResourceForCreationConflict, - weak_ptr_factory_.GetWeakPtr(), - callback)); + NOTREACHED(); + callback.Run(SYNC_STATUS_FAILED); + return; } void LocalToRemoteSyncer::DidDetachResourceForCreationConflict(