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

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: add RemoteSyncOperationResolver and unit tests 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..631aea9ae998dfc3c69d3ef073f49bcb91d3db58 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"
@@ -1488,9 +1489,11 @@ 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::RemoteSyncOperationType operation =
+ 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)" : " ")
@@ -1499,15 +1502,20 @@ void DriveFileSyncService::DidPrepareForProcessRemoteChange(
<< " ==> operation: " << operation;
switch (operation) {
- case REMOTE_SYNC_OPERATION_ADD_FILE:
+ case RemoteSyncOperationResolver::REMOTE_SYNC_OPERATION_ADD_FILE:
param->sync_action = SYNC_ACTION_ADDED;
DownloadForRemoteSync(param.Pass());
return;
- case REMOTE_SYNC_OPERATION_UPDATE_FILE:
+ case RemoteSyncOperationResolver::REMOTE_SYNC_OPERATION_ADD_DIRECTORY:
+ // TODO(nhiroki): support directory operations (http://crbug.com/161442).
+ NOTIMPLEMENTED();
+ AbortRemoteSync(param.Pass(), SYNC_STATUS_FAILED);
+ return;
+ case RemoteSyncOperationResolver::REMOTE_SYNC_OPERATION_UPDATE_FILE:
param->sync_action = SYNC_ACTION_UPDATED;
DownloadForRemoteSync(param.Pass());
return;
- case REMOTE_SYNC_OPERATION_DELETE_FILE: {
+ case RemoteSyncOperationResolver::REMOTE_SYNC_OPERATION_DELETE_FILE: {
param->sync_action = SYNC_ACTION_DELETED;
const FileChange& file_change = remote_file_change;
remote_change_processor_->ApplyRemoteChange(
@@ -1516,17 +1524,22 @@ void DriveFileSyncService::DidPrepareForProcessRemoteChange(
base::Passed(&param)));
return;
}
- case REMOTE_SYNC_OPERATION_NONE:
+ case RemoteSyncOperationResolver::REMOTE_SYNC_OPERATION_DELETE_DIRECTORY:
+ // TODO(nhiroki): support directory operations (http://crbug.com/161442).
+ NOTIMPLEMENTED();
+ AbortRemoteSync(param.Pass(), SYNC_STATUS_FAILED);
+ return;
+ case RemoteSyncOperationResolver::REMOTE_SYNC_OPERATION_NONE:
param->sync_action = SYNC_ACTION_NONE;
CompleteRemoteSync(param.Pass(), SYNC_STATUS_OK);
return;
- case REMOTE_SYNC_OPERATION_CONFLICT:
+ case RemoteSyncOperationResolver::REMOTE_SYNC_OPERATION_CONFLICT:
HandleConflictForRemoteSync(param.Pass(), base::Time(), SYNC_STATUS_OK);
return;
- case REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL:
+ case RemoteSyncOperationResolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL:
ResolveConflictToLocalForRemoteSync(param.Pass());
return;
- case REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE: {
+ case RemoteSyncOperationResolver::REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE: {
const FileSystemURL& url = param->remote_change.url;
param->drive_metadata.set_conflicted(false);
param->drive_metadata.set_to_be_fetched(true);
@@ -1536,14 +1549,14 @@ void DriveFileSyncService::DidPrepareForProcessRemoteChange(
DownloadForRemoteSync(param.Pass());
return;
}
- case REMOTE_SYNC_OPERATION_DELETE_METADATA:
+ case RemoteSyncOperationResolver::REMOTE_SYNC_OPERATION_DELETE_METADATA:
param->sync_action = SYNC_ACTION_NONE;
if (missing_db_entry)
CompleteRemoteSync(param.Pass(), SYNC_STATUS_OK);
else
DeleteMetadataForRemoteSync(param.Pass());
return;
- case REMOTE_SYNC_OPERATION_FAIL:
+ case RemoteSyncOperationResolver::REMOTE_SYNC_OPERATION_FAIL:
AbortRemoteSync(param.Pass(), SYNC_STATUS_FAILED);
return;
}
@@ -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