| 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 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 size_t idx = url_path.find_last_of('/'); | 95 size_t idx = url_path.find_last_of('/'); |
| 96 | 96 |
| 97 // The cookie path was invalid or a single '/'. | 97 // The cookie path was invalid or a single '/'. |
| 98 if (idx == 0 || idx == std::string::npos) | 98 if (idx == 0 || idx == std::string::npos) |
| 99 return std::string("/"); | 99 return std::string("/"); |
| 100 | 100 |
| 101 // Return up to the rightmost '/'. | 101 // Return up to the rightmost '/'. |
| 102 return url_path.substr(0, idx); | 102 return url_path.substr(0, idx); |
| 103 } | 103 } |
| 104 | 104 |
| 105 // Compares cookies using name, domain and path, so that "equivalent" cookies |
| 106 // (per RFC 2965) are equal to each other. |
| 107 int PartialCookieOrdering(const net::CanonicalCookie& a, |
| 108 const net::CanonicalCookie& b) { |
| 109 int diff = a.Name().compare(b.Name()); |
| 110 if (diff != 0) |
| 111 return diff; |
| 112 |
| 113 diff = a.Domain().compare(b.Domain()); |
| 114 if (diff != 0) |
| 115 return diff; |
| 116 |
| 117 return a.Path().compare(b.Path()); |
| 118 } |
| 119 |
| 105 } // namespace | 120 } // namespace |
| 106 | 121 |
| 107 CanonicalCookie::CanonicalCookie() | 122 CanonicalCookie::CanonicalCookie() |
| 108 : secure_(false), | 123 : secure_(false), |
| 109 httponly_(false) { | 124 httponly_(false) { |
| 110 } | 125 } |
| 111 | 126 |
| 112 CanonicalCookie::CanonicalCookie(const GURL& url, | 127 CanonicalCookie::CanonicalCookie(const GURL& url, |
| 113 const std::string& name, | 128 const std::string& name, |
| 114 const std::string& value, | 129 const std::string& value, |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 | 418 |
| 404 std::string CanonicalCookie::DebugString() const { | 419 std::string CanonicalCookie::DebugString() const { |
| 405 return base::StringPrintf( | 420 return base::StringPrintf( |
| 406 "name: %s value: %s domain: %s path: %s creation: %" | 421 "name: %s value: %s domain: %s path: %s creation: %" |
| 407 PRId64, | 422 PRId64, |
| 408 name_.c_str(), value_.c_str(), | 423 name_.c_str(), value_.c_str(), |
| 409 domain_.c_str(), path_.c_str(), | 424 domain_.c_str(), path_.c_str(), |
| 410 static_cast<int64>(creation_date_.ToTimeT())); | 425 static_cast<int64>(creation_date_.ToTimeT())); |
| 411 } | 426 } |
| 412 | 427 |
| 428 bool CanonicalCookie::PartialCompare(const CanonicalCookie& other) const { |
| 429 return PartialCookieOrdering(*this, other) < 0; |
| 430 } |
| 431 |
| 432 bool CanonicalCookie::FullCompare(const CanonicalCookie& other) const { |
| 433 // Do the partial comparison first. |
| 434 int diff = PartialCookieOrdering(*this, other); |
| 435 if (diff != 0) |
| 436 return diff < 0; |
| 437 |
| 438 DCHECK(IsEquivalent(other)); |
| 439 |
| 440 // Compare other fields. |
| 441 diff = Value().compare(other.Value()); |
| 442 if (diff != 0) |
| 443 return diff < 0; |
| 444 |
| 445 if (CreationDate() != other.CreationDate()) |
| 446 return CreationDate() < other.CreationDate(); |
| 447 |
| 448 if (ExpiryDate() != other.ExpiryDate()) |
| 449 return ExpiryDate() < other.ExpiryDate(); |
| 450 |
| 451 if (LastAccessDate() != other.LastAccessDate()) |
| 452 return LastAccessDate() < other.LastAccessDate(); |
| 453 |
| 454 if (IsSecure() != other.IsSecure()) |
| 455 return IsSecure(); |
| 456 |
| 457 if (IsHttpOnly() != other.IsHttpOnly()) |
| 458 return IsHttpOnly(); |
| 459 |
| 460 return Priority() < other.Priority(); |
| 461 } |
| 462 |
| 413 } // namespace net | 463 } // namespace net |
| OLD | NEW |