OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_metadata_store.h" | 5 #include "chrome/browser/sync_file_system/drive_metadata_store.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
464 return SYNC_DATABASE_ERROR_NOT_FOUND; | 464 return SYNC_DATABASE_ERROR_NOT_FOUND; |
465 | 465 |
466 PathToMetadata::const_iterator found = found_origin->second.find(url.path()); | 466 PathToMetadata::const_iterator found = found_origin->second.find(url.path()); |
467 if (found == found_origin->second.end()) | 467 if (found == found_origin->second.end()) |
468 return SYNC_DATABASE_ERROR_NOT_FOUND; | 468 return SYNC_DATABASE_ERROR_NOT_FOUND; |
469 | 469 |
470 *metadata = found->second; | 470 *metadata = found->second; |
471 return SYNC_STATUS_OK; | 471 return SYNC_STATUS_OK; |
472 } | 472 } |
473 | 473 |
| 474 void DriveMetadataStore::AddIncrementalSyncOrigin( |
| 475 const GURL& origin, |
| 476 const std::string& resource_id) { |
| 477 AddBatchSyncOrigin(origin, resource_id); |
| 478 MoveBatchSyncOriginToIncremental(origin); |
| 479 } |
| 480 |
474 void DriveMetadataStore::SetSyncRootDirectory(const std::string& resource_id) { | 481 void DriveMetadataStore::SetSyncRootDirectory(const std::string& resource_id) { |
475 DCHECK(CalledOnValidThread()); | 482 DCHECK(CalledOnValidThread()); |
476 | 483 |
477 sync_root_directory_resource_id_ = resource_id; | 484 sync_root_directory_resource_id_ = resource_id; |
478 | 485 |
479 // Set the resource ID for the sync root directory in the DB. | 486 // Set the resource ID for the sync root directory in the DB. |
480 base::PostTaskAndReplyWithResult( | 487 base::PostTaskAndReplyWithResult( |
481 file_task_runner_, FROM_HERE, | 488 file_task_runner_, FROM_HERE, |
482 base::Bind(&DriveMetadataDB::SetSyncRootDirectory, | 489 base::Bind(&DriveMetadataDB::SetSyncRootDirectory, |
483 base::Unretained(db_.get()), resource_id), | 490 base::Unretained(db_.get()), resource_id), |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
526 bool DriveMetadataStore::IsIncrementalSyncOrigin(const GURL& origin) const { | 533 bool DriveMetadataStore::IsIncrementalSyncOrigin(const GURL& origin) const { |
527 DCHECK(CalledOnValidThread()); | 534 DCHECK(CalledOnValidThread()); |
528 return ContainsKey(incremental_sync_origins_, origin); | 535 return ContainsKey(incremental_sync_origins_, origin); |
529 } | 536 } |
530 | 537 |
531 bool DriveMetadataStore::IsOriginDisabled(const GURL& origin) const { | 538 bool DriveMetadataStore::IsOriginDisabled(const GURL& origin) const { |
532 DCHECK(CalledOnValidThread()); | 539 DCHECK(CalledOnValidThread()); |
533 return ContainsKey(disabled_origins_, origin); | 540 return ContainsKey(disabled_origins_, origin); |
534 } | 541 } |
535 | 542 |
536 void DriveMetadataStore::AddBatchSyncOrigin(const GURL& origin, | |
537 const std::string& resource_id) { | |
538 DCHECK(CalledOnValidThread()); | |
539 DCHECK(!IsBatchSyncOrigin(origin)); | |
540 DCHECK(!IsIncrementalSyncOrigin(origin)); | |
541 DCHECK(!IsOriginDisabled(origin)); | |
542 DCHECK_EQ(SYNC_STATUS_OK, db_status_); | |
543 | |
544 batch_sync_origins_.insert(std::make_pair(origin, resource_id)); | |
545 origin_by_resource_id_.insert(std::make_pair(resource_id, origin)); | |
546 | |
547 // Store a pair of |origin| and |resource_id| in the DB. | |
548 base::PostTaskAndReplyWithResult( | |
549 file_task_runner_, FROM_HERE, | |
550 base::Bind(&DriveMetadataDB::UpdateOriginAsBatchSync, | |
551 base::Unretained(db_.get()), origin, resource_id), | |
552 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr())); | |
553 } | |
554 | |
555 void DriveMetadataStore::MoveBatchSyncOriginToIncremental(const GURL& origin) { | |
556 DCHECK(CalledOnValidThread()); | |
557 DCHECK(IsBatchSyncOrigin(origin)); | |
558 DCHECK(!IsIncrementalSyncOrigin(origin)); | |
559 DCHECK(!IsOriginDisabled(origin)); | |
560 DCHECK_EQ(SYNC_STATUS_OK, db_status_); | |
561 | |
562 std::map<GURL, std::string>::iterator found = | |
563 batch_sync_origins_.find(origin); | |
564 incremental_sync_origins_.insert(std::make_pair(origin, found->second)); | |
565 | |
566 // Store a pair of |origin| and |resource_id| in the DB. | |
567 base::PostTaskAndReplyWithResult( | |
568 file_task_runner_, FROM_HERE, | |
569 base::Bind(&DriveMetadataDB::UpdateOriginAsIncrementalSync, | |
570 base::Unretained(db_.get()), origin, found->second), | |
571 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr())); | |
572 | |
573 batch_sync_origins_.erase(found); | |
574 } | |
575 | |
576 void DriveMetadataStore::EnableOrigin( | 543 void DriveMetadataStore::EnableOrigin( |
577 const GURL& origin, | 544 const GURL& origin, |
578 const SyncStatusCallback& callback) { | 545 const SyncStatusCallback& callback) { |
579 DCHECK(CalledOnValidThread()); | 546 DCHECK(CalledOnValidThread()); |
580 | 547 |
581 std::map<GURL, std::string>::iterator found = disabled_origins_.find(origin); | 548 std::map<GURL, std::string>::iterator found = disabled_origins_.find(origin); |
582 if (found == disabled_origins_.end()) { | 549 if (found == disabled_origins_.end()) { |
583 // |origin| has not been registered yet. | 550 // |origin| has not been registered yet. |
584 return; | 551 return; |
585 } | 552 } |
586 std::string resource_id = found->second; | 553 std::string resource_id = found->second; |
587 disabled_origins_.erase(found); | 554 disabled_origins_.erase(found); |
588 | 555 |
589 // Ensure |origin| is marked as a batch sync origin. | 556 // |Origin| goes back to DriveFileSyncService.pending_batch_sync_origins_ |
590 batch_sync_origins_.insert(std::make_pair(origin, resource_id)); | 557 // only and is not stored in drive_metadata_store. |
591 found = incremental_sync_origins_.find(origin); | 558 found = incremental_sync_origins_.find(origin); |
592 if (found != incremental_sync_origins_.end()) | 559 if (found != incremental_sync_origins_.end()) |
593 incremental_sync_origins_.erase(found); | 560 incremental_sync_origins_.erase(found); |
594 | 561 |
595 // Store a pair of |origin| and |resource_id| in the DB. | 562 // Store a pair of |origin| and |resource_id| in the DB. |
596 base::PostTaskAndReplyWithResult( | 563 base::PostTaskAndReplyWithResult( |
597 file_task_runner_, FROM_HERE, | 564 file_task_runner_, FROM_HERE, |
598 base::Bind(&DriveMetadataDB::EnableOrigin, | 565 base::Bind(&DriveMetadataDB::EnableOrigin, |
599 base::Unretained(db_.get()), origin, resource_id), | 566 base::Unretained(db_.get()), origin, resource_id), |
600 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); | 567 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
655 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); | 622 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); |
656 } | 623 } |
657 | 624 |
658 void DriveMetadataStore::DidUpdateOrigin( | 625 void DriveMetadataStore::DidUpdateOrigin( |
659 const SyncStatusCallback& callback, | 626 const SyncStatusCallback& callback, |
660 SyncStatusCode status) { | 627 SyncStatusCode status) { |
661 UpdateDBStatus(status); | 628 UpdateDBStatus(status); |
662 callback.Run(status); | 629 callback.Run(status); |
663 } | 630 } |
664 | 631 |
| 632 void DriveMetadataStore::AddBatchSyncOrigin(const GURL& origin, |
| 633 const std::string& resource_id) { |
| 634 DCHECK(CalledOnValidThread()); |
| 635 DCHECK(!IsIncrementalSyncOrigin(origin)); |
| 636 DCHECK(!IsOriginDisabled(origin)); |
| 637 DCHECK_EQ(SYNC_STATUS_OK, db_status_); |
| 638 |
| 639 if (IsBatchSyncOrigin(origin)) |
| 640 return; |
| 641 |
| 642 batch_sync_origins_.insert(std::make_pair(origin, resource_id)); |
| 643 origin_by_resource_id_.insert(std::make_pair(resource_id, origin)); |
| 644 |
| 645 // Store a pair of |origin| and |resource_id| in the DB. |
| 646 base::PostTaskAndReplyWithResult( |
| 647 file_task_runner_, FROM_HERE, |
| 648 base::Bind(&DriveMetadataDB::UpdateOriginAsBatchSync, |
| 649 base::Unretained(db_.get()), origin, resource_id), |
| 650 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr())); |
| 651 } |
| 652 |
| 653 void DriveMetadataStore::MoveBatchSyncOriginToIncremental(const GURL& origin) { |
| 654 DCHECK(CalledOnValidThread()); |
| 655 DCHECK(IsBatchSyncOrigin(origin)); |
| 656 DCHECK(!IsIncrementalSyncOrigin(origin)); |
| 657 DCHECK(!IsOriginDisabled(origin)); |
| 658 DCHECK_EQ(SYNC_STATUS_OK, db_status_); |
| 659 |
| 660 std::map<GURL, std::string>::iterator found = |
| 661 batch_sync_origins_.find(origin); |
| 662 incremental_sync_origins_.insert(std::make_pair(origin, found->second)); |
| 663 |
| 664 // Store a pair of |origin| and |resource_id| in the DB. |
| 665 base::PostTaskAndReplyWithResult( |
| 666 file_task_runner_, FROM_HERE, |
| 667 base::Bind(&DriveMetadataDB::UpdateOriginAsIncrementalSync, |
| 668 base::Unretained(db_.get()), origin, found->second), |
| 669 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr())); |
| 670 |
| 671 batch_sync_origins_.erase(found); |
| 672 } |
| 673 |
665 void DriveMetadataStore::UpdateDBStatus(SyncStatusCode status) { | 674 void DriveMetadataStore::UpdateDBStatus(SyncStatusCode status) { |
666 DCHECK(CalledOnValidThread()); | 675 DCHECK(CalledOnValidThread()); |
667 if (db_status_ != SYNC_STATUS_OK && | 676 if (db_status_ != SYNC_STATUS_OK && |
668 db_status_ != SYNC_DATABASE_ERROR_NOT_FOUND) { | 677 db_status_ != SYNC_DATABASE_ERROR_NOT_FOUND) { |
669 // TODO(tzik): Handle database corruption. http://crbug.com/153709 | 678 // TODO(tzik): Handle database corruption. http://crbug.com/153709 |
670 db_status_ = status; | 679 db_status_ = status; |
671 LOG(WARNING) << "DriveMetadataStore turned to wrong state: " << status; | 680 LOG(WARNING) << "DriveMetadataStore turned to wrong state: " << status; |
672 return; | 681 return; |
673 } | 682 } |
674 db_status_ = SYNC_STATUS_OK; | 683 db_status_ = SYNC_STATUS_OK; |
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1179 DCHECK(origin.is_valid()); | 1188 DCHECK(origin.is_valid()); |
1180 bool result = disabled_origins->insert( | 1189 bool result = disabled_origins->insert( |
1181 std::make_pair(origin, itr->value().ToString())).second; | 1190 std::make_pair(origin, itr->value().ToString())).second; |
1182 DCHECK(result); | 1191 DCHECK(result); |
1183 } | 1192 } |
1184 | 1193 |
1185 return SYNC_STATUS_OK; | 1194 return SYNC_STATUS_OK; |
1186 } | 1195 } |
1187 | 1196 |
1188 } // namespace sync_file_system | 1197 } // namespace sync_file_system |
OLD | NEW |