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

Unified Diff: chrome/browser/sync_file_system/drive_file_sync_service.cc

Issue 13986011: SyncFS: Introduce RemoteSyncOperationResolver for directory operation support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review fix Created 7 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync_file_system/drive_file_sync_service.cc
diff --git a/chrome/browser/sync_file_system/drive_file_sync_service.cc b/chrome/browser/sync_file_system/drive_file_sync_service.cc
index c6ba8b7ece970222020a17794755da2b9f375a9a..7f095839d331ddbee12f3587428d65d9562422b9 100644
--- a/chrome/browser/sync_file_system/drive_file_sync_service.cc
+++ b/chrome/browser/sync_file_system/drive_file_sync_service.cc
@@ -27,6 +27,7 @@
#include "chrome/browser/sync_file_system/drive_metadata_store.h"
#include "chrome/browser/sync_file_system/file_status_observer.h"
#include "chrome/browser/sync_file_system/remote_change_processor.h"
+#include "chrome/browser/sync_file_system/remote_sync_operation_resolver.h"
#include "chrome/browser/sync_file_system/sync_file_system.pb.h"
#include "chrome/common/extensions/extension.h"
#include "content/public/browser/browser_thread.h"
@@ -1489,8 +1490,10 @@ void DriveFileSyncService::DidPrepareForProcessRemoteChange(
bool missing_local_file = (metadata.file_type == SYNC_FILE_TYPE_UNKNOWN);
RemoteSyncOperationType operation =
- ResolveRemoteSyncOperationType(remote_file_change, param.get(),
- local_changes, missing_local_file);
+ RemoteSyncOperationResolver::Resolve(remote_file_change,
+ local_changes,
+ param->local_metadata.file_type,
+ param->drive_metadata.conflicted());
DVLOG(1) << "ProcessRemoteChange for " << url.DebugString()
<< (param->drive_metadata.conflicted() ? " (conflicted)" : " ")
@@ -1503,6 +1506,11 @@ void DriveFileSyncService::DidPrepareForProcessRemoteChange(
param->sync_action = SYNC_ACTION_ADDED;
DownloadForRemoteSync(param.Pass());
return;
+ case REMOTE_SYNC_OPERATION_ADD_DIRECTORY:
+ // TODO(nhiroki): support directory operations (http://crbug.com/161442).
+ NOTIMPLEMENTED();
+ AbortRemoteSync(param.Pass(), SYNC_STATUS_FAILED);
+ return;
case REMOTE_SYNC_OPERATION_UPDATE_FILE:
param->sync_action = SYNC_ACTION_UPDATED;
DownloadForRemoteSync(param.Pass());
@@ -1516,6 +1524,11 @@ void DriveFileSyncService::DidPrepareForProcessRemoteChange(
base::Passed(&param)));
return;
}
+ case REMOTE_SYNC_OPERATION_DELETE_DIRECTORY:
+ // TODO(nhiroki): support directory operations (http://crbug.com/161442).
+ NOTIMPLEMENTED();
+ AbortRemoteSync(param.Pass(), SYNC_STATUS_FAILED);
+ return;
case REMOTE_SYNC_OPERATION_NONE:
param->sync_action = SYNC_ACTION_NONE;
CompleteRemoteSync(param.Pass(), SYNC_STATUS_OK);
@@ -1551,49 +1564,6 @@ void DriveFileSyncService::DidPrepareForProcessRemoteChange(
AbortRemoteSync(param.Pass(), SYNC_STATUS_FAILED);
}
-DriveFileSyncService::RemoteSyncOperationType
-DriveFileSyncService::ResolveRemoteSyncOperationType(
- const FileChange& remote_file_change,
- ProcessRemoteChangeParam* param,
- const FileChangeList& local_changes,
- bool missing_local_file) {
- if (param->drive_metadata.conflicted()) {
- switch (remote_file_change.change()) {
- case FileChange::FILE_CHANGE_ADD_OR_UPDATE:
- return missing_local_file ? REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE
- : REMOTE_SYNC_OPERATION_CONFLICT;
- case FileChange::FILE_CHANGE_DELETE:
- return missing_local_file ? REMOTE_SYNC_OPERATION_DELETE_METADATA
- : REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL;
- }
- }
-
- if (remote_file_change.IsAddOrUpdate()) {
- if (local_changes.empty())
- return missing_local_file ? REMOTE_SYNC_OPERATION_ADD_FILE
- : REMOTE_SYNC_OPERATION_UPDATE_FILE;
- switch (local_changes.list().back().change()) {
- case FileChange::FILE_CHANGE_ADD_OR_UPDATE:
- return REMOTE_SYNC_OPERATION_CONFLICT;
- case FileChange::FILE_CHANGE_DELETE:
- return REMOTE_SYNC_OPERATION_ADD_FILE;
- }
- }
-
- DCHECK(remote_file_change.IsDelete());
- if (local_changes.empty())
- return missing_local_file ? REMOTE_SYNC_OPERATION_DELETE_METADATA
- : REMOTE_SYNC_OPERATION_DELETE_FILE;
- switch (local_changes.list().back().change()) {
- case FileChange::FILE_CHANGE_ADD_OR_UPDATE:
- return REMOTE_SYNC_OPERATION_NONE;
- case FileChange::FILE_CHANGE_DELETE:
- return REMOTE_SYNC_OPERATION_DELETE_METADATA;
- }
- NOTREACHED();
- return REMOTE_SYNC_OPERATION_FAIL;
-}
-
void DriveFileSyncService::DidResolveConflictToLocalChange(
scoped_ptr<ProcessRemoteChangeParam> param,
SyncStatusCode status) {
@@ -1954,6 +1924,17 @@ bool DriveFileSyncService::AppendRemoteChangeInternal(
FileChange file_change(CreateFileChange(is_deleted));
+ if (is_deleted) {
+ // Determine a file type of the deleted change by local metadata.
+ if (!remote_resource_id.empty() &&
+ !local_resource_id.empty() &&
+ remote_resource_id == local_resource_id) {
+ DCHECK_EQ(DriveMetadata::RESOURCE_TYPE_FILE, metadata.type());
+ file_change = FileChange(FileChange::FILE_CHANGE_DELETE,
+ SYNC_FILE_TYPE_FILE);
+ }
+ }
+
if (is_deleted && has_db_entry) {
metadata.set_resource_id(std::string());
metadata_store_->UpdateEntry(url, metadata,

Powered by Google App Engine
This is Rietveld 408576698