blob: 4a97c1591727c39e2f00c05d52b08a24c4ebb2ec [file] [log] [blame]
juliatuttle95fe3cc52017-06-30 23:05:311// 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 "content/browser/net/reporting_service_proxy.h"
6
7#include <memory>
8#include <string>
9#include <utility>
10
11#include "base/memory/ref_counted.h"
12#include "base/values.h"
13#include "content/public/browser/browser_context.h"
14#include "content/public/browser/site_instance.h"
15#include "content/public/browser/storage_partition.h"
16#include "mojo/public/cpp/bindings/strong_binding.h"
juliatuttle667c0bb2017-07-06 15:17:1317#include "net/reporting/reporting_report.h"
juliatuttle95fe3cc52017-06-30 23:05:3118#include "net/reporting/reporting_service.h"
19#include "net/url_request/url_request_context.h"
20#include "net/url_request/url_request_context_getter.h"
21#include "third_party/WebKit/public/platform/reporting.mojom.h"
22#include "url/gurl.h"
23
24namespace content {
25
26namespace {
27
Julia Tuttle6ae4dcb2017-09-08 21:41:2628class ReportingServiceProxyImpl : public blink::mojom::ReportingServiceProxy {
juliatuttle95fe3cc52017-06-30 23:05:3129 public:
30 ReportingServiceProxyImpl(
31 scoped_refptr<net::URLRequestContextGetter> request_context_getter)
32 : request_context_getter_(std::move(request_context_getter)) {}
33
Julia Tuttle6ae4dcb2017-09-08 21:41:2634 // blink::mojom::ReportingServiceProxy:
35
36 void QueueInterventionReport(const GURL& url,
37 const std::string& message,
38 const std::string& source_file,
39 int line_number) override {
40 auto body = std::make_unique<base::DictionaryValue>();
41 body->SetString("message", message);
42 body->SetString("sourceFile", source_file);
43 body->SetInteger("lineNumber", line_number);
44 QueueReport(url, "default", "intervention", std::move(body));
45 }
46
47 void QueueDeprecationReport(const GURL& url,
48 const std::string& message,
49 const std::string& source_file,
50 int line_number) override {
51 auto body = std::make_unique<base::DictionaryValue>();
52 body->SetString("message", message);
53 body->SetString("sourceFile", source_file);
54 body->SetInteger("lineNumber", line_number);
55 QueueReport(url, "default", "deprecation", std::move(body));
56 }
57
58 private:
juliatuttle95fe3cc52017-06-30 23:05:3159 void QueueReport(const GURL& url,
60 const std::string& group,
61 const std::string& type,
Julia Tuttle6ae4dcb2017-09-08 21:41:2662 std::unique_ptr<base::Value> body) {
juliatuttle95fe3cc52017-06-30 23:05:3163 net::URLRequestContext* request_context =
64 request_context_getter_->GetURLRequestContext();
juliatuttle667c0bb2017-07-06 15:17:1365 if (!request_context) {
66 net::ReportingReport::RecordReportDiscardedForNoURLRequestContext();
juliatuttle95fe3cc52017-06-30 23:05:3167 return;
juliatuttle667c0bb2017-07-06 15:17:1368 }
juliatuttle95fe3cc52017-06-30 23:05:3169
70 net::ReportingService* reporting_service =
71 request_context->reporting_service();
juliatuttle667c0bb2017-07-06 15:17:1372 if (!reporting_service) {
73 net::ReportingReport::RecordReportDiscardedForNoReportingService();
juliatuttle95fe3cc52017-06-30 23:05:3174 return;
juliatuttle667c0bb2017-07-06 15:17:1375 }
juliatuttle95fe3cc52017-06-30 23:05:3176
Jeremy Romand4b4d3d2017-09-01 19:12:5877 reporting_service->QueueReport(url, group, type, std::move(body));
juliatuttle95fe3cc52017-06-30 23:05:3178 }
79
juliatuttle95fe3cc52017-06-30 23:05:3180 scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
81};
82
83void CreateReportingServiceProxyOnNetworkTaskRunner(
Julia Tuttle6ae4dcb2017-09-08 21:41:2684 blink::mojom::ReportingServiceProxyRequest request,
juliatuttle95fe3cc52017-06-30 23:05:3185 scoped_refptr<net::URLRequestContextGetter> request_context_getter) {
Julia Tuttle6ae4dcb2017-09-08 21:41:2686 mojo::MakeStrongBinding(std::make_unique<ReportingServiceProxyImpl>(
juliatuttle95fe3cc52017-06-30 23:05:3187 std::move(request_context_getter)),
88 std::move(request));
89}
90
91} // namespace
92
93// static
94void CreateReportingServiceProxy(
95 StoragePartition* storage_partition,
Julia Tuttle6ae4dcb2017-09-08 21:41:2696 blink::mojom::ReportingServiceProxyRequest request) {
juliatuttle95fe3cc52017-06-30 23:05:3197 scoped_refptr<net::URLRequestContextGetter> request_context_getter(
98 storage_partition->GetURLRequestContext());
99 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner(
100 request_context_getter->GetNetworkTaskRunner());
101 network_task_runner->PostTask(
102 FROM_HERE,
103 base::BindOnce(&CreateReportingServiceProxyOnNetworkTaskRunner,
104 std::move(request), std::move(request_context_getter)));
105}
106
107} // namespace content