| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/new_tab_page/modules/history_clusters/ranking/history_clusters_module_ranking_signals.h" |
| |
| #include "components/commerce/core/proto/cart_db_content.pb.h" |
| #include "components/history_clusters/core/history_clusters_util.h" |
| #include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
| |
| HistoryClustersModuleRankingSignals::HistoryClustersModuleRankingSignals( |
| const std::vector<CartDB::KeyAndValue>& active_carts, |
| const base::flat_set<std::string>& category_boostlist, |
| const history::Cluster& cluster) |
| : duration_since_most_recent_visit( |
| base::Time::Now() - |
| cluster.GetMostRecentVisit().annotated_visit.visit_row.visit_time), |
| belongs_to_boosted_category( |
| category_boostlist.empty() |
| ? false |
| : history_clusters::IsClusterInCategories(cluster, |
| category_boostlist)), |
| num_total_visits(cluster.visits.size()) { |
| base::flat_set<std::string> hosts; |
| base::flat_set<std::string> cart_tlds; |
| for (const auto& visit : cluster.visits) { |
| if (visit.annotated_visit.visit_row.is_known_to_sync && |
| visit.annotated_visit.content_annotations.has_url_keyed_image) { |
| num_visits_with_image++; |
| } |
| |
| hosts.insert(visit.normalized_url.host()); |
| |
| if (!active_carts.empty()) { |
| std::string visit_tld = |
| net::registry_controlled_domains::GetDomainAndRegistry( |
| visit.normalized_url, |
| net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); |
| for (auto cart : active_carts) { |
| if (cart.first == visit_tld) { |
| cart_tlds.insert(visit_tld); |
| } |
| } |
| } |
| } |
| |
| num_unique_hosts = hosts.size(); |
| num_abandoned_carts = cart_tlds.size(); |
| } |
| |
| HistoryClustersModuleRankingSignals::HistoryClustersModuleRankingSignals() = |
| default; |
| HistoryClustersModuleRankingSignals::~HistoryClustersModuleRankingSignals() = |
| default; |
| HistoryClustersModuleRankingSignals::HistoryClustersModuleRankingSignals( |
| const HistoryClustersModuleRankingSignals&) = default; |