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

Unified Diff: chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.cc

Issue 297803011: [SyncFS] Run LocalToRemoteSyncer as SyncTask (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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_backend/local_to_remote_syncer.cc
diff --git a/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.cc b/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.cc
index ee5aaceba8835b13e9622a9cdea8df118f995264..5d361e4de7ead3d7b798a59c06e42a70e8a5b638 100644
--- a/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.cc
+++ b/chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.cc
@@ -21,6 +21,8 @@
#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
#include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h"
#include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h"
+#include "chrome/browser/sync_file_system/drive_backend/sync_task_manager.h"
+#include "chrome/browser/sync_file_system/drive_backend/sync_task_token.h"
#include "chrome/browser/sync_file_system/logger.h"
#include "google_apis/drive/drive_api_parser.h"
#include "webkit/common/fileapi/file_system_util.h"
@@ -74,19 +76,24 @@ LocalToRemoteSyncer::LocalToRemoteSyncer(SyncEngineContext* sync_context,
LocalToRemoteSyncer::~LocalToRemoteSyncer() {
}
-void LocalToRemoteSyncer::RunExclusive(const SyncStatusCallback& callback) {
+void LocalToRemoteSyncer::RunPreflight(scoped_ptr<SyncTaskToken> token) {
+ scoped_ptr<BlockingFactor> blocking_factor(new BlockingFactor);
+ blocking_factor->exclusive = true;
+ SyncTaskManager::UpdateBlockingFactor(
+ token.Pass(), blocking_factor.Pass(),
+ base::Bind(&LocalToRemoteSyncer::RunExclusive,
+ weak_ptr_factory_.GetWeakPtr()));
+}
+
+void LocalToRemoteSyncer::RunExclusive(scoped_ptr<SyncTaskToken> token) {
if (!IsContextReady()) {
util::Log(logging::LOG_VERBOSE, FROM_HERE,
"[Local -> Remote] Context not ready.");
NOTREACHED();
- callback.Run(SYNC_STATUS_FAILED);
+ SyncTaskManager::NotifyTaskDone(token.Pass(), SYNC_STATUS_FAILED);
return;
}
- SyncStatusCallback wrapped_callback = base::Bind(
- &LocalToRemoteSyncer::SyncCompleted, weak_ptr_factory_.GetWeakPtr(),
- callback);
-
util::Log(logging::LOG_VERBOSE, FROM_HERE,
"[Local -> Remote] Start: %s on %s@%s %s",
local_change_.DebugString().c_str(),
@@ -98,7 +105,7 @@ void LocalToRemoteSyncer::RunExclusive(const SyncStatusCallback& callback) {
// Stray file, we can just return.
util::Log(logging::LOG_VERBOSE, FROM_HERE,
"[Local -> Remote]: Missing file for non-delete change");
- callback.Run(SYNC_STATUS_OK);
+ SyncTaskManager::NotifyTaskDone(token.Pass(), SYNC_STATUS_OK);
return;
}
@@ -113,7 +120,7 @@ void LocalToRemoteSyncer::RunExclusive(const SyncStatusCallback& callback) {
// The app is disabled or not registered.
util::Log(logging::LOG_VERBOSE, FROM_HERE,
"[Local -> Remote]: App is disabled or not registered");
- callback.Run(SYNC_STATUS_UNKNOWN_ORIGIN);
+ SyncTaskManager::NotifyTaskDone(token.Pass(), SYNC_STATUS_UNKNOWN_ORIGIN);
return;
}
DCHECK(active_ancestor_tracker->active());
@@ -131,12 +138,10 @@ void LocalToRemoteSyncer::RunExclusive(const SyncStatusCallback& callback) {
if (active_ancestor_path.empty()) {
missing_entries = path;
} else if (active_ancestor_path != path) {
- bool should_success = active_ancestor_path.AppendRelativePath(
- path, &missing_entries);
- if (!should_success) {
+ if (!active_ancestor_path.AppendRelativePath(path, &missing_entries)) {
NOTREACHED() << "[Local -> Remote]: Detected invalid ancestor: "
<< active_ancestor_path.value();
- callback.Run(SYNC_STATUS_FAILED);
+ SyncTaskManager::NotifyTaskDone(token.Pass(), SYNC_STATUS_FAILED);
return;
}
}
@@ -154,11 +159,15 @@ void LocalToRemoteSyncer::RunExclusive(const SyncStatusCallback& callback) {
// Local file is deleted and remote file is missing, already deleted or
// not yet synced. There is nothing to do for the file.
- callback.Run(SYNC_STATUS_OK);
+ SyncTaskManager::NotifyTaskDone(token.Pass(), SYNC_STATUS_OK);
return;
}
}
+ SyncStatusCallback callback = base::Bind(
+ &LocalToRemoteSyncer::SyncCompleted, weak_ptr_factory_.GetWeakPtr(),
+ base::Passed(&token));
+
if (missing_components.size() > 1) {
// The original target doesn't have remote file and parent.
// Try creating the parent first.
@@ -167,7 +176,7 @@ void LocalToRemoteSyncer::RunExclusive(const SyncStatusCallback& callback) {
target_path_ = active_ancestor_path.Append(missing_components[0]);
util::Log(logging::LOG_VERBOSE, FROM_HERE,
"[Local -> Remote]: Detected missing parent folder.");
- CreateRemoteFolder(wrapped_callback);
+ CreateRemoteFolder(callback);
return;
}
@@ -181,7 +190,7 @@ void LocalToRemoteSyncer::RunExclusive(const SyncStatusCallback& callback) {
"[Local -> Remote]: Detected non-folder file in its path.");
DeleteRemoteFile(base::Bind(&LocalToRemoteSyncer::DidDeleteForCreateFolder,
weak_ptr_factory_.GetWeakPtr(),
- wrapped_callback));
+ callback));
nhiroki 2014/05/22 08:19:32 nit: there is an extra empty line.
tzik 2014/05/23 04:44:58 Done.
return;
}
@@ -200,12 +209,12 @@ void LocalToRemoteSyncer::RunExclusive(const SyncStatusCallback& callback) {
"[Local -> Remote]: Detected conflicting dirty tracker:%"
PRId64, remote_file_tracker_->tracker_id());
// Both local and remote file has pending modification.
- HandleConflict(wrapped_callback);
+ HandleConflict(callback);
return;
}
// Non-conflicting file/folder update case.
- HandleExistingRemoteFile(wrapped_callback);
+ HandleExistingRemoteFile(callback);
return;
}
@@ -220,15 +229,15 @@ void LocalToRemoteSyncer::RunExclusive(const SyncStatusCallback& callback) {
if (local_change_.file_type() == SYNC_FILE_TYPE_FILE) {
util::Log(logging::LOG_VERBOSE, FROM_HERE,
"[Local -> Remote]: Detected a new file.");
- UploadNewFile(wrapped_callback);
+ UploadNewFile(callback);
return;
}
util::Log(logging::LOG_VERBOSE, FROM_HERE,
"[Local -> Remote]: Detected a new folder.");
- CreateRemoteFolder(wrapped_callback);
+ CreateRemoteFolder(callback);
}
-void LocalToRemoteSyncer::SyncCompleted(const SyncStatusCallback& callback,
+void LocalToRemoteSyncer::SyncCompleted(scoped_ptr<SyncTaskToken> token,
SyncStatusCode status) {
if (status == SYNC_STATUS_OK && target_path_ != url_.path())
status = SYNC_STATUS_RETRY;
@@ -243,7 +252,7 @@ void LocalToRemoteSyncer::SyncCompleted(const SyncStatusCallback& callback,
target_path_.AsUTF8Unsafe().c_str(),
url_.origin().host().c_str());
- callback.Run(status);
+ SyncTaskManager::NotifyTaskDone(token.Pass(), status);
}
void LocalToRemoteSyncer::HandleConflict(const SyncStatusCallback& callback) {
@@ -265,9 +274,8 @@ void LocalToRemoteSyncer::HandleConflict(const SyncStatusCallback& callback) {
DCHECK(local_change_.IsDirectory());
// Check if we can reuse the remote folder.
FileMetadata remote_file_metadata;
- bool should_success = metadata_database()->FindFileByFileID(
- remote_file_tracker_->file_id(), &remote_file_metadata);
- if (!should_success) {
+ if (!metadata_database()->FindFileByFileID(
+ remote_file_tracker_->file_id(), &remote_file_metadata)) {
NOTREACHED();
CreateRemoteFolder(callback);
return;
@@ -463,9 +471,8 @@ void LocalToRemoteSyncer::DidUpdateDatabaseForUploadExistingFile(
}
FileMetadata file;
- bool should_success = metadata_database()->FindFileByFileID(
- remote_file_tracker_->file_id(), &file);
- if (!should_success) {
+ if (!metadata_database()->FindFileByFileID(
+ remote_file_tracker_->file_id(), &file)) {
NOTREACHED();
callback.Run(SYNC_STATUS_FAILED);
return;

Powered by Google App Engine
This is Rietveld 408576698