blob: 5888426547cac0cdf18b9a877db2397f5e96c062 [file] [log] [blame]
juliatuttle1690bc62017-03-29 17:16:021// 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#ifndef NET_REPORTING_REPORTING_HEADER_PARSER_H_
6#define NET_REPORTING_REPORTING_HEADER_PARSER_H_
7
Julia Tuttleec467a5f2018-02-22 20:22:458#include <memory>
juliatuttle1690bc62017-03-29 17:16:029
10#include "base/macros.h"
juliatuttle1690bc62017-03-29 17:16:0211#include "net/base/net_export.h"
Lily Chenefb6fcf2019-04-19 04:17:5412#include "url/gurl.h"
juliatuttle1690bc62017-03-29 17:16:0213
Julia Tuttleec467a5f2018-02-22 20:22:4514namespace base {
15class Value;
16} // namespace base
17
juliatuttle1690bc62017-03-29 17:16:0218namespace net {
19
juliatuttleee4b55e2017-04-07 17:09:4520class ReportingContext;
juliatuttle1690bc62017-03-29 17:16:0221
juliatuttle1690bc62017-03-29 17:16:0222class NET_EXPORT ReportingHeaderParser {
23 public:
Douglas Creager134b52e2018-11-09 18:00:1424 // Histograms. These are mainly used in test cases to verify that interesting
25 // events occurred.
26
27 static const char kHeaderOutcomeHistogram[];
28 static const char kHeaderEndpointGroupOutcomeHistogram[];
29 static const char kHeaderEndpointOutcomeHistogram[];
30
31 enum class HeaderOutcome {
32 DISCARDED_NO_REPORTING_SERVICE = 0,
33 DISCARDED_INVALID_SSL_INFO = 1,
34 DISCARDED_CERT_STATUS_ERROR = 2,
35 DISCARDED_JSON_TOO_BIG = 3,
36 DISCARDED_JSON_INVALID = 4,
37 PARSED = 5,
Lily Chenefb6fcf2019-04-19 04:17:5438 REMOVED_EMPTY = 6,
Douglas Creager134b52e2018-11-09 18:00:1439 MAX
40 };
41
42 enum class HeaderEndpointGroupOutcome {
43 DISCARDED_NOT_DICTIONARY = 0,
44 DISCARDED_GROUP_NOT_STRING = 1,
45 DISCARDED_TTL_MISSING = 2,
46 DISCARDED_TTL_NOT_INTEGER = 3,
47 DISCARDED_TTL_NEGATIVE = 4,
48 DISCARDED_ENDPOINTS_MISSING = 5,
49 DISCARDED_ENDPOINTS_NOT_LIST = 6,
50
51 PARSED = 7,
Lily Chenefb6fcf2019-04-19 04:17:5452 REMOVED_TTL_ZERO = 8,
53 REMOVED_EMPTY = 9,
Lily Chena5b78cff2019-07-19 22:10:5254 DISCARDED_INCLUDE_SUBDOMAINS_NOT_ALLOWED = 10,
Douglas Creager134b52e2018-11-09 18:00:1455 MAX
56 };
57
58 enum class HeaderEndpointOutcome {
59 DISCARDED_NOT_DICTIONARY = 0,
60 DISCARDED_URL_MISSING = 1,
61 DISCARDED_URL_NOT_STRING = 2,
62 DISCARDED_URL_INVALID = 3,
63 DISCARDED_URL_INSECURE = 4,
64 DISCARDED_PRIORITY_NOT_INTEGER = 5,
65 DISCARDED_WEIGHT_NOT_INTEGER = 6,
Lily Chenefb6fcf2019-04-19 04:17:5466 DISCARDED_WEIGHT_NEGATIVE = 7,
Douglas Creager134b52e2018-11-09 18:00:1467
Lily Chenefb6fcf2019-04-19 04:17:5468 REMOVED = 8, // Obsolete: removing for max_age: 0 is done on a group basis.
Douglas Creager134b52e2018-11-09 18:00:1469 SET_REJECTED_BY_DELEGATE = 9,
70 SET = 10,
Lily Chenefb6fcf2019-04-19 04:17:5471 DISCARDED_PRIORITY_NEGATIVE = 11,
Douglas Creager134b52e2018-11-09 18:00:1472
73 MAX
74 };
75
juliatuttle667c0bb2017-07-06 15:17:1376 static void RecordHeaderDiscardedForNoReportingService();
77 static void RecordHeaderDiscardedForInvalidSSLInfo();
78 static void RecordHeaderDiscardedForCertStatusError();
Julia Tuttleef19cb52018-03-16 16:58:3579 static void RecordHeaderDiscardedForJsonInvalid();
80 static void RecordHeaderDiscardedForJsonTooBig();
juliatuttle667c0bb2017-07-06 15:17:1381
juliatuttleee4b55e2017-04-07 17:09:4582 static void ParseHeader(ReportingContext* context,
juliatuttle1690bc62017-03-29 17:16:0283 const GURL& url,
Julia Tuttleec467a5f2018-02-22 20:22:4584 std::unique_ptr<base::Value> value);
juliatuttle1690bc62017-03-29 17:16:0285
86 private:
juliatuttle1690bc62017-03-29 17:16:0287 DISALLOW_IMPLICIT_CONSTRUCTORS(ReportingHeaderParser);
88};
89
90} // namespace net
91
92#endif // NET_REPORTING_REPORTING_HEADER_PARSER_H_