blob: 8db18fe4a707569ca6e0def396078f0230ccf33f [file] [log] [blame]
juliatuttle381d77e2017-04-07 18:54:121// 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
5#include "net/reporting/reporting_service.h"
6
juliatuttlea35bbc82017-05-22 19:25:197#include <utility>
juliatuttle381d77e2017-04-07 18:54:128
juliatuttle1d92f0152017-04-28 17:19:219#include "base/bind.h"
juliatuttle381d77e2017-04-07 18:54:1210#include "base/macros.h"
juliatuttle381d77e2017-04-07 18:54:1211#include "base/time/tick_clock.h"
12#include "base/time/time.h"
13#include "base/values.h"
juliatuttleaeb1abc2017-05-04 21:14:3814#include "net/reporting/reporting_browsing_data_remover.h"
juliatuttle381d77e2017-04-07 18:54:1215#include "net/reporting/reporting_cache.h"
16#include "net/reporting/reporting_context.h"
juliatuttle587548912017-05-23 14:17:2117#include "net/reporting/reporting_delegate.h"
juliatuttle381d77e2017-04-07 18:54:1218#include "net/reporting/reporting_header_parser.h"
juliatuttle1d92f0152017-04-28 17:19:2119#include "net/reporting/reporting_persister.h"
juliatuttle381d77e2017-04-07 18:54:1220#include "url/gurl.h"
21
22namespace net {
23
24namespace {
25
26class ReportingServiceImpl : public ReportingService {
27 public:
28 ReportingServiceImpl(std::unique_ptr<ReportingContext> context)
juliatuttle42c57312017-04-28 03:01:3029 : context_(std::move(context)) {}
juliatuttle381d77e2017-04-07 18:54:1230
31 ~ReportingServiceImpl() override {}
32
33 void QueueReport(const GURL& url,
34 const std::string& group,
35 const std::string& type,
36 std::unique_ptr<const base::Value> body) override {
juliatuttle587548912017-05-23 14:17:2137 if (!context_->delegate()->CanQueueReport(url::Origin(url)))
38 return;
39
juliatuttle381d77e2017-04-07 18:54:1240 context_->cache()->AddReport(url, group, type, std::move(body),
41 context_->tick_clock()->NowTicks(), 0);
42 }
43
44 void ProcessHeader(const GURL& url,
45 const std::string& header_value) override {
juliatuttle381d77e2017-04-07 18:54:1246 ReportingHeaderParser::ParseHeader(context_.get(), url, header_value);
47 }
48
juliatuttleaeb1abc2017-05-04 21:14:3849 void RemoveBrowsingData(
50 int data_type_mask,
51 base::Callback<bool(const GURL&)> origin_filter) override {
juliatuttle91f43db2017-06-05 17:09:4952 ReportingBrowsingDataRemover::RemoveBrowsingData(
53 context_->cache(), data_type_mask, origin_filter);
juliatuttleaeb1abc2017-05-04 21:14:3854 }
55
juliatuttle381d77e2017-04-07 18:54:1256 private:
57 std::unique_ptr<ReportingContext> context_;
58
59 DISALLOW_COPY_AND_ASSIGN(ReportingServiceImpl);
60};
61
62} // namespace
63
64ReportingService::~ReportingService() {}
65
66// static
67std::unique_ptr<ReportingService> ReportingService::Create(
68 const ReportingPolicy& policy,
juliatuttle42c57312017-04-28 03:01:3069 URLRequestContext* request_context) {
Jeremy Roman0579ed62017-08-29 15:56:1970 return std::make_unique<ReportingServiceImpl>(
juliatuttle42c57312017-04-28 03:01:3071 ReportingContext::Create(policy, request_context));
juliatuttle381d77e2017-04-07 18:54:1272}
73
74// static
75std::unique_ptr<ReportingService> ReportingService::CreateForTesting(
76 std::unique_ptr<ReportingContext> reporting_context) {
Jeremy Roman0579ed62017-08-29 15:56:1977 return std::make_unique<ReportingServiceImpl>(std::move(reporting_context));
juliatuttle381d77e2017-04-07 18:54:1278}
79
80} // namespace net