| 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 |