Index: components/offline_pages/offline_page_model_impl.cc |
diff --git a/components/offline_pages/offline_page_model_impl.cc b/components/offline_pages/offline_page_model_impl.cc |
index 0a5094fb876b41b3e04a0327b3c3871d1ad70f10..ddfea366493484e2921cd1bfc905eabf2f54d22b 100644 |
--- a/components/offline_pages/offline_page_model_impl.cc |
+++ b/components/offline_pages/offline_page_model_impl.cc |
@@ -428,6 +428,56 @@ void OfflinePageModelImpl::DoDeletePagesByOfflineId( |
weak_ptr_factory_.GetWeakPtr(), offline_ids, callback)); |
} |
+void OfflinePageModelImpl::DeletePagesByClientIds( |
+ const std::vector<ClientId>& client_ids, |
+ const DeletePageCallback& callback) { |
+ RunWhenLoaded(base::Bind(&OfflinePageModelImpl::DoDeletePagesByClientIds, |
+ weak_ptr_factory_.GetWeakPtr(), client_ids, |
+ callback)); |
+} |
+ |
+void OfflinePageModelImpl::DoDeletePagesByClientIds( |
+ const std::vector<ClientId>& client_ids, |
+ const DeletePageCallback& callback) { |
+ std::vector<ClientId> sorted_client_ids = client_ids; |
+ 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
|
+ |
+ std::vector<int64_t> offline_ids; |
+ for (const auto& page_pair : offline_pages_) { |
+ if (std::binary_search(sorted_client_ids.begin(), sorted_client_ids.end(), |
+ page_pair.second.client_id)) { |
+ offline_ids.emplace_back(page_pair.first); |
+ } |
+ } |
+ |
+ DoDeletePagesByOfflineId(offline_ids, callback); |
+} |
+ |
+void OfflinePageModelImpl::GetPagesByClientIds( |
+ const std::vector<ClientId>& client_ids, |
+ const MultipleOfflinePageItemCallback& callback) { |
+ RunWhenLoaded(base::Bind(&OfflinePageModelImpl::DoGetPagesByClientIds, |
+ weak_ptr_factory_.GetWeakPtr(), client_ids, |
+ callback)); |
+} |
+ |
+void OfflinePageModelImpl::DoGetPagesByClientIds( |
+ const std::vector<ClientId>& client_ids, |
+ const MultipleOfflinePageItemCallback& callback) { |
+ std::vector<ClientId> sorted_client_ids = client_ids; |
+ 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.
|
+ |
+ std::vector<OfflinePageItem> result; |
+ for (const auto& page_pair : offline_pages_) { |
+ if (std::binary_search(sorted_client_ids.begin(), sorted_client_ids.end(), |
+ page_pair.second.client_id) && |
+ !page_pair.second.IsExpired()) { |
+ result.emplace_back(page_pair.second); |
+ } |
+ } |
+ callback.Run(result); |
+} |
+ |
void OfflinePageModelImpl::DeleteCachedPagesByURLPredicate( |
const UrlPredicate& predicate, |
const DeletePageCallback& callback) { |
@@ -595,19 +645,6 @@ void OfflinePageModelImpl::GetPagesByOnlineURLWhenLoadDone( |
callback.Run(result); |
} |
-const OfflinePageItem* OfflinePageModelImpl::MaybeGetBestPageForOnlineURL( |
- const GURL& online_url) const { |
- const OfflinePageItem* result = nullptr; |
- for (const auto& id_page_pair : offline_pages_) { |
- if (id_page_pair.second.url == online_url && |
- !id_page_pair.second.IsExpired()) { |
- if (!result || id_page_pair.second.creation_time > result->creation_time) |
- result = &(id_page_pair.second); |
- } |
- } |
- return result; |
-} |
- |
void OfflinePageModelImpl::CheckMetadataConsistency() { |
DCHECK(is_loaded_); |
archive_manager_->GetAllArchives( |