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