OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // Portions of this code based on Mozilla: | 5 // Portions of this code based on Mozilla: |
6 // (netwerk/cookie/src/nsCookieService.cpp) | 6 // (netwerk/cookie/src/nsCookieService.cpp) |
7 /* ***** BEGIN LICENSE BLOCK ***** | 7 /* ***** BEGIN LICENSE BLOCK ***** |
8 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | 8 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
9 * | 9 * |
10 * The contents of this file are subject to the Mozilla Public License Version | 10 * The contents of this file are subject to the Mozilla Public License Version |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 | 90 |
91 } // namespace | 91 } // namespace |
92 | 92 |
93 CanonicalCookie::CanonicalCookie() | 93 CanonicalCookie::CanonicalCookie() |
94 : secure_(false), | 94 : secure_(false), |
95 httponly_(false) { | 95 httponly_(false) { |
96 } | 96 } |
97 | 97 |
98 CanonicalCookie::CanonicalCookie(const CanonicalCookie& other) = default; | 98 CanonicalCookie::CanonicalCookie(const CanonicalCookie& other) = default; |
99 | 99 |
| 100 CanonicalCookie::CanonicalCookie(const std::string& name, |
| 101 const std::string& value, |
| 102 const std::string& domain, |
| 103 const std::string& path, |
| 104 const base::Time& creation, |
| 105 const base::Time& expiration, |
| 106 const base::Time& last_access, |
| 107 bool secure, |
| 108 bool httponly, |
| 109 CookieSameSite same_site, |
| 110 CookiePriority priority) |
| 111 : name_(name), |
| 112 value_(value), |
| 113 domain_(domain), |
| 114 path_(path), |
| 115 creation_date_(creation), |
| 116 expiry_date_(expiration), |
| 117 last_access_date_(last_access), |
| 118 secure_(secure), |
| 119 httponly_(httponly), |
| 120 same_site_(same_site), |
| 121 priority_(priority) {} |
| 122 |
100 CanonicalCookie::~CanonicalCookie() {} | 123 CanonicalCookie::~CanonicalCookie() {} |
101 | 124 |
102 // static | 125 // static |
103 std::string CanonicalCookie::CanonPathWithString( | 126 std::string CanonicalCookie::CanonPathWithString( |
104 const GURL& url, | 127 const GURL& url, |
105 const std::string& path_string) { | 128 const std::string& path_string) { |
106 // The RFC says the path should be a prefix of the current URL path. | 129 // The RFC says the path should be a prefix of the current URL path. |
107 // However, Mozilla allows you to set any path for compatibility with | 130 // However, Mozilla allows you to set any path for compatibility with |
108 // broken websites. We unfortunately will mimic this behavior. We try | 131 // broken websites. We unfortunately will mimic this behavior. We try |
109 // to be generous and accept cookies with an invalid path attribute, and | 132 // to be generous and accept cookies with an invalid path attribute, and |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 return nullptr; | 238 return nullptr; |
216 } | 239 } |
217 | 240 |
218 return base::WrapUnique(new CanonicalCookie( | 241 return base::WrapUnique(new CanonicalCookie( |
219 parsed_cookie.Name(), parsed_cookie.Value(), cookie_domain, cookie_path, | 242 parsed_cookie.Name(), parsed_cookie.Value(), cookie_domain, cookie_path, |
220 creation_time, cookie_expires, creation_time, parsed_cookie.IsSecure(), | 243 creation_time, cookie_expires, creation_time, parsed_cookie.IsSecure(), |
221 parsed_cookie.IsHttpOnly(), parsed_cookie.SameSite(), | 244 parsed_cookie.IsHttpOnly(), parsed_cookie.SameSite(), |
222 parsed_cookie.Priority())); | 245 parsed_cookie.Priority())); |
223 } | 246 } |
224 | 247 |
225 // static | |
226 std::unique_ptr<CanonicalCookie> CanonicalCookie::Create( | |
227 const std::string& name, | |
228 const std::string& value, | |
229 const std::string& domain, | |
230 const std::string& path, | |
231 const base::Time& creation, | |
232 const base::Time& expiration, | |
233 const base::Time& last_access, | |
234 bool secure, | |
235 bool http_only, | |
236 CookieSameSite same_site, | |
237 CookiePriority priority) { | |
238 DCHECK(!name.empty()); | |
239 DCHECK(!path.empty()); | |
240 | |
241 return base::WrapUnique( | |
242 new CanonicalCookie(name, value, domain, path, creation, expiration, | |
243 last_access, secure, http_only, same_site, priority)); | |
244 } | |
245 | |
246 bool CanonicalCookie::IsEquivalentForSecureCookieMatching( | 248 bool CanonicalCookie::IsEquivalentForSecureCookieMatching( |
247 const CanonicalCookie& ecc) const { | 249 const CanonicalCookie& ecc) const { |
248 return (name_ == ecc.Name() && (ecc.IsDomainMatch(DomainWithoutDot()) || | 250 return (name_ == ecc.Name() && (ecc.IsDomainMatch(DomainWithoutDot()) || |
249 IsDomainMatch(ecc.DomainWithoutDot())) && | 251 IsDomainMatch(ecc.DomainWithoutDot())) && |
250 ecc.IsOnPath(Path())); | 252 ecc.IsOnPath(Path())); |
251 } | 253 } |
252 | 254 |
253 bool CanonicalCookie::IsOnPath(const std::string& url_path) const { | 255 bool CanonicalCookie::IsOnPath(const std::string& url_path) const { |
254 | 256 |
255 // A zero length would be unsafe for our trailing '/' checks, and | 257 // A zero length would be unsafe for our trailing '/' checks, and |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 | 392 |
391 if (IsSecure() != other.IsSecure()) | 393 if (IsSecure() != other.IsSecure()) |
392 return IsSecure(); | 394 return IsSecure(); |
393 | 395 |
394 if (IsHttpOnly() != other.IsHttpOnly()) | 396 if (IsHttpOnly() != other.IsHttpOnly()) |
395 return IsHttpOnly(); | 397 return IsHttpOnly(); |
396 | 398 |
397 return Priority() < other.Priority(); | 399 return Priority() < other.Priority(); |
398 } | 400 } |
399 | 401 |
400 CanonicalCookie::CanonicalCookie(const std::string& name, | |
401 const std::string& value, | |
402 const std::string& domain, | |
403 const std::string& path, | |
404 const base::Time& creation, | |
405 const base::Time& expiration, | |
406 const base::Time& last_access, | |
407 bool secure, | |
408 bool httponly, | |
409 CookieSameSite same_site, | |
410 CookiePriority priority) | |
411 : name_(name), | |
412 value_(value), | |
413 domain_(domain), | |
414 path_(path), | |
415 creation_date_(creation), | |
416 expiry_date_(expiration), | |
417 last_access_date_(last_access), | |
418 secure_(secure), | |
419 httponly_(httponly), | |
420 same_site_(same_site), | |
421 priority_(priority) {} | |
422 | |
423 // static | 402 // static |
424 CanonicalCookie::CookiePrefix CanonicalCookie::GetCookiePrefix( | 403 CanonicalCookie::CookiePrefix CanonicalCookie::GetCookiePrefix( |
425 const std::string& name) { | 404 const std::string& name) { |
426 const char kSecurePrefix[] = "__Secure-"; | 405 const char kSecurePrefix[] = "__Secure-"; |
427 const char kHostPrefix[] = "__Host-"; | 406 const char kHostPrefix[] = "__Host-"; |
428 if (base::StartsWith(name, kSecurePrefix, base::CompareCase::SENSITIVE)) | 407 if (base::StartsWith(name, kSecurePrefix, base::CompareCase::SENSITIVE)) |
429 return CanonicalCookie::COOKIE_PREFIX_SECURE; | 408 return CanonicalCookie::COOKIE_PREFIX_SECURE; |
430 if (base::StartsWith(name, kHostPrefix, base::CompareCase::SENSITIVE)) | 409 if (base::StartsWith(name, kHostPrefix, base::CompareCase::SENSITIVE)) |
431 return CanonicalCookie::COOKIE_PREFIX_HOST; | 410 return CanonicalCookie::COOKIE_PREFIX_HOST; |
432 return CanonicalCookie::COOKIE_PREFIX_NONE; | 411 return CanonicalCookie::COOKIE_PREFIX_NONE; |
(...skipping 30 matching lines...) Expand all Loading... |
463 return true; | 442 return true; |
464 } | 443 } |
465 | 444 |
466 std::string CanonicalCookie::DomainWithoutDot() const { | 445 std::string CanonicalCookie::DomainWithoutDot() const { |
467 if (domain_.empty() || domain_[0] != '.') | 446 if (domain_.empty() || domain_[0] != '.') |
468 return domain_; | 447 return domain_; |
469 return domain_.substr(1); | 448 return domain_.substr(1); |
470 } | 449 } |
471 | 450 |
472 } // namespace net | 451 } // namespace net |
OLD | NEW |