Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "components/offline_pages/offline_page_model_impl.h" | 5 #include "components/offline_pages/offline_page_model_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 421 InformDeletePageDone(callback, DeletePageResult::SUCCESS); | 421 InformDeletePageDone(callback, DeletePageResult::SUCCESS); |
| 422 return; | 422 return; |
| 423 } | 423 } |
| 424 | 424 |
| 425 archive_manager_->DeleteMultipleArchives( | 425 archive_manager_->DeleteMultipleArchives( |
| 426 paths_to_delete, | 426 paths_to_delete, |
| 427 base::Bind(&OfflinePageModelImpl::OnDeleteArchiveFilesDone, | 427 base::Bind(&OfflinePageModelImpl::OnDeleteArchiveFilesDone, |
| 428 weak_ptr_factory_.GetWeakPtr(), offline_ids, callback)); | 428 weak_ptr_factory_.GetWeakPtr(), offline_ids, callback)); |
| 429 } | 429 } |
| 430 | 430 |
| 431 void OfflinePageModelImpl::DeletePagesByClientIds( | |
| 432 const std::vector<ClientId>& client_ids, | |
| 433 const DeletePageCallback& callback) { | |
| 434 RunWhenLoaded(base::Bind(&OfflinePageModelImpl::DoDeletePagesByClientIds, | |
| 435 weak_ptr_factory_.GetWeakPtr(), client_ids, | |
| 436 callback)); | |
| 437 } | |
| 438 | |
| 439 void OfflinePageModelImpl::DoDeletePagesByClientIds( | |
| 440 const std::vector<ClientId>& client_ids, | |
| 441 const DeletePageCallback& callback) { | |
| 442 std::vector<ClientId> sorted_client_ids = client_ids; | |
| 443 std::sort(sorted_client_ids.begin(), sorted_client_ids.end()); | |
|
jianli
2016/10/19 00:21:37
Why not using a set?
dewittj
2016/10/19 16:18:33
Done.
The b-tree seemed like too much overhead fo
| |
| 444 | |
| 445 std::vector<int64_t> offline_ids; | |
| 446 for (const auto& page_pair : offline_pages_) { | |
| 447 if (std::binary_search(sorted_client_ids.begin(), sorted_client_ids.end(), | |
| 448 page_pair.second.client_id)) { | |
| 449 offline_ids.emplace_back(page_pair.first); | |
| 450 } | |
| 451 } | |
| 452 | |
| 453 DoDeletePagesByOfflineId(offline_ids, callback); | |
| 454 } | |
| 455 | |
| 456 void OfflinePageModelImpl::GetPagesByClientIds( | |
| 457 const std::vector<ClientId>& client_ids, | |
| 458 const MultipleOfflinePageItemCallback& callback) { | |
| 459 RunWhenLoaded(base::Bind(&OfflinePageModelImpl::DoGetPagesByClientIds, | |
| 460 weak_ptr_factory_.GetWeakPtr(), client_ids, | |
| 461 callback)); | |
| 462 } | |
| 463 | |
| 464 void OfflinePageModelImpl::DoGetPagesByClientIds( | |
| 465 const std::vector<ClientId>& client_ids, | |
| 466 const MultipleOfflinePageItemCallback& callback) { | |
| 467 std::vector<ClientId> sorted_client_ids = client_ids; | |
| 468 std::sort(sorted_client_ids.begin(), sorted_client_ids.end()); | |
|
jianli
2016/10/19 00:21:37
ditto
dewittj
2016/10/19 16:18:33
Done.
| |
| 469 | |
| 470 std::vector<OfflinePageItem> result; | |
| 471 for (const auto& page_pair : offline_pages_) { | |
| 472 if (std::binary_search(sorted_client_ids.begin(), sorted_client_ids.end(), | |
| 473 page_pair.second.client_id) && | |
| 474 !page_pair.second.IsExpired()) { | |
| 475 result.emplace_back(page_pair.second); | |
| 476 } | |
| 477 } | |
| 478 callback.Run(result); | |
| 479 } | |
| 480 | |
| 431 void OfflinePageModelImpl::DeleteCachedPagesByURLPredicate( | 481 void OfflinePageModelImpl::DeleteCachedPagesByURLPredicate( |
| 432 const UrlPredicate& predicate, | 482 const UrlPredicate& predicate, |
| 433 const DeletePageCallback& callback) { | 483 const DeletePageCallback& callback) { |
| 434 RunWhenLoaded( | 484 RunWhenLoaded( |
| 435 base::Bind(&OfflinePageModelImpl::DoDeleteCachedPagesByURLPredicate, | 485 base::Bind(&OfflinePageModelImpl::DoDeleteCachedPagesByURLPredicate, |
| 436 weak_ptr_factory_.GetWeakPtr(), predicate, callback)); | 486 weak_ptr_factory_.GetWeakPtr(), predicate, callback)); |
| 437 } | 487 } |
| 438 | 488 |
| 439 void OfflinePageModelImpl::DoDeleteCachedPagesByURLPredicate( | 489 void OfflinePageModelImpl::DoDeleteCachedPagesByURLPredicate( |
| 440 const UrlPredicate& predicate, | 490 const UrlPredicate& predicate, |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 588 // stripped. | 638 // stripped. |
| 589 if (online_url_without_fragment == | 639 if (online_url_without_fragment == |
| 590 id_page_pair.second.url.ReplaceComponents(remove_params)) { | 640 id_page_pair.second.url.ReplaceComponents(remove_params)) { |
| 591 result.push_back(id_page_pair.second); | 641 result.push_back(id_page_pair.second); |
| 592 } | 642 } |
| 593 } | 643 } |
| 594 | 644 |
| 595 callback.Run(result); | 645 callback.Run(result); |
| 596 } | 646 } |
| 597 | 647 |
| 598 const OfflinePageItem* OfflinePageModelImpl::MaybeGetBestPageForOnlineURL( | |
| 599 const GURL& online_url) const { | |
| 600 const OfflinePageItem* result = nullptr; | |
| 601 for (const auto& id_page_pair : offline_pages_) { | |
| 602 if (id_page_pair.second.url == online_url && | |
| 603 !id_page_pair.second.IsExpired()) { | |
| 604 if (!result || id_page_pair.second.creation_time > result->creation_time) | |
| 605 result = &(id_page_pair.second); | |
| 606 } | |
| 607 } | |
| 608 return result; | |
| 609 } | |
| 610 | |
| 611 void OfflinePageModelImpl::CheckMetadataConsistency() { | 648 void OfflinePageModelImpl::CheckMetadataConsistency() { |
| 612 DCHECK(is_loaded_); | 649 DCHECK(is_loaded_); |
| 613 archive_manager_->GetAllArchives( | 650 archive_manager_->GetAllArchives( |
| 614 base::Bind(&OfflinePageModelImpl::CheckMetadataConsistencyForArchivePaths, | 651 base::Bind(&OfflinePageModelImpl::CheckMetadataConsistencyForArchivePaths, |
| 615 weak_ptr_factory_.GetWeakPtr())); | 652 weak_ptr_factory_.GetWeakPtr())); |
| 616 } | 653 } |
| 617 | 654 |
| 618 void OfflinePageModelImpl::ExpirePages( | 655 void OfflinePageModelImpl::ExpirePages( |
| 619 const std::vector<int64_t>& offline_ids, | 656 const std::vector<int64_t>& offline_ids, |
| 620 const base::Time& expiration_time, | 657 const base::Time& expiration_time, |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1048 } | 1085 } |
| 1049 | 1086 |
| 1050 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task); | 1087 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, task); |
| 1051 } | 1088 } |
| 1052 | 1089 |
| 1053 base::Time OfflinePageModelImpl::GetCurrentTime() const { | 1090 base::Time OfflinePageModelImpl::GetCurrentTime() const { |
| 1054 return testing_clock_ ? testing_clock_->Now() : base::Time::Now(); | 1091 return testing_clock_ ? testing_clock_->Now() : base::Time::Now(); |
| 1055 } | 1092 } |
| 1056 | 1093 |
| 1057 } // namespace offline_pages | 1094 } // namespace offline_pages |
| OLD | NEW |