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

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

Issue 1815363002: Add RetainedRef uses where needed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 callback_queue.push_back(callback); 79 callback_queue.push_back(callback);
80 if (callback_queue.size() > 1) 80 if (callback_queue.size() > 1)
81 return; 81 return;
82 82
83 // The sync service always expects the origin (app) is initialized 83 // The sync service always expects the origin (app) is initialized
84 // for writable way (even when MaybeInitializeFileSystemContext is called 84 // for writable way (even when MaybeInitializeFileSystemContext is called
85 // from read-only OpenFileSystem), so open the filesystem with 85 // from read-only OpenFileSystem), so open the filesystem with
86 // CREATE_IF_NONEXISTENT here. 86 // CREATE_IF_NONEXISTENT here.
87 storage::FileSystemBackend::OpenFileSystemCallback open_filesystem_callback = 87 storage::FileSystemBackend::OpenFileSystemCallback open_filesystem_callback =
88 base::Bind(&LocalFileSyncContext::InitializeFileSystemContextOnIOThread, 88 base::Bind(&LocalFileSyncContext::InitializeFileSystemContextOnIOThread,
89 this, 89 this, source_url, base::RetainedRef(file_system_context));
90 source_url,
91 make_scoped_refptr(file_system_context));
92 io_task_runner_->PostTask( 90 io_task_runner_->PostTask(
93 FROM_HERE, 91 FROM_HERE,
94 base::Bind(&storage::SandboxFileSystemBackendDelegate::OpenFileSystem, 92 base::Bind(&storage::SandboxFileSystemBackendDelegate::OpenFileSystem,
95 base::Unretained(file_system_context->sandbox_delegate()), 93 base::Unretained(file_system_context->sandbox_delegate()),
96 source_url, 94 source_url,
97 storage::kFileSystemTypeSyncable, 95 storage::kFileSystemTypeSyncable,
98 storage::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT, 96 storage::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT,
99 open_filesystem_callback, 97 open_filesystem_callback,
100 GURL())); 98 GURL()));
101 } 99 }
102 100
103 void LocalFileSyncContext::ShutdownOnUIThread() { 101 void LocalFileSyncContext::ShutdownOnUIThread() {
104 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 102 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
105 shutdown_on_ui_ = true; 103 shutdown_on_ui_ = true;
106 io_task_runner_->PostTask( 104 io_task_runner_->PostTask(
107 FROM_HERE, 105 FROM_HERE,
108 base::Bind(&LocalFileSyncContext::ShutdownOnIOThread, this)); 106 base::Bind(&LocalFileSyncContext::ShutdownOnIOThread, this));
109 } 107 }
110 108
111 void LocalFileSyncContext::GetFileForLocalSync( 109 void LocalFileSyncContext::GetFileForLocalSync(
112 FileSystemContext* file_system_context, 110 FileSystemContext* file_system_context,
113 const LocalFileSyncInfoCallback& callback) { 111 const LocalFileSyncInfoCallback& callback) {
114 DCHECK(file_system_context); 112 DCHECK(file_system_context);
115 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 113 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
116 114
117 base::PostTaskAndReplyWithResult( 115 base::PostTaskAndReplyWithResult(
118 file_system_context->default_file_task_runner(), 116 file_system_context->default_file_task_runner(), FROM_HERE,
119 FROM_HERE, 117 base::Bind(&LocalFileSyncContext::GetNextURLsForSyncOnFileThread, this,
120 base::Bind(&LocalFileSyncContext::GetNextURLsForSyncOnFileThread, 118 base::RetainedRef(file_system_context)),
121 this, make_scoped_refptr(file_system_context)), 119 base::Bind(&LocalFileSyncContext::TryPrepareForLocalSync, this,
122 base::Bind(&LocalFileSyncContext::TryPrepareForLocalSync, 120 base::RetainedRef(file_system_context), callback));
123 this, make_scoped_refptr(file_system_context), callback));
124 } 121 }
125 122
126 void LocalFileSyncContext::ClearChangesForURL( 123 void LocalFileSyncContext::ClearChangesForURL(
127 FileSystemContext* file_system_context, 124 FileSystemContext* file_system_context,
128 const FileSystemURL& url, 125 const FileSystemURL& url,
129 const base::Closure& done_callback) { 126 const base::Closure& done_callback) {
130 // 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.
131 DCHECK(file_system_context); 128 DCHECK(file_system_context);
132 if (!file_system_context->default_file_task_runner()-> 129 if (!file_system_context->default_file_task_runner()->
133 RunsTasksOnCurrentThread()) { 130 RunsTasksOnCurrentThread()) {
134 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 131 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
135 file_system_context->default_file_task_runner()->PostTask( 132 file_system_context->default_file_task_runner()->PostTask(
136 FROM_HERE, 133 FROM_HERE,
137 base::Bind(&LocalFileSyncContext::ClearChangesForURL, 134 base::Bind(&LocalFileSyncContext::ClearChangesForURL, this,
138 this, make_scoped_refptr(file_system_context), 135 base::RetainedRef(file_system_context), url, done_callback));
139 url, done_callback));
140 return; 136 return;
141 } 137 }
142 138
143 SyncFileSystemBackend* backend = 139 SyncFileSystemBackend* backend =
144 SyncFileSystemBackend::GetBackend(file_system_context); 140 SyncFileSystemBackend::GetBackend(file_system_context);
145 DCHECK(backend); 141 DCHECK(backend);
146 DCHECK(backend->change_tracker()); 142 DCHECK(backend->change_tracker());
147 backend->change_tracker()->ClearChangesForURL(url); 143 backend->change_tracker()->ClearChangesForURL(url);
148 144
149 // Call the completion callback on UI thread. 145 // Call the completion callback on UI thread.
150 ui_task_runner_->PostTask(FROM_HERE, done_callback); 146 ui_task_runner_->PostTask(FROM_HERE, done_callback);
151 } 147 }
152 148
153 void LocalFileSyncContext::FinalizeSnapshotSync( 149 void LocalFileSyncContext::FinalizeSnapshotSync(
154 storage::FileSystemContext* file_system_context, 150 storage::FileSystemContext* file_system_context,
155 const storage::FileSystemURL& url, 151 const storage::FileSystemURL& url,
156 SyncStatusCode sync_finish_status, 152 SyncStatusCode sync_finish_status,
157 const base::Closure& done_callback) { 153 const base::Closure& done_callback) {
158 DCHECK(file_system_context); 154 DCHECK(file_system_context);
159 DCHECK(url.is_valid()); 155 DCHECK(url.is_valid());
160 if (!file_system_context->default_file_task_runner()-> 156 if (!file_system_context->default_file_task_runner()->
161 RunsTasksOnCurrentThread()) { 157 RunsTasksOnCurrentThread()) {
162 file_system_context->default_file_task_runner()->PostTask( 158 file_system_context->default_file_task_runner()->PostTask(
163 FROM_HERE, 159 FROM_HERE, base::Bind(&LocalFileSyncContext::FinalizeSnapshotSync, this,
164 base::Bind(&LocalFileSyncContext::FinalizeSnapshotSync, 160 base::RetainedRef(file_system_context), url,
165 this, make_scoped_refptr(file_system_context), 161 sync_finish_status, done_callback));
166 url, sync_finish_status, done_callback));
167 return; 162 return;
168 } 163 }
169 164
170 SyncFileSystemBackend* backend = 165 SyncFileSystemBackend* backend =
171 SyncFileSystemBackend::GetBackend(file_system_context); 166 SyncFileSystemBackend::GetBackend(file_system_context);
172 DCHECK(backend); 167 DCHECK(backend);
173 DCHECK(backend->change_tracker()); 168 DCHECK(backend->change_tracker());
174 169
175 if (sync_finish_status == SYNC_STATUS_OK || 170 if (sync_finish_status == SYNC_STATUS_OK ||
176 sync_finish_status == SYNC_STATUS_HAS_CONFLICT) { 171 sync_finish_status == SYNC_STATUS_HAS_CONFLICT) {
(...skipping 21 matching lines...) Expand all
198 const base::Closure& done_callback) { 193 const base::Closure& done_callback) {
199 DCHECK(file_system_context); 194 DCHECK(file_system_context);
200 if (!url.is_valid()) { 195 if (!url.is_valid()) {
201 done_callback.Run(); 196 done_callback.Run();
202 return; 197 return;
203 } 198 }
204 199
205 if (clear_local_changes) { 200 if (clear_local_changes) {
206 ClearChangesForURL(file_system_context, url, 201 ClearChangesForURL(file_system_context, url,
207 base::Bind(&LocalFileSyncContext::FinalizeExclusiveSync, 202 base::Bind(&LocalFileSyncContext::FinalizeExclusiveSync,
208 this, make_scoped_refptr(file_system_context), 203 this, base::RetainedRef(file_system_context),
209 url, false, done_callback)); 204 url, false, done_callback));
210 return; 205 return;
211 } 206 }
212 207
213 io_task_runner_->PostTask( 208 io_task_runner_->PostTask(
214 FROM_HERE, 209 FROM_HERE,
215 base::Bind(&LocalFileSyncContext::ClearSyncFlagOnIOThread, 210 base::Bind(&LocalFileSyncContext::ClearSyncFlagOnIOThread,
216 this, url, false /* for_snapshot_sync */)); 211 this, url, false /* for_snapshot_sync */));
217 212
218 done_callback.Run(); 213 done_callback.Run();
219 } 214 }
220 215
221 void LocalFileSyncContext::PrepareForSync( 216 void LocalFileSyncContext::PrepareForSync(
222 FileSystemContext* file_system_context, 217 FileSystemContext* file_system_context,
223 const FileSystemURL& url, 218 const FileSystemURL& url,
224 SyncMode sync_mode, 219 SyncMode sync_mode,
225 const LocalFileSyncInfoCallback& callback) { 220 const LocalFileSyncInfoCallback& callback) {
226 // 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.
227 if (!io_task_runner_->RunsTasksOnCurrentThread()) { 222 if (!io_task_runner_->RunsTasksOnCurrentThread()) {
228 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 223 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
229 io_task_runner_->PostTask( 224 io_task_runner_->PostTask(
230 FROM_HERE, 225 FROM_HERE, base::Bind(&LocalFileSyncContext::PrepareForSync, this,
231 base::Bind(&LocalFileSyncContext::PrepareForSync, this, 226 base::RetainedRef(file_system_context), url,
232 make_scoped_refptr(file_system_context), url, 227 sync_mode, callback));
233 sync_mode, callback));
234 return; 228 return;
235 } 229 }
236 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 230 DCHECK(io_task_runner_->RunsTasksOnCurrentThread());
237 const bool syncable = sync_status()->IsSyncable(url); 231 const bool syncable = sync_status()->IsSyncable(url);
238 // Disable writing if it's ready to be synced. 232 // Disable writing if it's ready to be synced.
239 if (syncable) 233 if (syncable)
240 sync_status()->StartSyncing(url); 234 sync_status()->StartSyncing(url);
241 ui_task_runner_->PostTask( 235 ui_task_runner_->PostTask(
242 FROM_HERE, 236 FROM_HERE, base::Bind(&LocalFileSyncContext::DidGetWritingStatusForSync,
243 base::Bind(&LocalFileSyncContext::DidGetWritingStatusForSync, 237 this, base::RetainedRef(file_system_context),
244 this, make_scoped_refptr(file_system_context), 238 syncable ? SYNC_STATUS_OK : SYNC_STATUS_FILE_BUSY,
245 syncable ? SYNC_STATUS_OK : 239 url, sync_mode, callback));
246 SYNC_STATUS_FILE_BUSY,
247 url, sync_mode, callback));
248 } 240 }
249 241
250 void LocalFileSyncContext::RegisterURLForWaitingSync( 242 void LocalFileSyncContext::RegisterURLForWaitingSync(
251 const FileSystemURL& url, 243 const FileSystemURL& url,
252 const base::Closure& on_syncable_callback) { 244 const base::Closure& on_syncable_callback) {
253 // This is initially called on UI thread and to be relayed to IO thread. 245 // This is initially called on UI thread and to be relayed to IO thread.
254 if (!io_task_runner_->RunsTasksOnCurrentThread()) { 246 if (!io_task_runner_->RunsTasksOnCurrentThread()) {
255 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 247 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
256 io_task_runner_->PostTask( 248 io_task_runner_->PostTask(
257 FROM_HERE, 249 FROM_HERE,
(...skipping 15 matching lines...) Expand all
273 265
274 void LocalFileSyncContext::ApplyRemoteChange( 266 void LocalFileSyncContext::ApplyRemoteChange(
275 FileSystemContext* file_system_context, 267 FileSystemContext* file_system_context,
276 const FileChange& change, 268 const FileChange& change,
277 const base::FilePath& local_path, 269 const base::FilePath& local_path,
278 const FileSystemURL& url, 270 const FileSystemURL& url,
279 const SyncStatusCallback& callback) { 271 const SyncStatusCallback& callback) {
280 if (!io_task_runner_->RunsTasksOnCurrentThread()) { 272 if (!io_task_runner_->RunsTasksOnCurrentThread()) {
281 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 273 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
282 io_task_runner_->PostTask( 274 io_task_runner_->PostTask(
283 FROM_HERE, 275 FROM_HERE, base::Bind(&LocalFileSyncContext::ApplyRemoteChange, this,
284 base::Bind(&LocalFileSyncContext::ApplyRemoteChange, this, 276 base::RetainedRef(file_system_context), change,
285 make_scoped_refptr(file_system_context), 277 local_path, url, callback));
286 change, local_path, url, callback));
287 return; 278 return;
288 } 279 }
289 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 280 DCHECK(io_task_runner_->RunsTasksOnCurrentThread());
290 DCHECK(!sync_status()->IsWritable(url)); 281 DCHECK(!sync_status()->IsWritable(url));
291 DCHECK(!sync_status()->IsWriting(url)); 282 DCHECK(!sync_status()->IsWriting(url));
292 283
293 FileSystemOperation::StatusCallback operation_callback; 284 FileSystemOperation::StatusCallback operation_callback;
294 switch (change.change()) { 285 switch (change.change()) {
295 case FileChange::FILE_CHANGE_DELETE: 286 case FileChange::FILE_CHANGE_DELETE:
296 HandleRemoteDelete(file_system_context, url, callback); 287 HandleRemoteDelete(file_system_context, url, callback);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 330
340 if (storage::VirtualPath::IsRootPath(url.path())) { 331 if (storage::VirtualPath::IsRootPath(url.path())) {
341 DidApplyRemoteChange(url, callback, base::File::FILE_OK); 332 DidApplyRemoteChange(url, callback, base::File::FILE_OK);
342 return; 333 return;
343 } 334 }
344 335
345 file_system_context->operation_runner()->Remove( 336 file_system_context->operation_runner()->Remove(
346 url_for_sync, true /* recursive */, 337 url_for_sync, true /* recursive */,
347 base::Bind( 338 base::Bind(
348 &LocalFileSyncContext::DidRemoveExistingEntryForRemoteAddOrUpdate, 339 &LocalFileSyncContext::DidRemoveExistingEntryForRemoteAddOrUpdate,
349 this, 340 this, base::RetainedRef(file_system_context), change, local_path, url,
350 make_scoped_refptr(file_system_context),
351 change,
352 local_path,
353 url,
354 callback)); 341 callback));
355 } 342 }
356 343
357 void LocalFileSyncContext::DidRemoveExistingEntryForRemoteAddOrUpdate( 344 void LocalFileSyncContext::DidRemoveExistingEntryForRemoteAddOrUpdate(
358 FileSystemContext* file_system_context, 345 FileSystemContext* file_system_context,
359 const FileChange& change, 346 const FileChange& change,
360 const base::FilePath& local_path, 347 const base::FilePath& local_path,
361 const FileSystemURL& url, 348 const FileSystemURL& url,
362 const SyncStatusCallback& callback, 349 const SyncStatusCallback& callback,
363 base::File::Error error) { 350 base::File::Error error) {
(...skipping 23 matching lines...) Expand all
387 storage::VirtualPath::DirName(dir_path) == dir_path) { 374 storage::VirtualPath::DirName(dir_path) == dir_path) {
388 // Copying into the root directory. 375 // Copying into the root directory.
389 file_system_context->operation_runner()->CopyInForeignFile( 376 file_system_context->operation_runner()->CopyInForeignFile(
390 local_path, url_for_sync, operation_callback); 377 local_path, url_for_sync, operation_callback);
391 } else { 378 } else {
392 FileSystemURL dir_url = file_system_context->CreateCrackedFileSystemURL( 379 FileSystemURL dir_url = file_system_context->CreateCrackedFileSystemURL(
393 url_for_sync.origin(), 380 url_for_sync.origin(),
394 url_for_sync.mount_type(), 381 url_for_sync.mount_type(),
395 storage::VirtualPath::DirName(url_for_sync.virtual_path())); 382 storage::VirtualPath::DirName(url_for_sync.virtual_path()));
396 file_system_context->operation_runner()->CreateDirectory( 383 file_system_context->operation_runner()->CreateDirectory(
397 dir_url, 384 dir_url, false /* exclusive */, true /* recursive */,
398 false /* exclusive */, 385 base::Bind(&LocalFileSyncContext::DidCreateDirectoryForCopyIn, this,
399 true /* recursive */, 386 base::RetainedRef(file_system_context), local_path, url,
400 base::Bind(&LocalFileSyncContext::DidCreateDirectoryForCopyIn,
401 this,
402 make_scoped_refptr(file_system_context),
403 local_path,
404 url,
405 operation_callback)); 387 operation_callback));
406 } 388 }
407 break; 389 break;
408 } 390 }
409 case SYNC_FILE_TYPE_DIRECTORY: 391 case SYNC_FILE_TYPE_DIRECTORY:
410 file_system_context->operation_runner()->CreateDirectory( 392 file_system_context->operation_runner()->CreateDirectory(
411 url_for_sync, false /* exclusive */, true /* recursive */, 393 url_for_sync, false /* exclusive */, true /* recursive */,
412 operation_callback); 394 operation_callback);
413 break; 395 break;
414 case SYNC_FILE_TYPE_UNKNOWN: 396 case SYNC_FILE_TYPE_UNKNOWN:
415 NOTREACHED() << "File type unknown for ADD_OR_UPDATE change"; 397 NOTREACHED() << "File type unknown for ADD_OR_UPDATE change";
416 } 398 }
417 } 399 }
418 400
419 void LocalFileSyncContext::RecordFakeLocalChange( 401 void LocalFileSyncContext::RecordFakeLocalChange(
420 FileSystemContext* file_system_context, 402 FileSystemContext* file_system_context,
421 const FileSystemURL& url, 403 const FileSystemURL& url,
422 const FileChange& change, 404 const FileChange& change,
423 const SyncStatusCallback& callback) { 405 const SyncStatusCallback& callback) {
424 // This is called on UI thread and to be relayed to FILE thread. 406 // This is called on UI thread and to be relayed to FILE thread.
425 DCHECK(file_system_context); 407 DCHECK(file_system_context);
426 if (!file_system_context->default_file_task_runner()-> 408 if (!file_system_context->default_file_task_runner()->
427 RunsTasksOnCurrentThread()) { 409 RunsTasksOnCurrentThread()) {
428 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 410 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
429 file_system_context->default_file_task_runner()->PostTask( 411 file_system_context->default_file_task_runner()->PostTask(
430 FROM_HERE, 412 FROM_HERE, base::Bind(&LocalFileSyncContext::RecordFakeLocalChange,
431 base::Bind(&LocalFileSyncContext::RecordFakeLocalChange, 413 this, base::RetainedRef(file_system_context), url,
432 this, make_scoped_refptr(file_system_context), 414 change, callback));
433 url, change, callback));
434 return; 415 return;
435 } 416 }
436 417
437 SyncFileSystemBackend* backend = 418 SyncFileSystemBackend* backend =
438 SyncFileSystemBackend::GetBackend(file_system_context); 419 SyncFileSystemBackend::GetBackend(file_system_context);
439 DCHECK(backend); 420 DCHECK(backend);
440 DCHECK(backend->change_tracker()); 421 DCHECK(backend->change_tracker());
441 backend->change_tracker()->MarkDirtyOnDatabase(url); 422 backend->change_tracker()->MarkDirtyOnDatabase(url);
442 backend->change_tracker()->RecordChange(url, change); 423 backend->change_tracker()->RecordChange(url, change);
443 424
444 // Fire the callback on UI thread. 425 // Fire the callback on UI thread.
445 ui_task_runner_->PostTask(FROM_HERE, 426 ui_task_runner_->PostTask(FROM_HERE,
446 base::Bind(callback, 427 base::Bind(callback,
447 SYNC_STATUS_OK)); 428 SYNC_STATUS_OK));
448 } 429 }
449 430
450 void LocalFileSyncContext::GetFileMetadata( 431 void LocalFileSyncContext::GetFileMetadata(
451 FileSystemContext* file_system_context, 432 FileSystemContext* file_system_context,
452 const FileSystemURL& url, 433 const FileSystemURL& url,
453 const SyncFileMetadataCallback& callback) { 434 const SyncFileMetadataCallback& callback) {
454 // 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.
455 if (!io_task_runner_->RunsTasksOnCurrentThread()) { 436 if (!io_task_runner_->RunsTasksOnCurrentThread()) {
456 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 437 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
457 io_task_runner_->PostTask( 438 io_task_runner_->PostTask(
458 FROM_HERE, 439 FROM_HERE,
459 base::Bind(&LocalFileSyncContext::GetFileMetadata, this, 440 base::Bind(&LocalFileSyncContext::GetFileMetadata, this,
460 make_scoped_refptr(file_system_context), url, callback)); 441 base::RetainedRef(file_system_context), url, callback));
461 return; 442 return;
462 } 443 }
463 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); 444 DCHECK(io_task_runner_->RunsTasksOnCurrentThread());
464 445
465 FileSystemURL url_for_sync = CreateSyncableFileSystemURLForSync( 446 FileSystemURL url_for_sync = CreateSyncableFileSystemURLForSync(
466 file_system_context, url); 447 file_system_context, url);
467 file_system_context->operation_runner()->GetMetadata( 448 file_system_context->operation_runner()->GetMetadata(
468 url_for_sync, FileSystemOperation::GET_METADATA_FIELD_IS_DIRECTORY | 449 url_for_sync, FileSystemOperation::GET_METADATA_FIELD_IS_DIRECTORY |
469 FileSystemOperation::GET_METADATA_FIELD_SIZE | 450 FileSystemOperation::GET_METADATA_FIELD_SIZE |
470 FileSystemOperation::GET_METADATA_FIELD_LAST_MODIFIED, 451 FileSystemOperation::GET_METADATA_FIELD_LAST_MODIFIED,
471 base::Bind(&LocalFileSyncContext::DidGetFileMetadata, this, callback)); 452 base::Bind(&LocalFileSyncContext::DidGetFileMetadata, this, callback));
472 } 453 }
473 454
474 void LocalFileSyncContext::HasPendingLocalChanges( 455 void LocalFileSyncContext::HasPendingLocalChanges(
475 FileSystemContext* file_system_context, 456 FileSystemContext* file_system_context,
476 const FileSystemURL& url, 457 const FileSystemURL& url,
477 const HasPendingLocalChangeCallback& callback) { 458 const HasPendingLocalChangeCallback& callback) {
478 // 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.
479 DCHECK(file_system_context); 460 DCHECK(file_system_context);
480 if (!file_system_context->default_file_task_runner()-> 461 if (!file_system_context->default_file_task_runner()->
481 RunsTasksOnCurrentThread()) { 462 RunsTasksOnCurrentThread()) {
482 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 463 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
483 file_system_context->default_file_task_runner()->PostTask( 464 file_system_context->default_file_task_runner()->PostTask(
484 FROM_HERE, 465 FROM_HERE,
485 base::Bind(&LocalFileSyncContext::HasPendingLocalChanges, 466 base::Bind(&LocalFileSyncContext::HasPendingLocalChanges, this,
486 this, make_scoped_refptr(file_system_context), 467 base::RetainedRef(file_system_context), url, callback));
487 url, callback));
488 return; 468 return;
489 } 469 }
490 470
491 SyncFileSystemBackend* backend = 471 SyncFileSystemBackend* backend =
492 SyncFileSystemBackend::GetBackend(file_system_context); 472 SyncFileSystemBackend::GetBackend(file_system_context);
493 DCHECK(backend); 473 DCHECK(backend);
494 DCHECK(backend->change_tracker()); 474 DCHECK(backend->change_tracker());
495 FileChangeList changes; 475 FileChangeList changes;
496 backend->change_tracker()->GetChangesForURL(url, &changes); 476 backend->change_tracker()->GetChangesForURL(url, &changes);
497 477
498 // Fire the callback on UI thread. 478 // Fire the callback on UI thread.
499 ui_task_runner_->PostTask(FROM_HERE, 479 ui_task_runner_->PostTask(FROM_HERE,
500 base::Bind(callback, 480 base::Bind(callback,
501 SYNC_STATUS_OK, 481 SYNC_STATUS_OK,
502 !changes.empty())); 482 !changes.empty()));
503 } 483 }
504 484
505 void LocalFileSyncContext::PromoteDemotedChanges( 485 void LocalFileSyncContext::PromoteDemotedChanges(
506 const GURL& origin, 486 const GURL& origin,
507 storage::FileSystemContext* file_system_context, 487 storage::FileSystemContext* file_system_context,
508 const base::Closure& callback) { 488 const base::Closure& callback) {
509 // This is initially called on UI thread and to be relayed to FILE thread. 489 // This is initially called on UI thread and to be relayed to FILE thread.
510 DCHECK(file_system_context); 490 DCHECK(file_system_context);
511 if (!file_system_context->default_file_task_runner()-> 491 if (!file_system_context->default_file_task_runner()->
512 RunsTasksOnCurrentThread()) { 492 RunsTasksOnCurrentThread()) {
513 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 493 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
514 file_system_context->default_file_task_runner()->PostTask( 494 file_system_context->default_file_task_runner()->PostTask(
515 FROM_HERE, 495 FROM_HERE,
516 base::Bind(&LocalFileSyncContext::PromoteDemotedChanges, 496 base::Bind(&LocalFileSyncContext::PromoteDemotedChanges, this, origin,
517 this, origin, make_scoped_refptr(file_system_context), 497 base::RetainedRef(file_system_context), callback));
518 callback));
519 return; 498 return;
520 } 499 }
521 500
522 SyncFileSystemBackend* backend = 501 SyncFileSystemBackend* backend =
523 SyncFileSystemBackend::GetBackend(file_system_context); 502 SyncFileSystemBackend::GetBackend(file_system_context);
524 DCHECK(backend); 503 DCHECK(backend);
525 DCHECK(backend->change_tracker()); 504 DCHECK(backend->change_tracker());
526 if (!backend->change_tracker()->PromoteDemotedChanges()) { 505 if (!backend->change_tracker()->PromoteDemotedChanges()) {
527 ui_task_runner_->PostTask(FROM_HERE, callback); 506 ui_task_runner_->PostTask(FROM_HERE, callback);
528 return; 507 return;
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 SyncFileSystemBackend* backend = 637 SyncFileSystemBackend* backend =
659 SyncFileSystemBackend::GetBackend(file_system_context); 638 SyncFileSystemBackend::GetBackend(file_system_context);
660 DCHECK(backend); 639 DCHECK(backend);
661 if (!backend->change_tracker()) { 640 if (!backend->change_tracker()) {
662 // Create and initialize LocalFileChangeTracker and call back this method 641 // Create and initialize LocalFileChangeTracker and call back this method
663 // later again. 642 // later again.
664 std::set<GURL>* origins_with_changes = new std::set<GURL>; 643 std::set<GURL>* origins_with_changes = new std::set<GURL>;
665 scoped_ptr<LocalFileChangeTracker>* tracker_ptr( 644 scoped_ptr<LocalFileChangeTracker>* tracker_ptr(
666 new scoped_ptr<LocalFileChangeTracker>); 645 new scoped_ptr<LocalFileChangeTracker>);
667 base::PostTaskAndReplyWithResult( 646 base::PostTaskAndReplyWithResult(
668 file_system_context->default_file_task_runner(), 647 file_system_context->default_file_task_runner(), FROM_HERE,
669 FROM_HERE,
670 base::Bind(&LocalFileSyncContext::InitializeChangeTrackerOnFileThread, 648 base::Bind(&LocalFileSyncContext::InitializeChangeTrackerOnFileThread,
671 this, tracker_ptr, 649 this, tracker_ptr, base::RetainedRef(file_system_context),
672 make_scoped_refptr(file_system_context),
673 origins_with_changes), 650 origins_with_changes),
674 base::Bind(&LocalFileSyncContext::DidInitializeChangeTrackerOnIOThread, 651 base::Bind(&LocalFileSyncContext::DidInitializeChangeTrackerOnIOThread,
675 this, base::Owned(tracker_ptr), 652 this, base::Owned(tracker_ptr), source_url,
676 source_url, 653 base::RetainedRef(file_system_context),
677 make_scoped_refptr(file_system_context),
678 base::Owned(origins_with_changes))); 654 base::Owned(origins_with_changes)));
679 return; 655 return;
680 } 656 }
681 if (!operation_runner_) { 657 if (!operation_runner_) {
682 DCHECK(!sync_status_); 658 DCHECK(!sync_status_);
683 DCHECK(!timer_on_io_); 659 DCHECK(!timer_on_io_);
684 sync_status_.reset(new LocalFileSyncStatus); 660 sync_status_.reset(new LocalFileSyncStatus);
685 timer_on_io_.reset(new base::OneShotTimer); 661 timer_on_io_.reset(new base::OneShotTimer);
686 operation_runner_.reset(new SyncableFileOperationRunner( 662 operation_runner_.reset(new SyncableFileOperationRunner(
687 kMaxConcurrentSyncableOperation, 663 kMaxConcurrentSyncableOperation,
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
752 base::File::FILE_OK); 728 base::File::FILE_OK);
753 } 729 }
754 730
755 void LocalFileSyncContext::DidInitialize( 731 void LocalFileSyncContext::DidInitialize(
756 const GURL& source_url, 732 const GURL& source_url,
757 FileSystemContext* file_system_context, 733 FileSystemContext* file_system_context,
758 SyncStatusCode status) { 734 SyncStatusCode status) {
759 if (!ui_task_runner_->RunsTasksOnCurrentThread()) { 735 if (!ui_task_runner_->RunsTasksOnCurrentThread()) {
760 ui_task_runner_->PostTask( 736 ui_task_runner_->PostTask(
761 FROM_HERE, 737 FROM_HERE,
762 base::Bind(&LocalFileSyncContext::DidInitialize, 738 base::Bind(&LocalFileSyncContext::DidInitialize, this, source_url,
763 this, source_url, 739 base::RetainedRef(file_system_context), status));
764 make_scoped_refptr(file_system_context), status));
765 return; 740 return;
766 } 741 }
767 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 742 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
768 DCHECK(!ContainsKey(file_system_contexts_, file_system_context)); 743 DCHECK(!ContainsKey(file_system_contexts_, file_system_context));
769 DCHECK(ContainsKey(pending_initialize_callbacks_, file_system_context)); 744 DCHECK(ContainsKey(pending_initialize_callbacks_, file_system_context));
770 745
771 SyncFileSystemBackend* backend = 746 SyncFileSystemBackend* backend =
772 SyncFileSystemBackend::GetBackend(file_system_context); 747 SyncFileSystemBackend::GetBackend(file_system_context);
773 DCHECK(backend); 748 DCHECK(backend);
774 DCHECK(backend->change_tracker()); 749 DCHECK(backend->change_tracker());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 if (urls->empty()) { 794 if (urls->empty()) {
820 callback.Run(SYNC_STATUS_NO_CHANGE_TO_SYNC, 795 callback.Run(SYNC_STATUS_NO_CHANGE_TO_SYNC,
821 LocalFileSyncInfo(), 796 LocalFileSyncInfo(),
822 storage::ScopedFile()); 797 storage::ScopedFile());
823 return; 798 return;
824 } 799 }
825 800
826 const FileSystemURL url = urls->front(); 801 const FileSystemURL url = urls->front();
827 urls->pop_front(); 802 urls->pop_front();
828 803
829 PrepareForSync( 804 PrepareForSync(file_system_context, url, SYNC_SNAPSHOT,
830 file_system_context, url, SYNC_SNAPSHOT, 805 base::Bind(&LocalFileSyncContext::DidTryPrepareForLocalSync,
831 base::Bind(&LocalFileSyncContext::DidTryPrepareForLocalSync, 806 this, base::RetainedRef(file_system_context),
832 this, make_scoped_refptr(file_system_context), 807 base::Passed(&urls), callback));
833 base::Passed(&urls), callback));
834 } 808 }
835 809
836 void LocalFileSyncContext::DidTryPrepareForLocalSync( 810 void LocalFileSyncContext::DidTryPrepareForLocalSync(
837 FileSystemContext* file_system_context, 811 FileSystemContext* file_system_context,
838 scoped_ptr<FileSystemURLQueue> remaining_urls, 812 scoped_ptr<FileSystemURLQueue> remaining_urls,
839 const LocalFileSyncInfoCallback& callback, 813 const LocalFileSyncInfoCallback& callback,
840 SyncStatusCode status, 814 SyncStatusCode status,
841 const LocalFileSyncInfo& sync_file_info, 815 const LocalFileSyncInfo& sync_file_info,
842 storage::ScopedFile snapshot) { 816 storage::ScopedFile snapshot) {
843 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 817 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
(...skipping 15 matching lines...) Expand all
859 FileSystemContext* file_system_context, 833 FileSystemContext* file_system_context,
860 const FileSystemURL& url) { 834 const FileSystemURL& url) {
861 DCHECK(file_system_context); 835 DCHECK(file_system_context);
862 if (!file_system_context->default_file_task_runner()-> 836 if (!file_system_context->default_file_task_runner()->
863 RunsTasksOnCurrentThread()) { 837 RunsTasksOnCurrentThread()) {
864 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 838 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
865 if (shutdown_on_ui_) 839 if (shutdown_on_ui_)
866 return; 840 return;
867 file_system_context->default_file_task_runner()->PostTask( 841 file_system_context->default_file_task_runner()->PostTask(
868 FROM_HERE, 842 FROM_HERE,
869 base::Bind(&LocalFileSyncContext::PromoteDemotedChangesForURL, 843 base::Bind(&LocalFileSyncContext::PromoteDemotedChangesForURL, this,
870 this, make_scoped_refptr(file_system_context), url)); 844 base::RetainedRef(file_system_context), url));
871 return; 845 return;
872 } 846 }
873 847
874 SyncFileSystemBackend* backend = 848 SyncFileSystemBackend* backend =
875 SyncFileSystemBackend::GetBackend(file_system_context); 849 SyncFileSystemBackend::GetBackend(file_system_context);
876 DCHECK(backend); 850 DCHECK(backend);
877 DCHECK(backend->change_tracker()); 851 DCHECK(backend->change_tracker());
878 backend->change_tracker()->PromoteDemotedChangesForURL(url); 852 backend->change_tracker()->PromoteDemotedChangesForURL(url);
879 } 853 }
880 854
881 void LocalFileSyncContext::PromoteDemotedChangesForURLs( 855 void LocalFileSyncContext::PromoteDemotedChangesForURLs(
882 FileSystemContext* file_system_context, 856 FileSystemContext* file_system_context,
883 scoped_ptr<FileSystemURLQueue> urls) { 857 scoped_ptr<FileSystemURLQueue> urls) {
884 DCHECK(file_system_context); 858 DCHECK(file_system_context);
885 if (!file_system_context->default_file_task_runner()-> 859 if (!file_system_context->default_file_task_runner()->
886 RunsTasksOnCurrentThread()) { 860 RunsTasksOnCurrentThread()) {
887 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 861 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
888 if (shutdown_on_ui_) 862 if (shutdown_on_ui_)
889 return; 863 return;
890 file_system_context->default_file_task_runner()->PostTask( 864 file_system_context->default_file_task_runner()->PostTask(
891 FROM_HERE, 865 FROM_HERE,
892 base::Bind(&LocalFileSyncContext::PromoteDemotedChangesForURLs, 866 base::Bind(&LocalFileSyncContext::PromoteDemotedChangesForURLs, this,
893 this, make_scoped_refptr(file_system_context), 867 base::RetainedRef(file_system_context),
894 base::Passed(&urls))); 868 base::Passed(&urls)));
895 return; 869 return;
896 } 870 }
897 871
898 for (FileSystemURLQueue::iterator iter = urls->begin(); 872 for (FileSystemURLQueue::iterator iter = urls->begin();
899 iter != urls->end(); ++iter) 873 iter != urls->end(); ++iter)
900 PromoteDemotedChangesForURL(file_system_context, *iter); 874 PromoteDemotedChangesForURL(file_system_context, *iter);
901 } 875 }
902 876
903 void LocalFileSyncContext::DidGetWritingStatusForSync( 877 void LocalFileSyncContext::DidGetWritingStatusForSync(
904 FileSystemContext* file_system_context, 878 FileSystemContext* file_system_context,
905 SyncStatusCode status, 879 SyncStatusCode status,
906 const FileSystemURL& url, 880 const FileSystemURL& url,
907 SyncMode sync_mode, 881 SyncMode sync_mode,
908 const LocalFileSyncInfoCallback& callback) { 882 const LocalFileSyncInfoCallback& callback) {
909 // This gets called on UI thread and relays the task on FILE thread. 883 // This gets called on UI thread and relays the task on FILE thread.
910 DCHECK(file_system_context); 884 DCHECK(file_system_context);
911 if (!file_system_context->default_file_task_runner()-> 885 if (!file_system_context->default_file_task_runner()->
912 RunsTasksOnCurrentThread()) { 886 RunsTasksOnCurrentThread()) {
913 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 887 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
914 if (shutdown_on_ui_) { 888 if (shutdown_on_ui_) {
915 callback.Run( 889 callback.Run(
916 SYNC_STATUS_ABORT, LocalFileSyncInfo(), storage::ScopedFile()); 890 SYNC_STATUS_ABORT, LocalFileSyncInfo(), storage::ScopedFile());
917 return; 891 return;
918 } 892 }
919 file_system_context->default_file_task_runner()->PostTask( 893 file_system_context->default_file_task_runner()->PostTask(
920 FROM_HERE, 894 FROM_HERE, base::Bind(&LocalFileSyncContext::DidGetWritingStatusForSync,
921 base::Bind(&LocalFileSyncContext::DidGetWritingStatusForSync, 895 this, base::RetainedRef(file_system_context),
922 this, make_scoped_refptr(file_system_context), 896 status, url, sync_mode, callback));
923 status, url, sync_mode, callback));
924 return; 897 return;
925 } 898 }
926 899
927 SyncFileSystemBackend* backend = 900 SyncFileSystemBackend* backend =
928 SyncFileSystemBackend::GetBackend(file_system_context); 901 SyncFileSystemBackend::GetBackend(file_system_context);
929 DCHECK(backend); 902 DCHECK(backend);
930 DCHECK(backend->change_tracker()); 903 DCHECK(backend->change_tracker());
931 FileChangeList changes; 904 FileChangeList changes;
932 backend->change_tracker()->GetChangesForURL(url, &changes); 905 backend->change_tracker()->GetChangesForURL(url, &changes);
933 906
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
1076 return; 1049 return;
1077 } 1050 }
1078 1051
1079 FileSystemURL url_for_sync = CreateSyncableFileSystemURLForSync( 1052 FileSystemURL url_for_sync = CreateSyncableFileSystemURLForSync(
1080 file_system_context, dest_url); 1053 file_system_context, dest_url);
1081 file_system_context->operation_runner()->CopyInForeignFile( 1054 file_system_context->operation_runner()->CopyInForeignFile(
1082 local_path, url_for_sync, callback); 1055 local_path, url_for_sync, callback);
1083 } 1056 }
1084 1057
1085 } // namespace sync_file_system 1058 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698