history_clusters_service_test_api.cc 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/history_clusters/core/history_clusters_service_test_api.h"
  5. #include "base/time/time.h"
  6. #include "components/history/core/browser/history_types.h"
  7. #include "components/history_clusters/core/history_clusters_util.h"
  8. namespace history_clusters {
  9. // static
  10. std::vector<history::AnnotatedVisit> GetHardcodedTestVisits() {
  11. // For non-flakiness, return a static list of visits, as this relies on Now().
  12. static std::vector<history::AnnotatedVisit> visits;
  13. if (visits.empty()) {
  14. {
  15. history::AnnotatedVisit visit;
  16. visit.url_row.set_id(1);
  17. visit.url_row.set_url(GURL("https://google.com/"));
  18. visit.url_row.set_title(u"Search Engine Title");
  19. visit.visit_row.visit_id = 1;
  20. // Choose a recent time, as otherwise History will discard the visit.
  21. visit.visit_row.visit_time = base::Time::Now() - base::Days(2);
  22. visit.visit_row.visit_duration = base::Milliseconds(5600);
  23. visit.context_annotations.page_end_reason = 3;
  24. visit.context_annotations.is_new_bookmark = true;
  25. visit.source = history::VisitSource::SOURCE_BROWSED;
  26. visits.push_back(visit);
  27. }
  28. {
  29. history::AnnotatedVisit visit;
  30. visit.url_row.set_id(2);
  31. visit.url_row.set_url(GURL("https://github.com/"));
  32. visit.url_row.set_title(u"Code Storage Title");
  33. visit.visit_row.visit_id = 2;
  34. // Choose a recent time, as otherwise History will discard the visit.
  35. visit.visit_row.visit_time = base::Time::Now() - base::Days(1);
  36. visit.visit_row.visit_duration = base::Seconds(20);
  37. visit.visit_row.referring_visit = 1;
  38. visit.context_annotations.page_end_reason = 5;
  39. visit.context_annotations.is_existing_part_of_tab_group = true;
  40. visit.source = history::VisitSource::SOURCE_BROWSED;
  41. visits.push_back(visit);
  42. }
  43. {
  44. // Synced visits should not be included when fetching visits to cluster.
  45. history::AnnotatedVisit visit;
  46. visit.url_row.set_id(3);
  47. visit.url_row.set_url(GURL("https://synched-visit.com/"));
  48. visit.url_row.set_title(u"Synched visit");
  49. visit.visit_row.visit_id = 3;
  50. // Choose a recent time, as otherwise History will discard the visit.
  51. visit.visit_row.visit_time = base::Time::Now() - base::Days(1);
  52. visit.visit_row.visit_duration = base::Seconds(20);
  53. visit.context_annotations.page_end_reason = 5;
  54. visit.source = history::VisitSource::SOURCE_SYNCED;
  55. visits.push_back(visit);
  56. }
  57. {
  58. // Visits older than 30 days should not be included in keyword requests.
  59. history::AnnotatedVisit visit;
  60. visit.url_row.set_id(4);
  61. visit.url_row.set_url(GURL("https://31-day-old-visit.com/"));
  62. visit.url_row.set_title(u"31 day old visit");
  63. visit.visit_row.visit_id = 4;
  64. // Choose a recent time, as otherwise History will discard the visit.
  65. visit.visit_row.visit_time = base::Time::Now() - base::Days(60);
  66. visit.visit_row.visit_duration = base::Seconds(20);
  67. visit.visit_row.referring_visit = 1;
  68. visit.context_annotations.page_end_reason = 5;
  69. visit.context_annotations.is_existing_part_of_tab_group = true;
  70. visit.source = history::VisitSource::SOURCE_BROWSED;
  71. visits.push_back(visit);
  72. }
  73. {
  74. // A second 1-day-old visit.
  75. history::AnnotatedVisit visit;
  76. visit.url_row.set_id(5);
  77. visit.url_row.set_url(GURL("https://second-1-day-old-visit.com/"));
  78. visit.url_row.set_title(u"second-1-day-old-visit");
  79. visit.visit_row.visit_id = 5;
  80. // Choose a recent time, as otherwise History will discard the visit.
  81. visit.visit_row.visit_time = base::Time::Now() - base::Days(1);
  82. visit.visit_row.visit_duration = base::Seconds(20);
  83. visit.visit_row.referring_visit = 1;
  84. visit.context_annotations.page_end_reason = 5;
  85. visit.context_annotations.is_new_bookmark = true;
  86. visit.source = history::VisitSource::SOURCE_BROWSED;
  87. visits.push_back(visit);
  88. }
  89. }
  90. return visits;
  91. }
  92. history::ClusterVisit GetHardcodedClusterVisit(history::VisitID visit_id,
  93. float score,
  94. int engagement_score) {
  95. for (const auto& visit : GetHardcodedTestVisits()) {
  96. if (visit.visit_row.visit_id == visit_id)
  97. return AnnotatedVisitToClusterVisit(visit, score, engagement_score);
  98. }
  99. NOTREACHED() << "GetHardcodedClusterVisit() could not find visit_id: "
  100. << visit_id;
  101. return {};
  102. }
  103. history::ClusterVisit AnnotatedVisitToClusterVisit(
  104. const history::AnnotatedVisit& visit,
  105. float score,
  106. int engagement_score) {
  107. history::ClusterVisit cluster_visit;
  108. cluster_visit.annotated_visit = visit;
  109. cluster_visit.normalized_url = visit.url_row.url();
  110. cluster_visit.url_for_deduping =
  111. ComputeURLForDeduping(cluster_visit.normalized_url);
  112. cluster_visit.score = score;
  113. cluster_visit.engagement_score = engagement_score;
  114. return cluster_visit;
  115. }
  116. } // namespace history_clusters