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

Side by Side Diff: chrome/browser/sync_file_system/local/local_file_sync_context.cc

Issue 2871303004: Rename TaskRunner::RunsTasksOnCurrentThread() in //chrome (Closed)
Patch Set: fixed build error Created 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync_file_system/local/local_file_sync_context.h" 5 #include "chrome/browser/sync_file_system/local/local_file_sync_context.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 base::SingleThreadTaskRunner* ui_task_runner, 53 base::SingleThreadTaskRunner* ui_task_runner,
54 base::SingleThreadTaskRunner* io_task_runner) 54 base::SingleThreadTaskRunner* io_task_runner)
55 : local_base_path_(base_path.Append(FILE_PATH_LITERAL("local"))), 55 : local_base_path_(base_path.Append(FILE_PATH_LITERAL("local"))),
56 env_override_(env_override), 56 env_override_(env_override),
57 ui_task_runner_(ui_task_runner), 57 ui_task_runner_(ui_task_runner),
58 io_task_runner_(io_task_runner), 58 io_task_runner_(io_task_runner),
59 shutdown_on_ui_(false), 59 shutdown_on_ui_(false),
60 shutdown_on_io_(false), 60 shutdown_on_io_(false),
61 mock_notify_changes_duration_in_sec_(-1) { 61 mock_notify_changes_duration_in_sec_(-1) {
62 DCHECK(base_path.IsAbsolute()); 62 DCHECK(base_path.IsAbsolute());
63 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 63 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
64 } 64 }
65 65
66 void LocalFileSyncContext::MaybeInitializeFileSystemContext( 66 void LocalFileSyncContext::MaybeInitializeFileSystemContext(
67 const GURL& source_url, 67 const GURL& source_url,
68 FileSystemContext* file_system_context, 68 FileSystemContext* file_system_context,
69 const SyncStatusCallback& callback) { 69 const SyncStatusCallback& callback) {
70 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 70 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
71 if (base::ContainsKey(file_system_contexts_, file_system_context)) { 71 if (base::ContainsKey(file_system_contexts_, file_system_context)) {
72 // The context has been already initialized. Just dispatch the callback 72 // The context has been already initialized. Just dispatch the callback
73 // with SYNC_STATUS_OK. 73 // with SYNC_STATUS_OK.
74 ui_task_runner_->PostTask(FROM_HERE, 74 ui_task_runner_->PostTask(FROM_HERE,
75 base::BindOnce(callback, SYNC_STATUS_OK)); 75 base::BindOnce(callback, SYNC_STATUS_OK));
76 return; 76 return;
77 } 77 }
78 78
79 StatusCallbackQueue& callback_queue = 79 StatusCallbackQueue& callback_queue =
80 pending_initialize_callbacks_[file_system_context]; 80 pending_initialize_callbacks_[file_system_context];
(...skipping 11 matching lines...) Expand all
92 io_task_runner_->PostTask( 92 io_task_runner_->PostTask(
93 FROM_HERE, 93 FROM_HERE,
94 base::BindOnce(&storage::SandboxFileSystemBackendDelegate::OpenFileSystem, 94 base::BindOnce(&storage::SandboxFileSystemBackendDelegate::OpenFileSystem,
95 base::Unretained(file_system_context->sandbox_delegate()), 95 base::Unretained(file_system_context->sandbox_delegate()),
96 source_url, storage::kFileSystemTypeSyncable, 96 source_url, storage::kFileSystemTypeSyncable,
97 storage::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT, 97 storage::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT,
98 open_filesystem_callback, GURL())); 98 open_filesystem_callback, GURL()));
99 } 99 }
100 100
101 void LocalFileSyncContext::ShutdownOnUIThread() { 101 void LocalFileSyncContext::ShutdownOnUIThread() {
102 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 102 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
103 shutdown_on_ui_ = true; 103 shutdown_on_ui_ = true;
104 io_task_runner_->PostTask( 104 io_task_runner_->PostTask(
105 FROM_HERE, 105 FROM_HERE,
106 base::BindOnce(&LocalFileSyncContext::ShutdownOnIOThread, this)); 106 base::BindOnce(&LocalFileSyncContext::ShutdownOnIOThread, this));
107 } 107 }
108 108
109 void LocalFileSyncContext::GetFileForLocalSync( 109 void LocalFileSyncContext::GetFileForLocalSync(
110 FileSystemContext* file_system_context, 110 FileSystemContext* file_system_context,
111 const LocalFileSyncInfoCallback& callback) { 111 const LocalFileSyncInfoCallback& callback) {
112 DCHECK(file_system_context); 112 DCHECK(file_system_context);
113 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 113 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
114 114
115 base::PostTaskAndReplyWithResult( 115 base::PostTaskAndReplyWithResult(
116 file_system_context->default_file_task_runner(), FROM_HERE, 116 file_system_context->default_file_task_runner(), FROM_HERE,
117 base::Bind(&LocalFileSyncContext::GetNextURLsForSyncOnFileThread, this, 117 base::Bind(&LocalFileSyncContext::GetNextURLsForSyncOnFileThread, this,
118 base::RetainedRef(file_system_context)), 118 base::RetainedRef(file_system_context)),
119 base::Bind(&LocalFileSyncContext::TryPrepareForLocalSync, this, 119 base::Bind(&LocalFileSyncContext::TryPrepareForLocalSync, this,
120 base::RetainedRef(file_system_context), callback)); 120 base::RetainedRef(file_system_context), callback));
121 } 121 }
122 122
123 void LocalFileSyncContext::ClearChangesForURL( 123 void LocalFileSyncContext::ClearChangesForURL(
124 FileSystemContext* file_system_context, 124 FileSystemContext* file_system_context,
125 const FileSystemURL& url, 125 const FileSystemURL& url,
126 const base::Closure& done_callback) { 126 const base::Closure& done_callback) {
127 // This is initially called on UI thread and to be relayed to FILE thread. 127 // This is initially called on UI thread and to be relayed to FILE thread.
128 DCHECK(file_system_context); 128 DCHECK(file_system_context);
129 if (!file_system_context->default_file_task_runner()-> 129 if (!file_system_context->default_file_task_runner()->
130 RunsTasksOnCurrentThread()) { 130 RunsTasksInCurrentSequence()) {
131 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 131 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
132 file_system_context->default_file_task_runner()->PostTask( 132 file_system_context->default_file_task_runner()->PostTask(
133 FROM_HERE, base::BindOnce(&LocalFileSyncContext::ClearChangesForURL, 133 FROM_HERE, base::BindOnce(&LocalFileSyncContext::ClearChangesForURL,
134 this, base::RetainedRef(file_system_context), 134 this, base::RetainedRef(file_system_context),
135 url, done_callback)); 135 url, done_callback));
136 return; 136 return;
137 } 137 }
138 138
139 SyncFileSystemBackend* backend = 139 SyncFileSystemBackend* backend =
140 SyncFileSystemBackend::GetBackend(file_system_context); 140 SyncFileSystemBackend::GetBackend(file_system_context);
141 DCHECK(backend); 141 DCHECK(backend);
142 DCHECK(backend->change_tracker()); 142 DCHECK(backend->change_tracker());
143 backend->change_tracker()->ClearChangesForURL(url); 143 backend->change_tracker()->ClearChangesForURL(url);
144 144
145 // Call the completion callback on UI thread. 145 // Call the completion callback on UI thread.
146 ui_task_runner_->PostTask(FROM_HERE, done_callback); 146 ui_task_runner_->PostTask(FROM_HERE, done_callback);
147 } 147 }
148 148
149 void LocalFileSyncContext::FinalizeSnapshotSync( 149 void LocalFileSyncContext::FinalizeSnapshotSync(
150 storage::FileSystemContext* file_system_context, 150 storage::FileSystemContext* file_system_context,
151 const storage::FileSystemURL& url, 151 const storage::FileSystemURL& url,
152 SyncStatusCode sync_finish_status, 152 SyncStatusCode sync_finish_status,
153 const base::Closure& done_callback) { 153 const base::Closure& done_callback) {
154 DCHECK(file_system_context); 154 DCHECK(file_system_context);
155 DCHECK(url.is_valid()); 155 DCHECK(url.is_valid());
156 if (!file_system_context->default_file_task_runner()-> 156 if (!file_system_context->default_file_task_runner()->
157 RunsTasksOnCurrentThread()) { 157 RunsTasksInCurrentSequence()) {
158 file_system_context->default_file_task_runner()->PostTask( 158 file_system_context->default_file_task_runner()->PostTask(
159 FROM_HERE, base::BindOnce(&LocalFileSyncContext::FinalizeSnapshotSync, 159 FROM_HERE, base::BindOnce(&LocalFileSyncContext::FinalizeSnapshotSync,
160 this, base::RetainedRef(file_system_context), 160 this, base::RetainedRef(file_system_context),
161 url, sync_finish_status, done_callback)); 161 url, sync_finish_status, done_callback));
162 return; 162 return;
163 } 163 }
164 164
165 SyncFileSystemBackend* backend = 165 SyncFileSystemBackend* backend =
166 SyncFileSystemBackend::GetBackend(file_system_context); 166 SyncFileSystemBackend::GetBackend(file_system_context);
167 DCHECK(backend); 167 DCHECK(backend);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 212
213 done_callback.Run(); 213 done_callback.Run();
214 } 214 }
215 215
216 void LocalFileSyncContext::PrepareForSync( 216 void LocalFileSyncContext::PrepareForSync(
217 FileSystemContext* file_system_context, 217 FileSystemContext* file_system_context,
218 const FileSystemURL& url, 218 const FileSystemURL& url,
219 SyncMode sync_mode, 219 SyncMode sync_mode,
220 const LocalFileSyncInfoCallback& callback) { 220 const LocalFileSyncInfoCallback& callback) {
221 // This is initially called on UI thread and to be relayed to IO thread. 221 // This is initially called on UI thread and to be relayed to IO thread.
222 if (!io_task_runner_->RunsTasksOnCurrentThread()) { 222 if (!io_task_runner_->RunsTasksInCurrentSequence()) {
223 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 223 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
224 io_task_runner_->PostTask( 224 io_task_runner_->PostTask(
225 FROM_HERE, base::BindOnce(&LocalFileSyncContext::PrepareForSync, this, 225 FROM_HERE, base::BindOnce(&LocalFileSyncContext::PrepareForSync, this,
226 base::RetainedRef(file_system_context), url, 226 base::RetainedRef(file_system_context), url,
227 sync_mode, callback)); 227 sync_mode, callback));
228 return; 228 return;
229 } 229 }
230 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 230 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
231 const bool syncable = sync_status()->IsSyncable(url); 231 const bool syncable = sync_status()->IsSyncable(url);
232 // Disable writing if it's ready to be synced. 232 // Disable writing if it's ready to be synced.
233 if (syncable) 233 if (syncable)
234 sync_status()->StartSyncing(url); 234 sync_status()->StartSyncing(url);
235 ui_task_runner_->PostTask( 235 ui_task_runner_->PostTask(
236 FROM_HERE, 236 FROM_HERE,
237 base::BindOnce(&LocalFileSyncContext::DidGetWritingStatusForSync, this, 237 base::BindOnce(&LocalFileSyncContext::DidGetWritingStatusForSync, this,
238 base::RetainedRef(file_system_context), 238 base::RetainedRef(file_system_context),
239 syncable ? SYNC_STATUS_OK : SYNC_STATUS_FILE_BUSY, url, 239 syncable ? SYNC_STATUS_OK : SYNC_STATUS_FILE_BUSY, url,
240 sync_mode, callback)); 240 sync_mode, callback));
241 } 241 }
242 242
243 void LocalFileSyncContext::RegisterURLForWaitingSync( 243 void LocalFileSyncContext::RegisterURLForWaitingSync(
244 const FileSystemURL& url, 244 const FileSystemURL& url,
245 const base::Closure& on_syncable_callback) { 245 const base::Closure& on_syncable_callback) {
246 // This is initially called on UI thread and to be relayed to IO thread. 246 // This is initially called on UI thread and to be relayed to IO thread.
247 if (!io_task_runner_->RunsTasksOnCurrentThread()) { 247 if (!io_task_runner_->RunsTasksInCurrentSequence()) {
248 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 248 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
249 io_task_runner_->PostTask( 249 io_task_runner_->PostTask(
250 FROM_HERE, 250 FROM_HERE,
251 base::BindOnce(&LocalFileSyncContext::RegisterURLForWaitingSync, this, 251 base::BindOnce(&LocalFileSyncContext::RegisterURLForWaitingSync, this,
252 url, on_syncable_callback)); 252 url, on_syncable_callback));
253 return; 253 return;
254 } 254 }
255 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 255 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
256 if (shutdown_on_io_) 256 if (shutdown_on_io_)
257 return; 257 return;
258 if (sync_status()->IsSyncable(url)) { 258 if (sync_status()->IsSyncable(url)) {
259 // No need to register; fire the callback now. 259 // No need to register; fire the callback now.
260 ui_task_runner_->PostTask(FROM_HERE, on_syncable_callback); 260 ui_task_runner_->PostTask(FROM_HERE, on_syncable_callback);
261 return; 261 return;
262 } 262 }
263 url_waiting_sync_on_io_ = url; 263 url_waiting_sync_on_io_ = url;
264 url_syncable_callback_ = on_syncable_callback; 264 url_syncable_callback_ = on_syncable_callback;
265 } 265 }
266 266
267 void LocalFileSyncContext::ApplyRemoteChange( 267 void LocalFileSyncContext::ApplyRemoteChange(
268 FileSystemContext* file_system_context, 268 FileSystemContext* file_system_context,
269 const FileChange& change, 269 const FileChange& change,
270 const base::FilePath& local_path, 270 const base::FilePath& local_path,
271 const FileSystemURL& url, 271 const FileSystemURL& url,
272 const SyncStatusCallback& callback) { 272 const SyncStatusCallback& callback) {
273 if (!io_task_runner_->RunsTasksOnCurrentThread()) { 273 if (!io_task_runner_->RunsTasksInCurrentSequence()) {
274 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 274 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
275 io_task_runner_->PostTask( 275 io_task_runner_->PostTask(
276 FROM_HERE, base::BindOnce(&LocalFileSyncContext::ApplyRemoteChange, 276 FROM_HERE, base::BindOnce(&LocalFileSyncContext::ApplyRemoteChange,
277 this, base::RetainedRef(file_system_context), 277 this, base::RetainedRef(file_system_context),
278 change, local_path, url, callback)); 278 change, local_path, url, callback));
279 return; 279 return;
280 } 280 }
281 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 281 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
282 DCHECK(!sync_status()->IsWritable(url)); 282 DCHECK(!sync_status()->IsWritable(url));
283 DCHECK(!sync_status()->IsWriting(url)); 283 DCHECK(!sync_status()->IsWriting(url));
284 284
285 FileSystemOperation::StatusCallback operation_callback; 285 FileSystemOperation::StatusCallback operation_callback;
286 switch (change.change()) { 286 switch (change.change()) {
287 case FileChange::FILE_CHANGE_DELETE: 287 case FileChange::FILE_CHANGE_DELETE:
288 HandleRemoteDelete(file_system_context, url, callback); 288 HandleRemoteDelete(file_system_context, url, callback);
289 return; 289 return;
290 case FileChange::FILE_CHANGE_ADD_OR_UPDATE: 290 case FileChange::FILE_CHANGE_ADD_OR_UPDATE:
291 HandleRemoteAddOrUpdate( 291 HandleRemoteAddOrUpdate(
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 const SyncStatusCallback& callback, 350 const SyncStatusCallback& callback,
351 base::File::Error error) { 351 base::File::Error error) {
352 // Remove() may fail if the target entry does not exist (which is ok), 352 // Remove() may fail if the target entry does not exist (which is ok),
353 // so we ignore |error| here. 353 // so we ignore |error| here.
354 354
355 if (shutdown_on_io_) { 355 if (shutdown_on_io_) {
356 callback.Run(SYNC_FILE_ERROR_ABORT); 356 callback.Run(SYNC_FILE_ERROR_ABORT);
357 return; 357 return;
358 } 358 }
359 359
360 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 360 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
361 DCHECK(!sync_status()->IsWritable(url)); 361 DCHECK(!sync_status()->IsWritable(url));
362 DCHECK(!sync_status()->IsWriting(url)); 362 DCHECK(!sync_status()->IsWriting(url));
363 363
364 FileSystemURL url_for_sync = CreateSyncableFileSystemURLForSync( 364 FileSystemURL url_for_sync = CreateSyncableFileSystemURLForSync(
365 file_system_context, url); 365 file_system_context, url);
366 FileSystemOperation::StatusCallback operation_callback = base::Bind( 366 FileSystemOperation::StatusCallback operation_callback = base::Bind(
367 &LocalFileSyncContext::DidApplyRemoteChange, this, url, callback); 367 &LocalFileSyncContext::DidApplyRemoteChange, this, url, callback);
368 368
369 DCHECK_EQ(FileChange::FILE_CHANGE_ADD_OR_UPDATE, change.change()); 369 DCHECK_EQ(FileChange::FILE_CHANGE_ADD_OR_UPDATE, change.change());
370 switch (change.file_type()) { 370 switch (change.file_type()) {
(...skipping 29 matching lines...) Expand all
400 } 400 }
401 401
402 void LocalFileSyncContext::RecordFakeLocalChange( 402 void LocalFileSyncContext::RecordFakeLocalChange(
403 FileSystemContext* file_system_context, 403 FileSystemContext* file_system_context,
404 const FileSystemURL& url, 404 const FileSystemURL& url,
405 const FileChange& change, 405 const FileChange& change,
406 const SyncStatusCallback& callback) { 406 const SyncStatusCallback& callback) {
407 // This is called on UI thread and to be relayed to FILE thread. 407 // This is called on UI thread and to be relayed to FILE thread.
408 DCHECK(file_system_context); 408 DCHECK(file_system_context);
409 if (!file_system_context->default_file_task_runner()-> 409 if (!file_system_context->default_file_task_runner()->
410 RunsTasksOnCurrentThread()) { 410 RunsTasksInCurrentSequence()) {
411 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 411 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
412 file_system_context->default_file_task_runner()->PostTask( 412 file_system_context->default_file_task_runner()->PostTask(
413 FROM_HERE, base::BindOnce(&LocalFileSyncContext::RecordFakeLocalChange, 413 FROM_HERE, base::BindOnce(&LocalFileSyncContext::RecordFakeLocalChange,
414 this, base::RetainedRef(file_system_context), 414 this, base::RetainedRef(file_system_context),
415 url, change, callback)); 415 url, change, callback));
416 return; 416 return;
417 } 417 }
418 418
419 SyncFileSystemBackend* backend = 419 SyncFileSystemBackend* backend =
420 SyncFileSystemBackend::GetBackend(file_system_context); 420 SyncFileSystemBackend::GetBackend(file_system_context);
421 DCHECK(backend); 421 DCHECK(backend);
422 DCHECK(backend->change_tracker()); 422 DCHECK(backend->change_tracker());
423 backend->change_tracker()->MarkDirtyOnDatabase(url); 423 backend->change_tracker()->MarkDirtyOnDatabase(url);
424 backend->change_tracker()->RecordChange(url, change); 424 backend->change_tracker()->RecordChange(url, change);
425 425
426 // Fire the callback on UI thread. 426 // Fire the callback on UI thread.
427 ui_task_runner_->PostTask(FROM_HERE, 427 ui_task_runner_->PostTask(FROM_HERE,
428 base::BindOnce(callback, SYNC_STATUS_OK)); 428 base::BindOnce(callback, SYNC_STATUS_OK));
429 } 429 }
430 430
431 void LocalFileSyncContext::GetFileMetadata( 431 void LocalFileSyncContext::GetFileMetadata(
432 FileSystemContext* file_system_context, 432 FileSystemContext* file_system_context,
433 const FileSystemURL& url, 433 const FileSystemURL& url,
434 const SyncFileMetadataCallback& callback) { 434 const SyncFileMetadataCallback& callback) {
435 // This is initially called on UI thread and to be relayed to IO thread. 435 // This is initially called on UI thread and to be relayed to IO thread.
436 if (!io_task_runner_->RunsTasksOnCurrentThread()) { 436 if (!io_task_runner_->RunsTasksInCurrentSequence()) {
437 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 437 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
438 io_task_runner_->PostTask( 438 io_task_runner_->PostTask(
439 FROM_HERE, 439 FROM_HERE,
440 base::BindOnce(&LocalFileSyncContext::GetFileMetadata, this, 440 base::BindOnce(&LocalFileSyncContext::GetFileMetadata, this,
441 base::RetainedRef(file_system_context), url, callback)); 441 base::RetainedRef(file_system_context), url, callback));
442 return; 442 return;
443 } 443 }
444 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 444 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
445 445
446 FileSystemURL url_for_sync = CreateSyncableFileSystemURLForSync( 446 FileSystemURL url_for_sync = CreateSyncableFileSystemURLForSync(
447 file_system_context, url); 447 file_system_context, url);
448 file_system_context->operation_runner()->GetMetadata( 448 file_system_context->operation_runner()->GetMetadata(
449 url_for_sync, FileSystemOperation::GET_METADATA_FIELD_IS_DIRECTORY | 449 url_for_sync, FileSystemOperation::GET_METADATA_FIELD_IS_DIRECTORY |
450 FileSystemOperation::GET_METADATA_FIELD_SIZE | 450 FileSystemOperation::GET_METADATA_FIELD_SIZE |
451 FileSystemOperation::GET_METADATA_FIELD_LAST_MODIFIED, 451 FileSystemOperation::GET_METADATA_FIELD_LAST_MODIFIED,
452 base::Bind(&LocalFileSyncContext::DidGetFileMetadata, this, callback)); 452 base::Bind(&LocalFileSyncContext::DidGetFileMetadata, this, callback));
453 } 453 }
454 454
455 void LocalFileSyncContext::HasPendingLocalChanges( 455 void LocalFileSyncContext::HasPendingLocalChanges(
456 FileSystemContext* file_system_context, 456 FileSystemContext* file_system_context,
457 const FileSystemURL& url, 457 const FileSystemURL& url,
458 const HasPendingLocalChangeCallback& callback) { 458 const HasPendingLocalChangeCallback& callback) {
459 // This gets called on UI thread and relays the task on FILE thread. 459 // This gets called on UI thread and relays the task on FILE thread.
460 DCHECK(file_system_context); 460 DCHECK(file_system_context);
461 if (!file_system_context->default_file_task_runner()-> 461 if (!file_system_context->default_file_task_runner()->
462 RunsTasksOnCurrentThread()) { 462 RunsTasksInCurrentSequence()) {
463 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 463 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
464 file_system_context->default_file_task_runner()->PostTask( 464 file_system_context->default_file_task_runner()->PostTask(
465 FROM_HERE, 465 FROM_HERE,
466 base::BindOnce(&LocalFileSyncContext::HasPendingLocalChanges, this, 466 base::BindOnce(&LocalFileSyncContext::HasPendingLocalChanges, this,
467 base::RetainedRef(file_system_context), url, callback)); 467 base::RetainedRef(file_system_context), url, callback));
468 return; 468 return;
469 } 469 }
470 470
471 SyncFileSystemBackend* backend = 471 SyncFileSystemBackend* backend =
472 SyncFileSystemBackend::GetBackend(file_system_context); 472 SyncFileSystemBackend::GetBackend(file_system_context);
473 DCHECK(backend); 473 DCHECK(backend);
474 DCHECK(backend->change_tracker()); 474 DCHECK(backend->change_tracker());
475 FileChangeList changes; 475 FileChangeList changes;
476 backend->change_tracker()->GetChangesForURL(url, &changes); 476 backend->change_tracker()->GetChangesForURL(url, &changes);
477 477
478 // Fire the callback on UI thread. 478 // Fire the callback on UI thread.
479 ui_task_runner_->PostTask( 479 ui_task_runner_->PostTask(
480 FROM_HERE, base::BindOnce(callback, SYNC_STATUS_OK, !changes.empty())); 480 FROM_HERE, base::BindOnce(callback, SYNC_STATUS_OK, !changes.empty()));
481 } 481 }
482 482
483 void LocalFileSyncContext::PromoteDemotedChanges( 483 void LocalFileSyncContext::PromoteDemotedChanges(
484 const GURL& origin, 484 const GURL& origin,
485 storage::FileSystemContext* file_system_context, 485 storage::FileSystemContext* file_system_context,
486 const base::Closure& callback) { 486 const base::Closure& callback) {
487 // This is initially called on UI thread and to be relayed to FILE thread. 487 // This is initially called on UI thread and to be relayed to FILE thread.
488 DCHECK(file_system_context); 488 DCHECK(file_system_context);
489 if (!file_system_context->default_file_task_runner()-> 489 if (!file_system_context->default_file_task_runner()->
490 RunsTasksOnCurrentThread()) { 490 RunsTasksInCurrentSequence()) {
491 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 491 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
492 file_system_context->default_file_task_runner()->PostTask( 492 file_system_context->default_file_task_runner()->PostTask(
493 FROM_HERE, 493 FROM_HERE,
494 base::BindOnce(&LocalFileSyncContext::PromoteDemotedChanges, this, 494 base::BindOnce(&LocalFileSyncContext::PromoteDemotedChanges, this,
495 origin, base::RetainedRef(file_system_context), 495 origin, base::RetainedRef(file_system_context),
496 callback)); 496 callback));
497 return; 497 return;
498 } 498 }
499 499
500 SyncFileSystemBackend* backend = 500 SyncFileSystemBackend* backend =
501 SyncFileSystemBackend::GetBackend(file_system_context); 501 SyncFileSystemBackend::GetBackend(file_system_context);
502 DCHECK(backend); 502 DCHECK(backend);
503 DCHECK(backend->change_tracker()); 503 DCHECK(backend->change_tracker());
504 if (!backend->change_tracker()->PromoteDemotedChanges()) { 504 if (!backend->change_tracker()->PromoteDemotedChanges()) {
505 ui_task_runner_->PostTask(FROM_HERE, callback); 505 ui_task_runner_->PostTask(FROM_HERE, callback);
506 return; 506 return;
507 } 507 }
508 508
509 io_task_runner_->PostTask( 509 io_task_runner_->PostTask(
510 FROM_HERE, base::BindOnce(&LocalFileSyncContext::UpdateChangesForOrigin, 510 FROM_HERE, base::BindOnce(&LocalFileSyncContext::UpdateChangesForOrigin,
511 this, origin, callback)); 511 this, origin, callback));
512 } 512 }
513 513
514 void LocalFileSyncContext::UpdateChangesForOrigin( 514 void LocalFileSyncContext::UpdateChangesForOrigin(
515 const GURL& origin, 515 const GURL& origin,
516 const base::Closure& callback) { 516 const base::Closure& callback) {
517 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 517 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
518 if (shutdown_on_io_) 518 if (shutdown_on_io_)
519 return; 519 return;
520 origins_with_pending_changes_.insert(origin); 520 origins_with_pending_changes_.insert(origin);
521 ScheduleNotifyChangesUpdatedOnIOThread(callback); 521 ScheduleNotifyChangesUpdatedOnIOThread(callback);
522 } 522 }
523 523
524 void LocalFileSyncContext::AddOriginChangeObserver( 524 void LocalFileSyncContext::AddOriginChangeObserver(
525 LocalOriginChangeObserver* observer) { 525 LocalOriginChangeObserver* observer) {
526 origin_change_observers_.AddObserver(observer); 526 origin_change_observers_.AddObserver(observer);
527 } 527 }
528 528
529 void LocalFileSyncContext::RemoveOriginChangeObserver( 529 void LocalFileSyncContext::RemoveOriginChangeObserver(
530 LocalOriginChangeObserver* observer) { 530 LocalOriginChangeObserver* observer) {
531 origin_change_observers_.RemoveObserver(observer); 531 origin_change_observers_.RemoveObserver(observer);
532 } 532 }
533 533
534 base::WeakPtr<SyncableFileOperationRunner> 534 base::WeakPtr<SyncableFileOperationRunner>
535 LocalFileSyncContext::operation_runner() const { 535 LocalFileSyncContext::operation_runner() const {
536 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 536 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
537 if (operation_runner_) 537 if (operation_runner_)
538 return operation_runner_->AsWeakPtr(); 538 return operation_runner_->AsWeakPtr();
539 return base::WeakPtr<SyncableFileOperationRunner>(); 539 return base::WeakPtr<SyncableFileOperationRunner>();
540 } 540 }
541 541
542 LocalFileSyncStatus* LocalFileSyncContext::sync_status() const { 542 LocalFileSyncStatus* LocalFileSyncContext::sync_status() const {
543 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 543 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
544 return sync_status_.get(); 544 return sync_status_.get();
545 } 545 }
546 546
547 void LocalFileSyncContext::OnSyncEnabled(const FileSystemURL& url) { 547 void LocalFileSyncContext::OnSyncEnabled(const FileSystemURL& url) {
548 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 548 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
549 if (shutdown_on_io_) 549 if (shutdown_on_io_)
550 return; 550 return;
551 UpdateChangesForOrigin(url.origin(), NoopClosure()); 551 UpdateChangesForOrigin(url.origin(), NoopClosure());
552 if (url_syncable_callback_.is_null() || 552 if (url_syncable_callback_.is_null() ||
553 sync_status()->IsWriting(url_waiting_sync_on_io_)) { 553 sync_status()->IsWriting(url_waiting_sync_on_io_)) {
554 return; 554 return;
555 } 555 }
556 // TODO(kinuko): may want to check how many pending tasks we have. 556 // TODO(kinuko): may want to check how many pending tasks we have.
557 ui_task_runner_->PostTask(FROM_HERE, url_syncable_callback_); 557 ui_task_runner_->PostTask(FROM_HERE, url_syncable_callback_);
558 url_syncable_callback_.Reset(); 558 url_syncable_callback_.Reset();
559 } 559 }
560 560
561 void LocalFileSyncContext::OnWriteEnabled(const FileSystemURL& url) { 561 void LocalFileSyncContext::OnWriteEnabled(const FileSystemURL& url) {
562 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 562 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
563 // Nothing to do for now. 563 // Nothing to do for now.
564 } 564 }
565 565
566 LocalFileSyncContext::~LocalFileSyncContext() { 566 LocalFileSyncContext::~LocalFileSyncContext() {
567 } 567 }
568 568
569 void LocalFileSyncContext::ScheduleNotifyChangesUpdatedOnIOThread( 569 void LocalFileSyncContext::ScheduleNotifyChangesUpdatedOnIOThread(
570 const base::Closure& callback) { 570 const base::Closure& callback) {
571 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 571 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
572 if (shutdown_on_io_) 572 if (shutdown_on_io_)
573 return; 573 return;
574 pending_completion_callbacks_.push_back(callback); 574 pending_completion_callbacks_.push_back(callback);
575 if (base::Time::Now() > last_notified_changes_ + NotifyChangesDuration()) { 575 if (base::Time::Now() > last_notified_changes_ + NotifyChangesDuration()) {
576 NotifyAvailableChangesOnIOThread(); 576 NotifyAvailableChangesOnIOThread();
577 } else if (!timer_on_io_->IsRunning()) { 577 } else if (!timer_on_io_->IsRunning()) {
578 timer_on_io_->Start( 578 timer_on_io_->Start(
579 FROM_HERE, NotifyChangesDuration(), 579 FROM_HERE, NotifyChangesDuration(),
580 base::Bind(&LocalFileSyncContext::NotifyAvailableChangesOnIOThread, 580 base::Bind(&LocalFileSyncContext::NotifyAvailableChangesOnIOThread,
581 base::Unretained(this))); 581 base::Unretained(this)));
582 } 582 }
583 } 583 }
584 584
585 void LocalFileSyncContext::NotifyAvailableChangesOnIOThread() { 585 void LocalFileSyncContext::NotifyAvailableChangesOnIOThread() {
586 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 586 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
587 if (shutdown_on_io_) 587 if (shutdown_on_io_)
588 return; 588 return;
589 589
590 std::vector<base::Closure> completion_callbacks; 590 std::vector<base::Closure> completion_callbacks;
591 completion_callbacks.swap(pending_completion_callbacks_); 591 completion_callbacks.swap(pending_completion_callbacks_);
592 592
593 ui_task_runner_->PostTask( 593 ui_task_runner_->PostTask(
594 FROM_HERE, 594 FROM_HERE,
595 base::BindOnce(&LocalFileSyncContext::NotifyAvailableChanges, this, 595 base::BindOnce(&LocalFileSyncContext::NotifyAvailableChanges, this,
596 origins_with_pending_changes_, completion_callbacks)); 596 origins_with_pending_changes_, completion_callbacks));
597 last_notified_changes_ = base::Time::Now(); 597 last_notified_changes_ = base::Time::Now();
598 origins_with_pending_changes_.clear(); 598 origins_with_pending_changes_.clear();
599 } 599 }
600 600
601 void LocalFileSyncContext::NotifyAvailableChanges( 601 void LocalFileSyncContext::NotifyAvailableChanges(
602 const std::set<GURL>& origins, 602 const std::set<GURL>& origins,
603 const std::vector<base::Closure>& callbacks) { 603 const std::vector<base::Closure>& callbacks) {
604 for (auto& observer : origin_change_observers_) 604 for (auto& observer : origin_change_observers_)
605 observer.OnChangesAvailableInOrigins(origins); 605 observer.OnChangesAvailableInOrigins(origins);
606 for (const auto& callback : callbacks) 606 for (const auto& callback : callbacks)
607 callback.Run(); 607 callback.Run();
608 } 608 }
609 609
610 void LocalFileSyncContext::ShutdownOnIOThread() { 610 void LocalFileSyncContext::ShutdownOnIOThread() {
611 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 611 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
612 shutdown_on_io_ = true; 612 shutdown_on_io_ = true;
613 operation_runner_.reset(); 613 operation_runner_.reset();
614 root_delete_helper_.reset(); 614 root_delete_helper_.reset();
615 sync_status_.reset(); 615 sync_status_.reset();
616 timer_on_io_.reset(); 616 timer_on_io_.reset();
617 } 617 }
618 618
619 void LocalFileSyncContext::InitializeFileSystemContextOnIOThread( 619 void LocalFileSyncContext::InitializeFileSystemContextOnIOThread(
620 const GURL& source_url, 620 const GURL& source_url,
621 FileSystemContext* file_system_context, 621 FileSystemContext* file_system_context,
622 const GURL& /* root */, 622 const GURL& /* root */,
623 const std::string& /* name */, 623 const std::string& /* name */,
624 base::File::Error error) { 624 base::File::Error error) {
625 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 625 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
626 if (shutdown_on_io_) 626 if (shutdown_on_io_)
627 error = base::File::FILE_ERROR_ABORT; 627 error = base::File::FILE_ERROR_ABORT;
628 if (error != base::File::FILE_OK) { 628 if (error != base::File::FILE_OK) {
629 DidInitialize(source_url, file_system_context, 629 DidInitialize(source_url, file_system_context,
630 FileErrorToSyncStatusCode(error)); 630 FileErrorToSyncStatusCode(error));
631 return; 631 return;
632 } 632 }
633 DCHECK(file_system_context); 633 DCHECK(file_system_context);
634 SyncFileSystemBackend* backend = 634 SyncFileSystemBackend* backend =
635 SyncFileSystemBackend::GetBackend(file_system_context); 635 SyncFileSystemBackend::GetBackend(file_system_context);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 694
695 return status; 695 return status;
696 } 696 }
697 697
698 void LocalFileSyncContext::DidInitializeChangeTrackerOnIOThread( 698 void LocalFileSyncContext::DidInitializeChangeTrackerOnIOThread(
699 std::unique_ptr<LocalFileChangeTracker>* tracker_ptr, 699 std::unique_ptr<LocalFileChangeTracker>* tracker_ptr,
700 const GURL& source_url, 700 const GURL& source_url,
701 FileSystemContext* file_system_context, 701 FileSystemContext* file_system_context,
702 std::set<GURL>* origins_with_changes, 702 std::set<GURL>* origins_with_changes,
703 SyncStatusCode status) { 703 SyncStatusCode status) {
704 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 704 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
705 DCHECK(file_system_context); 705 DCHECK(file_system_context);
706 DCHECK(origins_with_changes); 706 DCHECK(origins_with_changes);
707 if (shutdown_on_io_) 707 if (shutdown_on_io_)
708 status = SYNC_STATUS_ABORT; 708 status = SYNC_STATUS_ABORT;
709 if (status != SYNC_STATUS_OK) { 709 if (status != SYNC_STATUS_OK) {
710 DidInitialize(source_url, file_system_context, status); 710 DidInitialize(source_url, file_system_context, status);
711 return; 711 return;
712 } 712 }
713 713
714 SyncFileSystemBackend* backend = 714 SyncFileSystemBackend* backend =
715 SyncFileSystemBackend::GetBackend(file_system_context); 715 SyncFileSystemBackend::GetBackend(file_system_context);
716 DCHECK(backend); 716 DCHECK(backend);
717 backend->SetLocalFileChangeTracker(std::move(*tracker_ptr)); 717 backend->SetLocalFileChangeTracker(std::move(*tracker_ptr));
718 718
719 origins_with_pending_changes_.insert(origins_with_changes->begin(), 719 origins_with_pending_changes_.insert(origins_with_changes->begin(),
720 origins_with_changes->end()); 720 origins_with_changes->end());
721 ScheduleNotifyChangesUpdatedOnIOThread(NoopClosure()); 721 ScheduleNotifyChangesUpdatedOnIOThread(NoopClosure());
722 722
723 InitializeFileSystemContextOnIOThread(source_url, file_system_context, 723 InitializeFileSystemContextOnIOThread(source_url, file_system_context,
724 GURL(), std::string(), 724 GURL(), std::string(),
725 base::File::FILE_OK); 725 base::File::FILE_OK);
726 } 726 }
727 727
728 void LocalFileSyncContext::DidInitialize( 728 void LocalFileSyncContext::DidInitialize(
729 const GURL& source_url, 729 const GURL& source_url,
730 FileSystemContext* file_system_context, 730 FileSystemContext* file_system_context,
731 SyncStatusCode status) { 731 SyncStatusCode status) {
732 if (!ui_task_runner_->RunsTasksOnCurrentThread()) { 732 if (!ui_task_runner_->RunsTasksInCurrentSequence()) {
733 ui_task_runner_->PostTask( 733 ui_task_runner_->PostTask(
734 FROM_HERE, 734 FROM_HERE,
735 base::BindOnce(&LocalFileSyncContext::DidInitialize, this, source_url, 735 base::BindOnce(&LocalFileSyncContext::DidInitialize, this, source_url,
736 base::RetainedRef(file_system_context), status)); 736 base::RetainedRef(file_system_context), status));
737 return; 737 return;
738 } 738 }
739 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 739 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
740 DCHECK(!base::ContainsKey(file_system_contexts_, file_system_context)); 740 DCHECK(!base::ContainsKey(file_system_contexts_, file_system_context));
741 DCHECK(base::ContainsKey(pending_initialize_callbacks_, file_system_context)); 741 DCHECK(base::ContainsKey(pending_initialize_callbacks_, file_system_context));
742 742
743 SyncFileSystemBackend* backend = 743 SyncFileSystemBackend* backend =
744 SyncFileSystemBackend::GetBackend(file_system_context); 744 SyncFileSystemBackend::GetBackend(file_system_context);
745 DCHECK(backend); 745 DCHECK(backend);
746 DCHECK(backend->change_tracker()); 746 DCHECK(backend->change_tracker());
747 747
748 file_system_contexts_.insert(file_system_context); 748 file_system_contexts_.insert(file_system_context);
749 749
750 StatusCallbackQueue& callback_queue = 750 StatusCallbackQueue& callback_queue =
751 pending_initialize_callbacks_[file_system_context]; 751 pending_initialize_callbacks_[file_system_context];
752 for (StatusCallbackQueue::iterator iter = callback_queue.begin(); 752 for (StatusCallbackQueue::iterator iter = callback_queue.begin();
753 iter != callback_queue.end(); ++iter) { 753 iter != callback_queue.end(); ++iter) {
754 ui_task_runner_->PostTask(FROM_HERE, base::BindOnce(*iter, status)); 754 ui_task_runner_->PostTask(FROM_HERE, base::BindOnce(*iter, status));
755 } 755 }
756 pending_initialize_callbacks_.erase(file_system_context); 756 pending_initialize_callbacks_.erase(file_system_context);
757 } 757 }
758 758
759 std::unique_ptr<LocalFileSyncContext::FileSystemURLQueue> 759 std::unique_ptr<LocalFileSyncContext::FileSystemURLQueue>
760 LocalFileSyncContext::GetNextURLsForSyncOnFileThread( 760 LocalFileSyncContext::GetNextURLsForSyncOnFileThread(
761 FileSystemContext* file_system_context) { 761 FileSystemContext* file_system_context) {
762 DCHECK(file_system_context); 762 DCHECK(file_system_context);
763 DCHECK(file_system_context->default_file_task_runner()-> 763 DCHECK(file_system_context->default_file_task_runner()->
764 RunsTasksOnCurrentThread()); 764 RunsTasksInCurrentSequence());
765 SyncFileSystemBackend* backend = 765 SyncFileSystemBackend* backend =
766 SyncFileSystemBackend::GetBackend(file_system_context); 766 SyncFileSystemBackend::GetBackend(file_system_context);
767 DCHECK(backend); 767 DCHECK(backend);
768 DCHECK(backend->change_tracker()); 768 DCHECK(backend->change_tracker());
769 std::unique_ptr<FileSystemURLQueue> urls(new FileSystemURLQueue); 769 std::unique_ptr<FileSystemURLQueue> urls(new FileSystemURLQueue);
770 backend->change_tracker()->GetNextChangedURLs( 770 backend->change_tracker()->GetNextChangedURLs(
771 urls.get(), kMaxURLsToFetchForLocalSync); 771 urls.get(), kMaxURLsToFetchForLocalSync);
772 for (FileSystemURLQueue::iterator iter = urls->begin(); 772 for (FileSystemURLQueue::iterator iter = urls->begin();
773 iter != urls->end(); ++iter) 773 iter != urls->end(); ++iter)
774 backend->change_tracker()->DemoteChangesForURL(*iter); 774 backend->change_tracker()->DemoteChangesForURL(*iter);
775 775
776 return urls; 776 return urls;
777 } 777 }
778 778
779 void LocalFileSyncContext::TryPrepareForLocalSync( 779 void LocalFileSyncContext::TryPrepareForLocalSync(
780 FileSystemContext* file_system_context, 780 FileSystemContext* file_system_context,
781 const LocalFileSyncInfoCallback& callback, 781 const LocalFileSyncInfoCallback& callback,
782 std::unique_ptr<FileSystemURLQueue> urls) { 782 std::unique_ptr<FileSystemURLQueue> urls) {
783 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 783 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
784 DCHECK(urls); 784 DCHECK(urls);
785 785
786 if (shutdown_on_ui_) { 786 if (shutdown_on_ui_) {
787 callback.Run(SYNC_STATUS_ABORT, LocalFileSyncInfo(), storage::ScopedFile()); 787 callback.Run(SYNC_STATUS_ABORT, LocalFileSyncInfo(), storage::ScopedFile());
788 return; 788 return;
789 } 789 }
790 790
791 if (urls->empty()) { 791 if (urls->empty()) {
792 callback.Run(SYNC_STATUS_NO_CHANGE_TO_SYNC, 792 callback.Run(SYNC_STATUS_NO_CHANGE_TO_SYNC,
793 LocalFileSyncInfo(), 793 LocalFileSyncInfo(),
(...skipping 10 matching lines...) Expand all
804 base::Passed(&urls), callback)); 804 base::Passed(&urls), callback));
805 } 805 }
806 806
807 void LocalFileSyncContext::DidTryPrepareForLocalSync( 807 void LocalFileSyncContext::DidTryPrepareForLocalSync(
808 FileSystemContext* file_system_context, 808 FileSystemContext* file_system_context,
809 std::unique_ptr<FileSystemURLQueue> remaining_urls, 809 std::unique_ptr<FileSystemURLQueue> remaining_urls,
810 const LocalFileSyncInfoCallback& callback, 810 const LocalFileSyncInfoCallback& callback,
811 SyncStatusCode status, 811 SyncStatusCode status,
812 const LocalFileSyncInfo& sync_file_info, 812 const LocalFileSyncInfo& sync_file_info,
813 storage::ScopedFile snapshot) { 813 storage::ScopedFile snapshot) {
814 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 814 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
815 if (status != SYNC_STATUS_FILE_BUSY) { 815 if (status != SYNC_STATUS_FILE_BUSY) {
816 PromoteDemotedChangesForURLs(file_system_context, 816 PromoteDemotedChangesForURLs(file_system_context,
817 std::move(remaining_urls)); 817 std::move(remaining_urls));
818 callback.Run(status, sync_file_info, std::move(snapshot)); 818 callback.Run(status, sync_file_info, std::move(snapshot));
819 return; 819 return;
820 } 820 }
821 821
822 PromoteDemotedChangesForURL(file_system_context, sync_file_info.url); 822 PromoteDemotedChangesForURL(file_system_context, sync_file_info.url);
823 823
824 // Recursively call TryPrepareForLocalSync with remaining_urls. 824 // Recursively call TryPrepareForLocalSync with remaining_urls.
825 TryPrepareForLocalSync(file_system_context, callback, 825 TryPrepareForLocalSync(file_system_context, callback,
826 std::move(remaining_urls)); 826 std::move(remaining_urls));
827 } 827 }
828 828
829 void LocalFileSyncContext::PromoteDemotedChangesForURL( 829 void LocalFileSyncContext::PromoteDemotedChangesForURL(
830 FileSystemContext* file_system_context, 830 FileSystemContext* file_system_context,
831 const FileSystemURL& url) { 831 const FileSystemURL& url) {
832 DCHECK(file_system_context); 832 DCHECK(file_system_context);
833 if (!file_system_context->default_file_task_runner()-> 833 if (!file_system_context->default_file_task_runner()->
834 RunsTasksOnCurrentThread()) { 834 RunsTasksInCurrentSequence()) {
835 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 835 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
836 if (shutdown_on_ui_) 836 if (shutdown_on_ui_)
837 return; 837 return;
838 file_system_context->default_file_task_runner()->PostTask( 838 file_system_context->default_file_task_runner()->PostTask(
839 FROM_HERE, 839 FROM_HERE,
840 base::BindOnce(&LocalFileSyncContext::PromoteDemotedChangesForURL, this, 840 base::BindOnce(&LocalFileSyncContext::PromoteDemotedChangesForURL, this,
841 base::RetainedRef(file_system_context), url)); 841 base::RetainedRef(file_system_context), url));
842 return; 842 return;
843 } 843 }
844 844
845 SyncFileSystemBackend* backend = 845 SyncFileSystemBackend* backend =
846 SyncFileSystemBackend::GetBackend(file_system_context); 846 SyncFileSystemBackend::GetBackend(file_system_context);
847 DCHECK(backend); 847 DCHECK(backend);
848 DCHECK(backend->change_tracker()); 848 DCHECK(backend->change_tracker());
849 backend->change_tracker()->PromoteDemotedChangesForURL(url); 849 backend->change_tracker()->PromoteDemotedChangesForURL(url);
850 } 850 }
851 851
852 void LocalFileSyncContext::PromoteDemotedChangesForURLs( 852 void LocalFileSyncContext::PromoteDemotedChangesForURLs(
853 FileSystemContext* file_system_context, 853 FileSystemContext* file_system_context,
854 std::unique_ptr<FileSystemURLQueue> urls) { 854 std::unique_ptr<FileSystemURLQueue> urls) {
855 DCHECK(file_system_context); 855 DCHECK(file_system_context);
856 if (!file_system_context->default_file_task_runner()-> 856 if (!file_system_context->default_file_task_runner()->
857 RunsTasksOnCurrentThread()) { 857 RunsTasksInCurrentSequence()) {
858 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 858 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
859 if (shutdown_on_ui_) 859 if (shutdown_on_ui_)
860 return; 860 return;
861 file_system_context->default_file_task_runner()->PostTask( 861 file_system_context->default_file_task_runner()->PostTask(
862 FROM_HERE, 862 FROM_HERE,
863 base::BindOnce(&LocalFileSyncContext::PromoteDemotedChangesForURLs, 863 base::BindOnce(&LocalFileSyncContext::PromoteDemotedChangesForURLs,
864 this, base::RetainedRef(file_system_context), 864 this, base::RetainedRef(file_system_context),
865 base::Passed(&urls))); 865 base::Passed(&urls)));
866 return; 866 return;
867 } 867 }
868 868
869 for (FileSystemURLQueue::iterator iter = urls->begin(); 869 for (FileSystemURLQueue::iterator iter = urls->begin();
870 iter != urls->end(); ++iter) 870 iter != urls->end(); ++iter)
871 PromoteDemotedChangesForURL(file_system_context, *iter); 871 PromoteDemotedChangesForURL(file_system_context, *iter);
872 } 872 }
873 873
874 void LocalFileSyncContext::DidGetWritingStatusForSync( 874 void LocalFileSyncContext::DidGetWritingStatusForSync(
875 FileSystemContext* file_system_context, 875 FileSystemContext* file_system_context,
876 SyncStatusCode status, 876 SyncStatusCode status,
877 const FileSystemURL& url, 877 const FileSystemURL& url,
878 SyncMode sync_mode, 878 SyncMode sync_mode,
879 const LocalFileSyncInfoCallback& callback) { 879 const LocalFileSyncInfoCallback& callback) {
880 // This gets called on UI thread and relays the task on FILE thread. 880 // This gets called on UI thread and relays the task on FILE thread.
881 DCHECK(file_system_context); 881 DCHECK(file_system_context);
882 if (!file_system_context->default_file_task_runner()-> 882 if (!file_system_context->default_file_task_runner()->
883 RunsTasksOnCurrentThread()) { 883 RunsTasksInCurrentSequence()) {
884 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 884 DCHECK(ui_task_runner_->RunsTasksInCurrentSequence());
885 if (shutdown_on_ui_) { 885 if (shutdown_on_ui_) {
886 callback.Run( 886 callback.Run(
887 SYNC_STATUS_ABORT, LocalFileSyncInfo(), storage::ScopedFile()); 887 SYNC_STATUS_ABORT, LocalFileSyncInfo(), storage::ScopedFile());
888 return; 888 return;
889 } 889 }
890 file_system_context->default_file_task_runner()->PostTask( 890 file_system_context->default_file_task_runner()->PostTask(
891 FROM_HERE, 891 FROM_HERE,
892 base::BindOnce(&LocalFileSyncContext::DidGetWritingStatusForSync, this, 892 base::BindOnce(&LocalFileSyncContext::DidGetWritingStatusForSync, this,
893 base::RetainedRef(file_system_context), status, url, 893 base::RetainedRef(file_system_context), status, url,
894 sync_mode, callback)); 894 sync_mode, callback));
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 } 966 }
967 967
968 ui_task_runner_->PostTask(FROM_HERE, 968 ui_task_runner_->PostTask(FROM_HERE,
969 base::BindOnce(callback, status, sync_file_info, 969 base::BindOnce(callback, status, sync_file_info,
970 base::Passed(&snapshot))); 970 base::Passed(&snapshot)));
971 } 971 }
972 972
973 void LocalFileSyncContext::ClearSyncFlagOnIOThread( 973 void LocalFileSyncContext::ClearSyncFlagOnIOThread(
974 const FileSystemURL& url, 974 const FileSystemURL& url,
975 bool for_snapshot_sync) { 975 bool for_snapshot_sync) {
976 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 976 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
977 if (shutdown_on_io_) 977 if (shutdown_on_io_)
978 return; 978 return;
979 sync_status()->EndSyncing(url); 979 sync_status()->EndSyncing(url);
980 980
981 if (for_snapshot_sync) { 981 if (for_snapshot_sync) {
982 // The caller will hold shared lock on this one. 982 // The caller will hold shared lock on this one.
983 sync_status()->StartWriting(url); 983 sync_status()->StartWriting(url);
984 return; 984 return;
985 } 985 }
986 986
987 // Since a sync has finished the number of changes must have been updated. 987 // Since a sync has finished the number of changes must have been updated.
988 UpdateChangesForOrigin(url.origin(), NoopClosure()); 988 UpdateChangesForOrigin(url.origin(), NoopClosure());
989 } 989 }
990 990
991 void LocalFileSyncContext::FinalizeSnapshotSyncOnIOThread( 991 void LocalFileSyncContext::FinalizeSnapshotSyncOnIOThread(
992 const FileSystemURL& url) { 992 const FileSystemURL& url) {
993 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 993 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
994 if (shutdown_on_io_) 994 if (shutdown_on_io_)
995 return; 995 return;
996 sync_status()->EndWriting(url); 996 sync_status()->EndWriting(url);
997 997
998 // Since a sync has finished the number of changes must have been updated. 998 // Since a sync has finished the number of changes must have been updated.
999 UpdateChangesForOrigin(url.origin(), NoopClosure()); 999 UpdateChangesForOrigin(url.origin(), NoopClosure());
1000 } 1000 }
1001 1001
1002 void LocalFileSyncContext::DidApplyRemoteChange( 1002 void LocalFileSyncContext::DidApplyRemoteChange(
1003 const FileSystemURL& url, 1003 const FileSystemURL& url,
1004 const SyncStatusCallback& callback_on_ui, 1004 const SyncStatusCallback& callback_on_ui,
1005 base::File::Error file_error) { 1005 base::File::Error file_error) {
1006 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 1006 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
1007 root_delete_helper_.reset(); 1007 root_delete_helper_.reset();
1008 ui_task_runner_->PostTask( 1008 ui_task_runner_->PostTask(
1009 FROM_HERE, 1009 FROM_HERE,
1010 base::BindOnce(callback_on_ui, FileErrorToSyncStatusCode(file_error))); 1010 base::BindOnce(callback_on_ui, FileErrorToSyncStatusCode(file_error)));
1011 } 1011 }
1012 1012
1013 void LocalFileSyncContext::DidGetFileMetadata( 1013 void LocalFileSyncContext::DidGetFileMetadata(
1014 const SyncFileMetadataCallback& callback, 1014 const SyncFileMetadataCallback& callback,
1015 base::File::Error file_error, 1015 base::File::Error file_error,
1016 const base::File::Info& file_info) { 1016 const base::File::Info& file_info) {
1017 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 1017 DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
1018 SyncFileMetadata metadata; 1018 SyncFileMetadata metadata;
1019 if (file_error == base::File::FILE_OK) { 1019 if (file_error == base::File::FILE_OK) {
1020 metadata.file_type = file_info.is_directory ? 1020 metadata.file_type = file_info.is_directory ?
1021 SYNC_FILE_TYPE_DIRECTORY : SYNC_FILE_TYPE_FILE; 1021 SYNC_FILE_TYPE_DIRECTORY : SYNC_FILE_TYPE_FILE;
1022 metadata.size = file_info.size; 1022 metadata.size = file_info.size;
1023 metadata.last_modified = file_info.last_modified; 1023 metadata.last_modified = file_info.last_modified;
1024 } 1024 }
1025 ui_task_runner_->PostTask( 1025 ui_task_runner_->PostTask(
1026 FROM_HERE, base::BindOnce(callback, FileErrorToSyncStatusCode(file_error), 1026 FROM_HERE, base::BindOnce(callback, FileErrorToSyncStatusCode(file_error),
1027 metadata)); 1027 metadata));
(...skipping 16 matching lines...) Expand all
1044 return; 1044 return;
1045 } 1045 }
1046 1046
1047 FileSystemURL url_for_sync = CreateSyncableFileSystemURLForSync( 1047 FileSystemURL url_for_sync = CreateSyncableFileSystemURLForSync(
1048 file_system_context, dest_url); 1048 file_system_context, dest_url);
1049 file_system_context->operation_runner()->CopyInForeignFile( 1049 file_system_context->operation_runner()->CopyInForeignFile(
1050 local_path, url_for_sync, callback); 1050 local_path, url_for_sync, callback);
1051 } 1051 }
1052 1052
1053 } // namespace sync_file_system 1053 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698