• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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