OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/reporting/reporting_header_parser.h" | 5 #include "net/reporting/reporting_header_parser.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/json/json_reader.h" | 9 #include "base/json/json_reader.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/time/tick_clock.h" |
11 #include "base/time/time.h" | 12 #include "base/time/time.h" |
12 #include "base/values.h" | 13 #include "base/values.h" |
13 #include "net/reporting/reporting_cache.h" | 14 #include "net/reporting/reporting_cache.h" |
14 #include "url/gurl.h" | 15 #include "net/reporting/reporting_context.h" |
15 #include "url/origin.h" | |
16 | 16 |
17 namespace net { | 17 namespace net { |
18 | 18 |
19 namespace { | 19 namespace { |
20 | 20 |
21 const char kUrlKey[] = "url"; | 21 const char kUrlKey[] = "url"; |
22 const char kIncludeSubdomainsKey[] = "includeSubdomains"; | 22 const char kIncludeSubdomainsKey[] = "includeSubdomains"; |
23 const char kGroupKey[] = "group"; | 23 const char kGroupKey[] = "group"; |
24 const char kGroupDefaultValue[] = "default"; | 24 const char kGroupDefaultValue[] = "default"; |
25 const char kMaxAgeKey[] = "max-age"; | 25 const char kMaxAgeKey[] = "max-age"; |
26 | 26 |
27 } // namespace | 27 } // namespace |
28 | 28 |
29 // static | 29 // static |
30 void ReportingHeaderParser::ParseHeader(ReportingCache* cache, | 30 void ReportingHeaderParser::ParseHeader(ReportingContext* context, |
31 base::TimeTicks now, | |
32 const GURL& url, | 31 const GURL& url, |
33 const std::string& json_value) { | 32 const std::string& json_value) { |
34 DCHECK(url.SchemeIsCryptographic()); | 33 DCHECK(url.SchemeIsCryptographic()); |
35 | 34 |
36 std::unique_ptr<base::Value> value = | 35 std::unique_ptr<base::Value> value = |
37 base::JSONReader::Read("[" + json_value + "]"); | 36 base::JSONReader::Read("[" + json_value + "]"); |
38 if (!value) | 37 if (!value) |
39 return; | 38 return; |
40 | 39 |
41 const base::ListValue* list = nullptr; | 40 const base::ListValue* list = nullptr; |
42 bool is_list = value->GetAsList(&list); | 41 bool is_list = value->GetAsList(&list); |
43 DCHECK(is_list); | 42 DCHECK(is_list); |
44 | 43 |
| 44 ReportingCache* cache = context->cache(); |
| 45 base::TimeTicks now = context->tick_clock()->NowTicks(); |
45 for (size_t i = 0; i < list->GetSize(); i++) { | 46 for (size_t i = 0; i < list->GetSize(); i++) { |
46 const base::Value* endpoint = nullptr; | 47 const base::Value* endpoint = nullptr; |
47 bool got_endpoint = list->Get(i, &endpoint); | 48 bool got_endpoint = list->Get(i, &endpoint); |
48 DCHECK(got_endpoint); | 49 DCHECK(got_endpoint); |
49 ProcessEndpoint(cache, now, url, *endpoint); | 50 ProcessEndpoint(cache, now, url, *endpoint); |
50 } | 51 } |
51 } | 52 } |
52 | 53 |
53 // static | 54 // static |
54 void ReportingHeaderParser::ProcessEndpoint(ReportingCache* cache, | 55 void ReportingHeaderParser::ProcessEndpoint(ReportingCache* cache, |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 | 89 |
89 if (ttl_sec > 0) { | 90 if (ttl_sec > 0) { |
90 cache->SetClient(url::Origin(url), endpoint_url, subdomains, group, | 91 cache->SetClient(url::Origin(url), endpoint_url, subdomains, group, |
91 now + base::TimeDelta::FromSeconds(ttl_sec)); | 92 now + base::TimeDelta::FromSeconds(ttl_sec)); |
92 } else { | 93 } else { |
93 cache->RemoveClientForOriginAndEndpoint(url::Origin(url), endpoint_url); | 94 cache->RemoveClientForOriginAndEndpoint(url::Origin(url), endpoint_url); |
94 } | 95 } |
95 } | 96 } |
96 | 97 |
97 } // namespace net | 98 } // namespace net |
OLD | NEW |