xref: /aosp_15_r20/external/cronet/net/reporting/reporting_browsing_data_remover_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2017 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "net/reporting/reporting_browsing_data_remover.h"
6 
7 #include <memory>
8 #include <string>
9 
10 #include "base/functional/bind.h"
11 #include "base/memory/raw_ptr.h"
12 #include "base/test/simple_test_tick_clock.h"
13 #include "net/base/network_anonymization_key.h"
14 #include "net/reporting/reporting_cache.h"
15 #include "net/reporting/reporting_context.h"
16 #include "net/reporting/reporting_report.h"
17 #include "net/reporting/reporting_test_util.h"
18 #include "testing/gtest/include/gtest/gtest.h"
19 
20 namespace net {
21 namespace {
22 
23 class ReportingBrowsingDataRemoverTest : public ReportingTestBase {
24  protected:
RemoveBrowsingData(bool remove_reports,bool remove_clients,std::string host)25   void RemoveBrowsingData(bool remove_reports,
26                           bool remove_clients,
27                           std::string host) {
28     uint64_t data_type_mask = 0;
29     if (remove_reports)
30       data_type_mask |= ReportingBrowsingDataRemover::DATA_TYPE_REPORTS;
31     if (remove_clients)
32       data_type_mask |= ReportingBrowsingDataRemover::DATA_TYPE_CLIENTS;
33 
34     if (!host.empty()) {
35       base::RepeatingCallback<bool(const url::Origin&)> origin_filter =
36           base::BindRepeating(&ReportingBrowsingDataRemoverTest::HostIs, host);
37       ReportingBrowsingDataRemover::RemoveBrowsingData(cache(), data_type_mask,
38                                                        origin_filter);
39     } else {
40       ReportingBrowsingDataRemover::RemoveAllBrowsingData(cache(),
41                                                           data_type_mask);
42     }
43   }
44 
45   // TODO(chlily): Take NAK.
AddReport(const GURL & url)46   void AddReport(const GURL& url) {
47     cache()->AddReport(std::nullopt, NetworkAnonymizationKey(), url,
48                        kUserAgent_, kGroup_, kType_, base::Value::Dict(), 0,
49                        tick_clock()->NowTicks(), 0);
50   }
51 
52   // TODO(chlily): Take NAK.
SetEndpoint(const url::Origin & origin)53   void SetEndpoint(const url::Origin& origin) {
54     SetEndpointInCache(
55         ReportingEndpointGroupKey(NetworkAnonymizationKey(), origin, kGroup_),
56         kEndpoint_, base::Time::Now() + base::Days(7));
57   }
58 
HostIs(std::string host,const url::Origin & origin)59   static bool HostIs(std::string host, const url::Origin& origin) {
60     return origin.host() == host;
61   }
62 
report_count()63   size_t report_count() {
64     std::vector<raw_ptr<const ReportingReport, VectorExperimental>> reports;
65     cache()->GetReports(&reports);
66     return reports.size();
67   }
68 
69   const GURL kUrl1_ = GURL("https://origin1/path");
70   const GURL kUrl2_ = GURL("https://origin2/path");
71   const url::Origin kOrigin1_ = url::Origin::Create(kUrl1_);
72   const url::Origin kOrigin2_ = url::Origin::Create(kUrl2_);
73   const GURL kEndpoint_ = GURL("https://endpoint/");
74   const std::string kUserAgent_ = "Mozilla/1.0";
75   const std::string kGroup_ = "group";
76   const std::string kType_ = "default";
77 };
78 
TEST_F(ReportingBrowsingDataRemoverTest,RemoveNothing)79 TEST_F(ReportingBrowsingDataRemoverTest, RemoveNothing) {
80   AddReport(kUrl1_);
81   AddReport(kUrl2_);
82 
83   SetEndpoint(kOrigin1_);
84   SetEndpoint(kOrigin2_);
85 
86   RemoveBrowsingData(/* remove_reports= */ false, /* remove_clients= */ false,
87                      /* host= */ "");
88   EXPECT_EQ(2u, report_count());
89   EXPECT_EQ(2u, cache()->GetEndpointCount());
90 }
91 
TEST_F(ReportingBrowsingDataRemoverTest,RemoveAllReports)92 TEST_F(ReportingBrowsingDataRemoverTest, RemoveAllReports) {
93   AddReport(kUrl1_);
94   AddReport(kUrl2_);
95 
96   SetEndpoint(kOrigin1_);
97   SetEndpoint(kOrigin2_);
98 
99   RemoveBrowsingData(/* remove_reports= */ true, /* remove_clients= */ false,
100                      /* host= */ "");
101   EXPECT_EQ(0u, report_count());
102   EXPECT_EQ(2u, cache()->GetEndpointCount());
103 }
104 
TEST_F(ReportingBrowsingDataRemoverTest,RemoveAllClients)105 TEST_F(ReportingBrowsingDataRemoverTest, RemoveAllClients) {
106   AddReport(kUrl1_);
107   AddReport(kUrl2_);
108 
109   SetEndpoint(kOrigin1_);
110   SetEndpoint(kOrigin2_);
111 
112   RemoveBrowsingData(/* remove_reports= */ false, /* remove_clients= */ true,
113                      /* host= */ "");
114   EXPECT_EQ(2u, report_count());
115   EXPECT_EQ(0u, cache()->GetEndpointCount());
116 }
117 
TEST_F(ReportingBrowsingDataRemoverTest,RemoveAllReportsAndClients)118 TEST_F(ReportingBrowsingDataRemoverTest, RemoveAllReportsAndClients) {
119   AddReport(kUrl1_);
120   AddReport(kUrl2_);
121 
122   SetEndpoint(kOrigin1_);
123   SetEndpoint(kOrigin2_);
124 
125   RemoveBrowsingData(/* remove_reports= */ true, /* remove_clients= */ true,
126                      /* host= */ "");
127   EXPECT_EQ(0u, report_count());
128   EXPECT_EQ(0u, cache()->GetEndpointCount());
129 }
130 
TEST_F(ReportingBrowsingDataRemoverTest,RemoveSomeReports)131 TEST_F(ReportingBrowsingDataRemoverTest, RemoveSomeReports) {
132   AddReport(kUrl1_);
133   AddReport(kUrl2_);
134 
135   SetEndpoint(kOrigin1_);
136   SetEndpoint(kOrigin2_);
137 
138   RemoveBrowsingData(/* remove_reports= */ true, /* remove_clients= */ false,
139                      /* host= */ kUrl1_.host());
140   EXPECT_EQ(2u, cache()->GetEndpointCount());
141 
142   std::vector<raw_ptr<const ReportingReport, VectorExperimental>> reports;
143   cache()->GetReports(&reports);
144   ASSERT_EQ(1u, reports.size());
145   EXPECT_EQ(kUrl2_, reports[0]->url);
146 }
147 
TEST_F(ReportingBrowsingDataRemoverTest,RemoveSomeClients)148 TEST_F(ReportingBrowsingDataRemoverTest, RemoveSomeClients) {
149   AddReport(kUrl1_);
150   AddReport(kUrl2_);
151 
152   SetEndpoint(kOrigin1_);
153   SetEndpoint(kOrigin2_);
154 
155   RemoveBrowsingData(/* remove_reports= */ false, /* remove_clients= */ true,
156                      /* host= */ kUrl1_.host());
157   EXPECT_EQ(2u, report_count());
158   EXPECT_FALSE(FindEndpointInCache(
159       ReportingEndpointGroupKey(NetworkAnonymizationKey(), kOrigin1_, kGroup_),
160       kEndpoint_));
161   EXPECT_TRUE(FindEndpointInCache(
162       ReportingEndpointGroupKey(NetworkAnonymizationKey(), kOrigin2_, kGroup_),
163       kEndpoint_));
164 }
165 
166 }  // namespace
167 }  // namespace net
168