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

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.cc

Issue 337803005: [SyncFS] Replace callbacks with token in LocalToRemoteSyncer::UpdateRemoteMetadata (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/drive_backend/local_to_remote_syncer.h " 5 #include "chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.h "
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 24 matching lines...) Expand all
35 namespace { 35 namespace {
36 36
37 scoped_ptr<FileTracker> FindTrackerByID(MetadataDatabase* metadata_database, 37 scoped_ptr<FileTracker> FindTrackerByID(MetadataDatabase* metadata_database,
38 int64 tracker_id) { 38 int64 tracker_id) {
39 scoped_ptr<FileTracker> tracker(new FileTracker); 39 scoped_ptr<FileTracker> tracker(new FileTracker);
40 if (metadata_database->FindTrackerByTrackerID(tracker_id, tracker.get())) 40 if (metadata_database->FindTrackerByTrackerID(tracker_id, tracker.get()))
41 return tracker.Pass(); 41 return tracker.Pass();
42 return scoped_ptr<FileTracker>(); 42 return scoped_ptr<FileTracker>();
43 } 43 }
44 44
45 void ReturnRetryOnSuccess(const SyncStatusCallback& callback,
46 SyncStatusCode status) {
47 if (status == SYNC_STATUS_OK)
48 status = SYNC_STATUS_RETRY;
49 callback.Run(status);
50 }
51
52 bool IsLocalFileMissing(const SyncFileMetadata& local_metadata, 45 bool IsLocalFileMissing(const SyncFileMetadata& local_metadata,
53 const FileChange& local_change) { 46 const FileChange& local_change) {
54 return local_metadata.file_type == SYNC_FILE_TYPE_UNKNOWN || 47 return local_metadata.file_type == SYNC_FILE_TYPE_UNKNOWN ||
55 local_change.IsDelete(); 48 local_change.IsDelete();
56 } 49 }
57 50
58 } // namespace 51 } // namespace
59 52
60 LocalToRemoteSyncer::LocalToRemoteSyncer(SyncEngineContext* sync_context, 53 LocalToRemoteSyncer::LocalToRemoteSyncer(SyncEngineContext* sync_context,
61 const SyncFileMetadata& local_metadata, 54 const SyncFileMetadata& local_metadata,
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 error == google_apis::HTTP_CONFLICT || 428 error == google_apis::HTTP_CONFLICT ||
436 error == google_apis::HTTP_NOT_FOUND) { 429 error == google_apis::HTTP_NOT_FOUND) {
437 // The remote file has unfetched remote change. Fetch latest metadata and 430 // The remote file has unfetched remote change. Fetch latest metadata and
438 // update database with it. 431 // update database with it.
439 // TODO(tzik): Consider adding local side low-priority dirtiness handling to 432 // TODO(tzik): Consider adding local side low-priority dirtiness handling to
440 // handle this as ListChangesTask. 433 // handle this as ListChangesTask.
441 434
442 needs_remote_change_listing_ = true; 435 needs_remote_change_listing_ = true;
443 UpdateRemoteMetadata( 436 UpdateRemoteMetadata(
444 remote_file_tracker_->file_id(), 437 remote_file_tracker_->file_id(),
445 base::Bind(&ReturnRetryOnSuccess, 438 token.Pass());
446 base::Bind(&LocalToRemoteSyncer::SyncCompleted,
447 weak_ptr_factory_.GetWeakPtr(),
448 base::Passed(&token))));
449 return; 439 return;
450 } 440 }
451 441
452 SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); 442 SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error);
453 if (status != SYNC_STATUS_OK) { 443 if (status != SYNC_STATUS_OK) {
454 SyncCompleted(token.Pass(), status); 444 SyncCompleted(token.Pass(), status);
455 return; 445 return;
456 } 446 }
457 447
458 if (!entry) { 448 if (!entry) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 weak_ptr_factory_.GetWeakPtr(), 489 weak_ptr_factory_.GetWeakPtr(),
500 base::Passed(&token))); 490 base::Passed(&token)));
501 return; 491 return;
502 } 492 }
503 493
504 SyncCompleted(token.Pass(), SYNC_STATUS_RETRY); 494 SyncCompleted(token.Pass(), SYNC_STATUS_RETRY);
505 } 495 }
506 496
507 void LocalToRemoteSyncer::UpdateRemoteMetadata( 497 void LocalToRemoteSyncer::UpdateRemoteMetadata(
508 const std::string& file_id, 498 const std::string& file_id,
509 const SyncStatusCallback& callback) { 499 scoped_ptr<SyncTaskToken> token) {
510 DCHECK(remote_file_tracker_); 500 DCHECK(remote_file_tracker_);
511 501
512 drive_service()->GetFileResource( 502 drive_service()->GetFileResource(
513 file_id, 503 file_id,
514 base::Bind(&LocalToRemoteSyncer::DidGetRemoteMetadata, 504 base::Bind(&LocalToRemoteSyncer::DidGetRemoteMetadata,
515 weak_ptr_factory_.GetWeakPtr(), 505 weak_ptr_factory_.GetWeakPtr(),
516 file_id, callback)); 506 file_id, base::Passed(&token)));
517 } 507 }
518 508
519 void LocalToRemoteSyncer::DidGetRemoteMetadata( 509 void LocalToRemoteSyncer::DidGetRemoteMetadata(
520 const std::string& file_id, 510 const std::string& file_id,
521 const SyncStatusCallback& callback, 511 scoped_ptr<SyncTaskToken> token,
522 google_apis::GDataErrorCode error, 512 google_apis::GDataErrorCode error,
523 scoped_ptr<google_apis::FileResource> entry) { 513 scoped_ptr<google_apis::FileResource> entry) {
524 DCHECK(sync_context_->GetWorkerTaskRunner()->RunsTasksOnCurrentThread()); 514 DCHECK(sync_context_->GetWorkerTaskRunner()->RunsTasksOnCurrentThread());
525 515
526 if (error == google_apis::HTTP_NOT_FOUND) { 516 if (error == google_apis::HTTP_NOT_FOUND) {
527 metadata_database()->UpdateByDeletedRemoteFile(file_id, callback); 517 metadata_database()->UpdateByDeletedRemoteFile(
518 file_id,
519 base::Bind(&LocalToRemoteSyncer::CompleteWithRetryStatus,
520 weak_ptr_factory_.GetWeakPtr(),
521 base::Passed(&token)));
528 return; 522 return;
529 } 523 }
530 524
531 SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); 525 SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error);
532 if (status != SYNC_STATUS_OK) { 526 if (status != SYNC_STATUS_OK) {
533 callback.Run(status); 527 SyncCompleted(token.Pass(), status);
534 return; 528 return;
535 } 529 }
536 530
537 if (!entry) { 531 if (!entry) {
538 NOTREACHED(); 532 NOTREACHED();
539 callback.Run(SYNC_STATUS_FAILED); 533 SyncCompleted(token.Pass(), SYNC_STATUS_FAILED);
540 return; 534 return;
541 } 535 }
542 536
543 metadata_database()->UpdateByFileResource(*entry, callback); 537 metadata_database()->UpdateByFileResource(
538 *entry,
539 base::Bind(&LocalToRemoteSyncer::CompleteWithRetryStatus,
540 weak_ptr_factory_.GetWeakPtr(),
541 base::Passed(&token)));
544 } 542 }
545 543
546 void LocalToRemoteSyncer::DidDeleteForUploadNewFile( 544 void LocalToRemoteSyncer::DidDeleteForUploadNewFile(
547 scoped_ptr<SyncTaskToken> token, 545 scoped_ptr<SyncTaskToken> token,
548 SyncStatusCode status) { 546 SyncStatusCode status) {
549 if (status == SYNC_STATUS_HAS_CONFLICT) { 547 if (status == SYNC_STATUS_HAS_CONFLICT) {
550 UpdateRemoteMetadata( 548 UpdateRemoteMetadata(
551 remote_file_tracker_->file_id(), 549 remote_file_tracker_->file_id(),
552 base::Bind(&ReturnRetryOnSuccess, 550 token.Pass());
553 base::Bind(&LocalToRemoteSyncer::SyncCompleted,
554 weak_ptr_factory_.GetWeakPtr(),
555 base::Passed(&token))));
556 return; 551 return;
557 } 552 }
558 553
559 if (status != SYNC_STATUS_OK) { 554 if (status != SYNC_STATUS_OK) {
560 SyncCompleted(token.Pass(), status); 555 SyncCompleted(token.Pass(), status);
561 return; 556 return;
562 } 557 }
563 558
564 UploadNewFile(token.Pass()); 559 UploadNewFile(token.Pass());
565 } 560 }
566 561
567 void LocalToRemoteSyncer::DidDeleteForCreateFolder( 562 void LocalToRemoteSyncer::DidDeleteForCreateFolder(
568 scoped_ptr<SyncTaskToken> token, 563 scoped_ptr<SyncTaskToken> token,
569 SyncStatusCode status) { 564 SyncStatusCode status) {
570 if (status == SYNC_STATUS_HAS_CONFLICT) { 565 if (status == SYNC_STATUS_HAS_CONFLICT) {
571 UpdateRemoteMetadata( 566 UpdateRemoteMetadata(remote_file_tracker_->file_id(), token.Pass());
572 remote_file_tracker_->file_id(),
573 base::Bind(&ReturnRetryOnSuccess,
574 base::Bind(&LocalToRemoteSyncer::SyncCompleted,
575 weak_ptr_factory_.GetWeakPtr(),
576 base::Passed(&token))));
577 return; 567 return;
578 } 568 }
579 569
580 if (status != SYNC_STATUS_OK) { 570 if (status != SYNC_STATUS_OK) {
581 SyncCompleted(token.Pass(), status); 571 SyncCompleted(token.Pass(), status);
582 return; 572 return;
583 } 573 }
584 574
585 CreateRemoteFolder(token.Pass()); 575 CreateRemoteFolder(token.Pass());
586 } 576 }
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 703
714 drive::DriveUploaderInterface* LocalToRemoteSyncer::drive_uploader() { 704 drive::DriveUploaderInterface* LocalToRemoteSyncer::drive_uploader() {
715 set_used_network(true); 705 set_used_network(true);
716 return sync_context_->GetDriveUploader(); 706 return sync_context_->GetDriveUploader();
717 } 707 }
718 708
719 MetadataDatabase* LocalToRemoteSyncer::metadata_database() { 709 MetadataDatabase* LocalToRemoteSyncer::metadata_database() {
720 return sync_context_->GetMetadataDatabase(); 710 return sync_context_->GetMetadataDatabase();
721 } 711 }
722 712
713 void LocalToRemoteSyncer::CompleteWithRetryStatus(
714 scoped_ptr<SyncTaskToken> token,
715 SyncStatusCode status) {
716 if (status == SYNC_STATUS_OK)
717 status = SYNC_STATUS_RETRY;
718 SyncCompleted(token.Pass(), status);
719 }
720
723 } // namespace drive_backend 721 } // namespace drive_backend
724 } // namespace sync_file_system 722 } // namespace sync_file_system
OLDNEW
« no previous file with comments | « chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698