reporting_browsing_data_remover_unittest.cc 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. // Copyright 2017 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 "net/reporting/reporting_browsing_data_remover.h"
  5. #include <memory>
  6. #include <string>
  7. #include "base/bind.h"
  8. #include "base/test/simple_test_tick_clock.h"
  9. #include "net/base/network_isolation_key.h"
  10. #include "net/reporting/reporting_cache.h"
  11. #include "net/reporting/reporting_context.h"
  12. #include "net/reporting/reporting_report.h"
  13. #include "net/reporting/reporting_test_util.h"
  14. #include "testing/gtest/include/gtest/gtest.h"
  15. namespace net {
  16. namespace {
  17. class ReportingBrowsingDataRemoverTest : public ReportingTestBase {
  18. protected:
  19. void RemoveBrowsingData(bool remove_reports,
  20. bool remove_clients,
  21. std::string host) {
  22. uint64_t data_type_mask = 0;
  23. if (remove_reports)
  24. data_type_mask |= ReportingBrowsingDataRemover::DATA_TYPE_REPORTS;
  25. if (remove_clients)
  26. data_type_mask |= ReportingBrowsingDataRemover::DATA_TYPE_CLIENTS;
  27. if (!host.empty()) {
  28. base::RepeatingCallback<bool(const url::Origin&)> origin_filter =
  29. base::BindRepeating(&ReportingBrowsingDataRemoverTest::HostIs, host);
  30. ReportingBrowsingDataRemover::RemoveBrowsingData(cache(), data_type_mask,
  31. origin_filter);
  32. } else {
  33. ReportingBrowsingDataRemover::RemoveAllBrowsingData(cache(),
  34. data_type_mask);
  35. }
  36. }
  37. // TODO(chlily): Take NIK.
  38. void AddReport(const GURL& url) {
  39. cache()->AddReport(absl::nullopt, NetworkIsolationKey(), url, kUserAgent_,
  40. kGroup_, kType_, base::Value::Dict(), 0,
  41. tick_clock()->NowTicks(), 0);
  42. }
  43. // TODO(chlily): Take NIK.
  44. void SetEndpoint(const url::Origin& origin) {
  45. SetEndpointInCache(
  46. ReportingEndpointGroupKey(NetworkIsolationKey(), origin, kGroup_),
  47. kEndpoint_, base::Time::Now() + base::Days(7));
  48. }
  49. static bool HostIs(std::string host, const url::Origin& origin) {
  50. return origin.host() == host;
  51. }
  52. size_t report_count() {
  53. std::vector<const ReportingReport*> reports;
  54. cache()->GetReports(&reports);
  55. return reports.size();
  56. }
  57. const GURL kUrl1_ = GURL("https://origin1/path");
  58. const GURL kUrl2_ = GURL("https://origin2/path");
  59. const url::Origin kOrigin1_ = url::Origin::Create(kUrl1_);
  60. const url::Origin kOrigin2_ = url::Origin::Create(kUrl2_);
  61. const GURL kEndpoint_ = GURL("https://endpoint/");
  62. const std::string kUserAgent_ = "Mozilla/1.0";
  63. const std::string kGroup_ = "group";
  64. const std::string kType_ = "default";
  65. };
  66. TEST_F(ReportingBrowsingDataRemoverTest, RemoveNothing) {
  67. AddReport(kUrl1_);
  68. AddReport(kUrl2_);
  69. SetEndpoint(kOrigin1_);
  70. SetEndpoint(kOrigin2_);
  71. RemoveBrowsingData(/* remove_reports= */ false, /* remove_clients= */ false,
  72. /* host= */ "");
  73. EXPECT_EQ(2u, report_count());
  74. EXPECT_EQ(2u, cache()->GetEndpointCount());
  75. }
  76. TEST_F(ReportingBrowsingDataRemoverTest, RemoveAllReports) {
  77. AddReport(kUrl1_);
  78. AddReport(kUrl2_);
  79. SetEndpoint(kOrigin1_);
  80. SetEndpoint(kOrigin2_);
  81. RemoveBrowsingData(/* remove_reports= */ true, /* remove_clients= */ false,
  82. /* host= */ "");
  83. EXPECT_EQ(0u, report_count());
  84. EXPECT_EQ(2u, cache()->GetEndpointCount());
  85. }
  86. TEST_F(ReportingBrowsingDataRemoverTest, RemoveAllClients) {
  87. AddReport(kUrl1_);
  88. AddReport(kUrl2_);
  89. SetEndpoint(kOrigin1_);
  90. SetEndpoint(kOrigin2_);
  91. RemoveBrowsingData(/* remove_reports= */ false, /* remove_clients= */ true,
  92. /* host= */ "");
  93. EXPECT_EQ(2u, report_count());
  94. EXPECT_EQ(0u, cache()->GetEndpointCount());
  95. }
  96. TEST_F(ReportingBrowsingDataRemoverTest, RemoveAllReportsAndClients) {
  97. AddReport(kUrl1_);
  98. AddReport(kUrl2_);
  99. SetEndpoint(kOrigin1_);
  100. SetEndpoint(kOrigin2_);
  101. RemoveBrowsingData(/* remove_reports= */ true, /* remove_clients= */ true,
  102. /* host= */ "");
  103. EXPECT_EQ(0u, report_count());
  104. EXPECT_EQ(0u, cache()->GetEndpointCount());
  105. }
  106. TEST_F(ReportingBrowsingDataRemoverTest, RemoveSomeReports) {
  107. AddReport(kUrl1_);
  108. AddReport(kUrl2_);
  109. SetEndpoint(kOrigin1_);
  110. SetEndpoint(kOrigin2_);
  111. RemoveBrowsingData(/* remove_reports= */ true, /* remove_clients= */ false,
  112. /* host= */ kUrl1_.host());
  113. EXPECT_EQ(2u, cache()->GetEndpointCount());
  114. std::vector<const ReportingReport*> reports;
  115. cache()->GetReports(&reports);
  116. ASSERT_EQ(1u, reports.size());
  117. EXPECT_EQ(kUrl2_, reports[0]->url);
  118. }
  119. TEST_F(ReportingBrowsingDataRemoverTest, RemoveSomeClients) {
  120. AddReport(kUrl1_);
  121. AddReport(kUrl2_);
  122. SetEndpoint(kOrigin1_);
  123. SetEndpoint(kOrigin2_);
  124. RemoveBrowsingData(/* remove_reports= */ false, /* remove_clients= */ true,
  125. /* host= */ kUrl1_.host());
  126. EXPECT_EQ(2u, report_count());
  127. EXPECT_FALSE(FindEndpointInCache(
  128. ReportingEndpointGroupKey(NetworkIsolationKey(), kOrigin1_, kGroup_),
  129. kEndpoint_));
  130. EXPECT_TRUE(FindEndpointInCache(
  131. ReportingEndpointGroupKey(NetworkIsolationKey(), kOrigin2_, kGroup_),
  132. kEndpoint_));
  133. }
  134. } // namespace
  135. } // namespace net