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

Unified Diff: chrome/browser/sync_file_system/local/local_file_sync_context.cc

Issue 390283002: [SyncFS] Demote local file changes before local-to-remote sync (3/3) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: debug printfs Created 6 years, 4 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
« no previous file with comments | « chrome/browser/sync_file_system/local/local_file_sync_context.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync_file_system/local/local_file_sync_context.cc
diff --git a/chrome/browser/sync_file_system/local/local_file_sync_context.cc b/chrome/browser/sync_file_system/local/local_file_sync_context.cc
index d80f2be30ad718fa1524d9af831239eeab1d295d..93acf73b75d21c8bd8b1fdc1e0f1b01c5fd0d2e3 100644
--- a/chrome/browser/sync_file_system/local/local_file_sync_context.cc
+++ b/chrome/browser/sync_file_system/local/local_file_sync_context.cc
@@ -173,8 +173,6 @@ void LocalFileSyncContext::FinalizeSnapshotSync(
} else {
// Abort in-memory mirror change.
backend->change_tracker()->RemoveMirrorAndCommitChangesForURL(url);
- if (sync_finish_status == SYNC_STATUS_FILE_BUSY)
- backend->change_tracker()->DemoteChangesForURL(url);
}
// We've been keeping it in writing mode, so clear the writing counter
@@ -697,9 +695,9 @@ SyncStatusCode LocalFileSyncContext::InitializeChangeTrackerOnFileThread(
return status;
// Get all origins that have pending changes.
- std::deque<FileSystemURL> urls;
+ FileSystemURLQueue urls;
(*tracker_ptr)->GetNextChangedURLs(&urls, 0);
- for (std::deque<FileSystemURL>::iterator iter = urls.begin();
+ for (FileSystemURLQueue::iterator iter = urls.begin();
iter != urls.end(); ++iter) {
origins_with_changes->insert(iter->origin());
}
@@ -785,6 +783,10 @@ LocalFileSyncContext::GetNextURLsForSyncOnFileThread(
scoped_ptr<FileSystemURLQueue> urls(new FileSystemURLQueue);
backend->change_tracker()->GetNextChangedURLs(
urls.get(), kMaxURLsToFetchForLocalSync);
+ for (FileSystemURLQueue::iterator iter = urls->begin();
+ iter != urls->end(); ++iter)
+ backend->change_tracker()->DemoteChangesForURL(*iter);
+
return urls.Pass();
}
@@ -826,13 +828,63 @@ void LocalFileSyncContext::DidTryPrepareForLocalSync(
webkit_blob::ScopedFile snapshot) {
DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
if (status != SYNC_STATUS_FILE_BUSY) {
+ PromoteDemotedChangesForURLs(file_system_context,
+ remaining_urls.Pass());
callback.Run(status, sync_file_info, snapshot.Pass());
return;
}
+
+ PromoteDemotedChangesForURL(file_system_context, sync_file_info.url);
+
// Recursively call TryPrepareForLocalSync with remaining_urls.
TryPrepareForLocalSync(file_system_context, callback, remaining_urls.Pass());
}
+void LocalFileSyncContext::PromoteDemotedChangesForURL(
+ FileSystemContext* file_system_context,
+ const FileSystemURL& url) {
+ DCHECK(file_system_context);
+ if (!file_system_context->default_file_task_runner()->
+ RunsTasksOnCurrentThread()) {
+ DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
+ if (shutdown_on_ui_)
+ return;
+ file_system_context->default_file_task_runner()->PostTask(
+ FROM_HERE,
+ base::Bind(&LocalFileSyncContext::PromoteDemotedChangesForURL,
+ this, make_scoped_refptr(file_system_context), url));
+ return;
+ }
+
+ SyncFileSystemBackend* backend =
+ SyncFileSystemBackend::GetBackend(file_system_context);
+ DCHECK(backend);
+ DCHECK(backend->change_tracker());
+ backend->change_tracker()->PromoteDemotedChangesForURL(url);
+}
+
+void LocalFileSyncContext::PromoteDemotedChangesForURLs(
+ FileSystemContext* file_system_context,
+ scoped_ptr<FileSystemURLQueue> urls) {
+ DCHECK(file_system_context);
+ if (!file_system_context->default_file_task_runner()->
+ RunsTasksOnCurrentThread()) {
+ DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
+ if (shutdown_on_ui_)
+ return;
+ file_system_context->default_file_task_runner()->PostTask(
+ FROM_HERE,
+ base::Bind(&LocalFileSyncContext::PromoteDemotedChangesForURLs,
+ this, make_scoped_refptr(file_system_context),
+ base::Passed(&urls)));
+ return;
+ }
+
+ for (FileSystemURLQueue::iterator iter = urls->begin();
+ iter != urls->end(); ++iter)
+ PromoteDemotedChangesForURL(file_system_context, *iter);
+}
+
void LocalFileSyncContext::DidGetWritingStatusForSync(
FileSystemContext* file_system_context,
SyncStatusCode status,
« no previous file with comments | « chrome/browser/sync_file_system/local/local_file_sync_context.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698