Reporting: Plumb from //chrome/browser/browsing_data.
Reporting is a spec for delivering out-of-band reports from various
other parts of the browser. See http://wicg.github.io/reporting/ for
the spec, or https://goo.gl/pygX5I for details of the planned
implementation in Chromium.
This CL plumbs from Chromium's browsing data removal code to Reporting
(and also makes a few tweaks to Reporting's browsing data removal).
BUG=704259
Review-Url: https://codereview.chromium.org/2829683004
Cr-Commit-Position: refs/heads/master@{#469474}
diff --git a/net/reporting/reporting_browsing_data_remover.cc b/net/reporting/reporting_browsing_data_remover.cc
index 5041a47..a10bcf86 100644
--- a/net/reporting/reporting_browsing_data_remover.cc
+++ b/net/reporting/reporting_browsing_data_remover.cc
@@ -6,54 +6,82 @@
#include <vector>
+#include "base/memory/ptr_util.h"
#include "net/reporting/reporting_cache.h"
+#include "net/reporting/reporting_client.h"
#include "net/reporting/reporting_context.h"
#include "net/reporting/reporting_report.h"
namespace net {
+namespace {
+
+class ReportingBrowsingDataRemoverImpl : public ReportingBrowsingDataRemover {
+ public:
+ ReportingBrowsingDataRemoverImpl(ReportingContext* context)
+ : context_(context) {}
+
+ // ReportingBrowsingDataRemover implementation:
+
+ ~ReportingBrowsingDataRemoverImpl() override {}
+
+ void RemoveBrowsingData(
+ int data_type_mask,
+ base::Callback<bool(const GURL&)> origin_filter) override {
+ ReportingCache* cache = context_->cache();
+ bool remove_reports = (data_type_mask & DATA_TYPE_REPORTS) != 0;
+ bool remove_clients = (data_type_mask & DATA_TYPE_CLIENTS) != 0;
+
+ if (origin_filter.is_null()) {
+ if (remove_reports)
+ cache->RemoveAllReports();
+ if (remove_clients)
+ cache->RemoveAllClients();
+ return;
+ }
+
+ if (remove_reports) {
+ std::vector<const ReportingReport*> all_reports;
+ cache->GetReports(&all_reports);
+
+ std::vector<const ReportingReport*> reports_to_remove;
+ for (const ReportingReport* report : all_reports) {
+ if (origin_filter.Run(report->url))
+ reports_to_remove.push_back(report);
+ }
+
+ cache->RemoveReports(reports_to_remove);
+ }
+
+ if (remove_clients) {
+ std::vector<const ReportingClient*> all_clients;
+ cache->GetClients(&all_clients);
+
+ std::vector<const ReportingClient*> clients_to_remove;
+ for (const ReportingClient* client : all_clients) {
+ // TODO(juliatuttle): Examine client endpoint as well?
+ if (origin_filter.Run(client->origin.GetURL()))
+ clients_to_remove.push_back(client);
+ }
+
+ cache->RemoveClients(clients_to_remove);
+ }
+ }
+
+ private:
+ ReportingContext* context_;
+
+ DISALLOW_COPY_AND_ASSIGN(ReportingBrowsingDataRemoverImpl);
+};
+
+} // namespace
+
// static
-void ReportingBrowsingDataRemover::RemoveBrowsingData(
- ReportingContext* context,
- int data_type_mask,
- base::Callback<bool(const GURL&)> origin_filter) {
- ReportingCache* cache = context->cache();
- bool remove_reports = (data_type_mask & DATA_TYPE_REPORTS) != 0;
- bool remove_clients = (data_type_mask & DATA_TYPE_CLIENTS) != 0;
-
- if (origin_filter.is_null()) {
- if (remove_reports)
- cache->RemoveAllReports();
- if (remove_clients)
- cache->RemoveAllClients();
- return;
- }
-
- if (remove_reports) {
- std::vector<const ReportingReport*> all_reports;
- cache->GetReports(&all_reports);
-
- std::vector<const ReportingReport*> reports_to_remove;
- for (const ReportingReport* report : all_reports) {
- if (origin_filter.Run(report->url))
- reports_to_remove.push_back(report);
- }
-
- cache->RemoveReports(reports_to_remove);
- }
-
- if (remove_clients) {
- std::vector<const ReportingClient*> all_clients;
- cache->GetClients(&all_clients);
-
- std::vector<const ReportingClient*> clients_to_remove;
- for (const ReportingClient* client : all_clients) {
- if (origin_filter.Run(client->origin.GetURL()))
- clients_to_remove.push_back(client);
- }
-
- cache->RemoveClients(clients_to_remove);
- }
+std::unique_ptr<ReportingBrowsingDataRemover>
+ReportingBrowsingDataRemover::Create(ReportingContext* context) {
+ return base::MakeUnique<ReportingBrowsingDataRemoverImpl>(context);
}
+ReportingBrowsingDataRemover::~ReportingBrowsingDataRemover() {}
+
} // namespace net
diff --git a/net/reporting/reporting_browsing_data_remover.h b/net/reporting/reporting_browsing_data_remover.h
index db2bfb6d..77eda2b 100644
--- a/net/reporting/reporting_browsing_data_remover.h
+++ b/net/reporting/reporting_browsing_data_remover.h
@@ -5,6 +5,8 @@
#ifndef NET_REPORTING_REPORTING_BROWSING_DATA_REMOVER_H_
#define NET_REPORTING_REPORTING_BROWSING_DATA_REMOVER_H_
+#include <memory>
+
#include "base/callback.h"
#include "base/macros.h"
#include "net/base/net_export.h"
@@ -22,13 +24,20 @@
DATA_TYPE_CLIENTS = 0x2,
};
- static void RemoveBrowsingData(
- ReportingContext* context,
- int data_type_mask,
- base::Callback<bool(const GURL&)> origin_filter);
+ // Creates a ReportingBrowsingDataRemover. |context| must outlive the
+ // browsing data remover.
+ static std::unique_ptr<ReportingBrowsingDataRemover> Create(
+ ReportingContext* context);
- private:
- DISALLOW_IMPLICIT_CONSTRUCTORS(ReportingBrowsingDataRemover);
+ virtual ~ReportingBrowsingDataRemover();
+
+ // Removes browsing data from the Reporting system. |data_type_mask| specifies
+ // which types of data to remove: reports queued by browser features and/or
+ // clients (endpoints configured by origins). |origin_filter|, if not null,
+ // specifies which origins' data to remove.
+ virtual void RemoveBrowsingData(
+ int data_type_mask,
+ base::Callback<bool(const GURL&)> origin_filter) = 0;
};
} // namespace net
diff --git a/net/reporting/reporting_browsing_data_remover_unittest.cc b/net/reporting/reporting_browsing_data_remover_unittest.cc
index 349c5d53..5b05451 100644
--- a/net/reporting/reporting_browsing_data_remover_unittest.cc
+++ b/net/reporting/reporting_browsing_data_remover_unittest.cc
@@ -35,8 +35,7 @@
base::Bind(&ReportingBrowsingDataRemoverTest::HostIs, host);
}
- ReportingBrowsingDataRemover::RemoveBrowsingData(context(), data_type_mask,
- origin_filter);
+ browsing_data_remover()->RemoveBrowsingData(data_type_mask, origin_filter);
}
static bool HostIs(std::string host, const GURL& url) {
diff --git a/net/reporting/reporting_context.cc b/net/reporting/reporting_context.cc
index c6f01fd..5111611 100644
--- a/net/reporting/reporting_context.cc
+++ b/net/reporting/reporting_context.cc
@@ -14,6 +14,7 @@
#include "base/time/tick_clock.h"
#include "base/time/time.h"
#include "net/base/backoff_entry.h"
+#include "net/reporting/reporting_browsing_data_remover.h"
#include "net/reporting/reporting_cache.h"
#include "net/reporting/reporting_delivery_agent.h"
#include "net/reporting/reporting_endpoint_manager.h"
@@ -79,6 +80,7 @@
delivery_agent_(ReportingDeliveryAgent::Create(this)),
persister_(ReportingPersister::Create(this)),
garbage_collector_(ReportingGarbageCollector::Create(this)),
- network_change_observer_(ReportingNetworkChangeObserver::Create(this)) {}
+ network_change_observer_(ReportingNetworkChangeObserver::Create(this)),
+ browsing_data_remover_(ReportingBrowsingDataRemover::Create(this)) {}
} // namespace net
diff --git a/net/reporting/reporting_context.h b/net/reporting/reporting_context.h
index 34e95d3..f24fc2d7 100644
--- a/net/reporting/reporting_context.h
+++ b/net/reporting/reporting_context.h
@@ -20,6 +20,7 @@
namespace net {
+class ReportingBrowsingDataRemover;
class ReportingCache;
class ReportingDeliveryAgent;
class ReportingEndpointManager;
@@ -54,6 +55,9 @@
ReportingGarbageCollector* garbage_collector() {
return garbage_collector_.get();
}
+ ReportingBrowsingDataRemover* browsing_data_remover() {
+ return browsing_data_remover_.get();
+ }
ReportingPersister* persister() { return persister_.get(); }
@@ -95,6 +99,9 @@
// |network_change_observer_| must come after |cache_|.
std::unique_ptr<ReportingNetworkChangeObserver> network_change_observer_;
+ // |browsing_data_remover_| must come after |cache_|.
+ std::unique_ptr<ReportingBrowsingDataRemover> browsing_data_remover_;
+
DISALLOW_COPY_AND_ASSIGN(ReportingContext);
};
diff --git a/net/reporting/reporting_service.cc b/net/reporting/reporting_service.cc
index 0ba05c0..1da9100 100644
--- a/net/reporting/reporting_service.cc
+++ b/net/reporting/reporting_service.cc
@@ -12,6 +12,7 @@
#include "base/time/tick_clock.h"
#include "base/time/time.h"
#include "base/values.h"
+#include "net/reporting/reporting_browsing_data_remover.h"
#include "net/reporting/reporting_cache.h"
#include "net/reporting/reporting_context.h"
#include "net/reporting/reporting_header_parser.h"
@@ -42,6 +43,13 @@
ReportingHeaderParser::ParseHeader(context_.get(), url, header_value);
}
+ void RemoveBrowsingData(
+ int data_type_mask,
+ base::Callback<bool(const GURL&)> origin_filter) override {
+ context_->browsing_data_remover()->RemoveBrowsingData(data_type_mask,
+ origin_filter);
+ }
+
private:
std::unique_ptr<ReportingContext> context_;
diff --git a/net/reporting/reporting_service.h b/net/reporting/reporting_service.h
index 831e0711..2b010bd 100644
--- a/net/reporting/reporting_service.h
+++ b/net/reporting/reporting_service.h
@@ -59,6 +59,12 @@
virtual void ProcessHeader(const GURL& url,
const std::string& header_value) = 0;
+ // Removes browsing data from the Reporting system. See
+ // ReportingBrowsingDataRemover for more details.
+ virtual void RemoveBrowsingData(
+ int data_type_mask,
+ base::Callback<bool(const GURL&)> origin_filter) = 0;
+
protected:
ReportingService() {}
diff --git a/net/reporting/reporting_test_util.h b/net/reporting/reporting_test_util.h
index 48b63d9..6e64870 100644
--- a/net/reporting/reporting_test_util.h
+++ b/net/reporting/reporting_test_util.h
@@ -29,6 +29,7 @@
namespace net {
+class ReportingBrowsingDataRemover;
class ReportingCache;
struct ReportingClient;
class ReportingGarbageCollector;
@@ -145,6 +146,9 @@
ReportingGarbageCollector* garbage_collector() {
return context_->garbage_collector();
}
+ ReportingBrowsingDataRemover* browsing_data_remover() {
+ return context_->browsing_data_remover();
+ }
ReportingPersister* persister() { return context_->persister(); }
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc
index 2021906..4e41ba4 100644
--- a/net/url_request/url_request_unittest.cc
+++ b/net/url_request/url_request_unittest.cc
@@ -6657,6 +6657,12 @@
headers_.push_back({url, header_value});
}
+ void RemoveBrowsingData(
+ int data_type_mask,
+ base::Callback<bool(const GURL&)> origin_filter) override {
+ NOTIMPLEMENTED();
+ }
+
private:
std::vector<Header> headers_;
};