| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/domain_reliability/header.h" | 5 #include "components/domain_reliability/header.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 | |
| 11 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| 12 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
| 13 #include "base/strings/string_tokenizer.h" | 12 #include "base/strings/string_tokenizer.h" |
| 14 #include "components/domain_reliability/config.h" | 13 #include "components/domain_reliability/config.h" |
| 15 #include "content/public/common/origin_util.h" | 14 #include "content/public/common/origin_util.h" |
| 16 | 15 |
| 17 namespace { | 16 namespace { |
| 18 | 17 |
| 19 // Parses directives in the format ("foo; bar=value for bar; baz; quux=123") | 18 // Parses directives in the format ("foo; bar=value for bar; baz; quux=123") |
| 20 // used by NEL. | 19 // used by NEL. |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 return false; | 150 return false; |
| 152 | 151 |
| 153 if ((first == '"') || (first == '<')) | 152 if ((first == '"') || (first == '<')) |
| 154 *out = in.substr(1, in.length() - 2); | 153 *out = in.substr(1, in.length() - 2); |
| 155 else | 154 else |
| 156 *out = in; | 155 *out = in; |
| 157 return true; | 156 return true; |
| 158 } | 157 } |
| 159 | 158 |
| 160 bool ParseReportUri(const std::vector<base::StringPiece> in, | 159 bool ParseReportUri(const std::vector<base::StringPiece> in, |
| 161 ScopedVector<GURL>* out) { | 160 std::vector<std::unique_ptr<GURL>>* out) { |
| 162 if (in.size() < 1u) | 161 if (in.size() < 1u) |
| 163 return false; | 162 return false; |
| 164 | 163 |
| 165 out->clear(); | 164 out->clear(); |
| 166 for (const auto& in_token : in) { | 165 for (const auto& in_token : in) { |
| 167 std::string unquoted; | 166 std::string unquoted; |
| 168 if (!Unquote(in_token.as_string(), &unquoted)) | 167 if (!Unquote(in_token.as_string(), &unquoted)) |
| 169 return false; | 168 return false; |
| 170 GURL url(unquoted); | 169 GURL url(unquoted); |
| 171 if (!url.is_valid() || !content::IsOriginSecure(url)) | 170 if (!url.is_valid() || !content::IsOriginSecure(url)) |
| 172 return false; | 171 return false; |
| 173 out->push_back(new GURL(url)); | 172 out->push_back(base::MakeUnique<GURL>(url)); |
| 174 } | 173 } |
| 175 | 174 |
| 176 return true; | 175 return true; |
| 177 } | 176 } |
| 178 | 177 |
| 179 bool ParseMaxAge(const std::vector<base::StringPiece> in, | 178 bool ParseMaxAge(const std::vector<base::StringPiece> in, |
| 180 base::TimeDelta* out) { | 179 base::TimeDelta* out) { |
| 181 if (in.size() != 1u) | 180 if (in.size() != 1u) |
| 182 return false; | 181 return false; |
| 183 | 182 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 194 | 193 |
| 195 } // namespace | 194 } // namespace |
| 196 | 195 |
| 197 namespace domain_reliability { | 196 namespace domain_reliability { |
| 198 | 197 |
| 199 DomainReliabilityHeader::~DomainReliabilityHeader() {} | 198 DomainReliabilityHeader::~DomainReliabilityHeader() {} |
| 200 | 199 |
| 201 // static | 200 // static |
| 202 std::unique_ptr<DomainReliabilityHeader> DomainReliabilityHeader::Parse( | 201 std::unique_ptr<DomainReliabilityHeader> DomainReliabilityHeader::Parse( |
| 203 base::StringPiece value) { | 202 base::StringPiece value) { |
| 204 ScopedVector<GURL> report_uri; | 203 std::vector<std::unique_ptr<GURL>> report_uri; |
| 205 base::TimeDelta max_age; | 204 base::TimeDelta max_age; |
| 206 bool include_subdomains = false; | 205 bool include_subdomains = false; |
| 207 | 206 |
| 208 bool got_report_uri = false; | 207 bool got_report_uri = false; |
| 209 bool got_max_age = false; | 208 bool got_max_age = false; |
| 210 bool got_include_subdomains = false; | 209 bool got_include_subdomains = false; |
| 211 | 210 |
| 212 DirectiveHeaderValueParser parser(value); | 211 DirectiveHeaderValueParser parser(value); |
| 213 while (parser.GetNext()) { | 212 while (parser.GetNext()) { |
| 214 base::StringPiece name = parser.directive_name(); | 213 base::StringPiece name = parser.directive_name(); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 } | 276 } |
| 278 | 277 |
| 279 std::string DomainReliabilityHeader::ToString() const { | 278 std::string DomainReliabilityHeader::ToString() const { |
| 280 std::string string = ""; | 279 std::string string = ""; |
| 281 int64_t max_age_s = max_age_.InSeconds(); | 280 int64_t max_age_s = max_age_.InSeconds(); |
| 282 | 281 |
| 283 if (config_->collectors.empty()) { | 282 if (config_->collectors.empty()) { |
| 284 DCHECK_EQ(0, max_age_s); | 283 DCHECK_EQ(0, max_age_s); |
| 285 } else { | 284 } else { |
| 286 string += "report-uri="; | 285 string += "report-uri="; |
| 287 for (const auto* uri : config_->collectors) | 286 for (const auto& uri : config_->collectors) |
| 288 string += uri->spec() + " "; | 287 string += uri->spec() + " "; |
| 289 // Remove trailing space. | 288 // Remove trailing space. |
| 290 string.erase(string.length() - 1, 1); | 289 string.erase(string.length() - 1, 1); |
| 291 string += "; "; | 290 string += "; "; |
| 292 } | 291 } |
| 293 | 292 |
| 294 string += "max-age=" + base::Int64ToString(max_age_s) + "; "; | 293 string += "max-age=" + base::Int64ToString(max_age_s) + "; "; |
| 295 | 294 |
| 296 if (config_->include_subdomains) | 295 if (config_->include_subdomains) |
| 297 string += "includeSubdomains; "; | 296 string += "includeSubdomains; "; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 311 ParseStatus status, | 310 ParseStatus status, |
| 312 std::unique_ptr<DomainReliabilityConfig> config, | 311 std::unique_ptr<DomainReliabilityConfig> config, |
| 313 base::TimeDelta max_age) | 312 base::TimeDelta max_age) |
| 314 : status_(status), config_(std::move(config)), max_age_(max_age) { | 313 : status_(status), config_(std::move(config)), max_age_(max_age) { |
| 315 DCHECK_EQ(PARSE_SET_CONFIG, status_); | 314 DCHECK_EQ(PARSE_SET_CONFIG, status_); |
| 316 DCHECK(config_.get()); | 315 DCHECK(config_.get()); |
| 317 DCHECK_NE(0, max_age_.InMicroseconds()); | 316 DCHECK_NE(0, max_age_.InMicroseconds()); |
| 318 } | 317 } |
| 319 | 318 |
| 320 } // namespace domain_reliability | 319 } // namespace domain_reliability |
| OLD | NEW |