OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 30 matching lines...) Expand all Loading... |
41 * the terms of any one of the MPL, the GPL or the LGPL. | 41 * the terms of any one of the MPL, the GPL or the LGPL. |
42 * | 42 * |
43 * ***** END LICENSE BLOCK ***** */ | 43 * ***** END LICENSE BLOCK ***** */ |
44 | 44 |
45 #include "net/base/cookie_monster.h" | 45 #include "net/base/cookie_monster.h" |
46 | 46 |
47 #include <algorithm> | 47 #include <algorithm> |
48 | 48 |
49 #include "base/basictypes.h" | 49 #include "base/basictypes.h" |
50 #include "base/format_macros.h" | 50 #include "base/format_macros.h" |
| 51 #include "base/histogram.h" |
51 #include "base/logging.h" | 52 #include "base/logging.h" |
52 #include "base/scoped_ptr.h" | 53 #include "base/scoped_ptr.h" |
53 #include "base/string_tokenizer.h" | 54 #include "base/string_tokenizer.h" |
54 #include "base/string_util.h" | 55 #include "base/string_util.h" |
55 #include "googleurl/src/gurl.h" | 56 #include "googleurl/src/gurl.h" |
56 #include "googleurl/src/url_canon.h" | 57 #include "googleurl/src/url_canon.h" |
57 #include "net/base/net_util.h" | 58 #include "net/base/net_util.h" |
58 #include "net/base/registry_controlled_domain.h" | 59 #include "net/base/registry_controlled_domain.h" |
59 | 60 |
60 // #define COOKIE_LOGGING_ENABLED | 61 // #define COOKIE_LOGGING_ENABLED |
(...skipping 1629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1690 for (PairList::const_iterator it = pairs_.begin(); | 1691 for (PairList::const_iterator it = pairs_.begin(); |
1691 it != pairs_.end(); ++it) { | 1692 it != pairs_.end(); ++it) { |
1692 out.append(it->first); | 1693 out.append(it->first); |
1693 out.append("="); | 1694 out.append("="); |
1694 out.append(it->second); | 1695 out.append(it->second); |
1695 out.append("; "); | 1696 out.append("; "); |
1696 } | 1697 } |
1697 return out; | 1698 return out; |
1698 } | 1699 } |
1699 | 1700 |
| 1701 CookieMonster::CanonicalCookie::CanonicalCookie() { |
| 1702 } |
| 1703 |
| 1704 CookieMonster::CanonicalCookie::CanonicalCookie(const std::string& name, |
| 1705 const std::string& value, |
| 1706 const std::string& domain, |
| 1707 const std::string& path, |
| 1708 bool secure, |
| 1709 bool httponly, |
| 1710 const base::Time& creation, |
| 1711 const base::Time& last_access, |
| 1712 bool has_expires, |
| 1713 const base::Time& expires) |
| 1714 : name_(name), |
| 1715 value_(value), |
| 1716 domain_(domain), |
| 1717 path_(path), |
| 1718 creation_date_(creation), |
| 1719 last_access_date_(last_access), |
| 1720 expiry_date_(expires), |
| 1721 has_expires_(has_expires), |
| 1722 secure_(secure), |
| 1723 httponly_(httponly) { |
| 1724 } |
| 1725 |
1700 CookieMonster::CanonicalCookie::CanonicalCookie(const GURL& url, | 1726 CookieMonster::CanonicalCookie::CanonicalCookie(const GURL& url, |
1701 const ParsedCookie& pc) | 1727 const ParsedCookie& pc) |
1702 : name_(pc.Name()), | 1728 : name_(pc.Name()), |
1703 value_(pc.Value()), | 1729 value_(pc.Value()), |
1704 path_(CanonPath(url, pc)), | 1730 path_(CanonPath(url, pc)), |
1705 creation_date_(Time::Now()), | 1731 creation_date_(Time::Now()), |
1706 last_access_date_(Time()), | 1732 last_access_date_(Time()), |
1707 has_expires_(pc.HasExpires()), | 1733 has_expires_(pc.HasExpires()), |
1708 secure_(pc.IsSecure()), | 1734 secure_(pc.IsSecure()), |
1709 httponly_(pc.IsHttpOnly()) { | 1735 httponly_(pc.IsHttpOnly()) { |
1710 if (has_expires_) | 1736 if (has_expires_) |
1711 expiry_date_ = CanonExpiration(pc, creation_date_, CookieOptions()); | 1737 expiry_date_ = CanonExpiration(pc, creation_date_, CookieOptions()); |
1712 | 1738 |
1713 // Do the best we can with the domain. | 1739 // Do the best we can with the domain. |
1714 std::string cookie_domain; | 1740 std::string cookie_domain; |
1715 std::string domain_string; | 1741 std::string domain_string; |
1716 if (pc.HasDomain()) { | 1742 if (pc.HasDomain()) { |
1717 domain_string = pc.Domain(); | 1743 domain_string = pc.Domain(); |
1718 } | 1744 } |
1719 bool result | 1745 bool result |
1720 = GetCookieDomainWithString(url, domain_string, | 1746 = GetCookieDomainWithString(url, domain_string, |
1721 &cookie_domain); | 1747 &cookie_domain); |
1722 // Caller is responsible for passing in good arguments. | 1748 // Caller is responsible for passing in good arguments. |
1723 DCHECK(result); | 1749 DCHECK(result); |
1724 domain_ = cookie_domain; | 1750 domain_ = cookie_domain; |
1725 } | 1751 } |
1726 | 1752 |
| 1753 CookieMonster::CookieMonster(PersistentCookieStore* store, |
| 1754 Delegate* delegate, |
| 1755 int last_access_threshold_milliseconds) |
| 1756 : initialized_(false), |
| 1757 use_effective_domain_key_scheme_(use_effective_domain_key_default_), |
| 1758 store_(store), |
| 1759 last_access_threshold_(base::TimeDelta::FromMilliseconds( |
| 1760 last_access_threshold_milliseconds)), |
| 1761 delegate_(delegate), |
| 1762 last_statistic_record_time_(base::Time::Now()) { |
| 1763 InitializeHistograms(); |
| 1764 SetDefaultCookieableSchemes(); |
| 1765 } |
| 1766 |
| 1767 CookieMonster::CanonicalCookie::~CanonicalCookie() { |
| 1768 } |
| 1769 |
1727 CookieMonster::CanonicalCookie* CookieMonster::CanonicalCookie::Create( | 1770 CookieMonster::CanonicalCookie* CookieMonster::CanonicalCookie::Create( |
1728 const GURL& url, const std::string& name, const std::string& value, | 1771 const GURL& url, const std::string& name, const std::string& value, |
1729 const std::string& domain, const std::string& path, | 1772 const std::string& domain, const std::string& path, |
1730 const base::Time& creation_time, const base::Time& expiration_time, | 1773 const base::Time& creation_time, const base::Time& expiration_time, |
1731 bool secure, bool http_only) { | 1774 bool secure, bool http_only) { |
1732 // Expect valid attribute tokens and values, as defined by the ParsedCookie | 1775 // Expect valid attribute tokens and values, as defined by the ParsedCookie |
1733 // logic, otherwise don't create the cookie. | 1776 // logic, otherwise don't create the cookie. |
1734 std::string parsed_name = ParsedCookie::ParseTokenString(name); | 1777 std::string parsed_name = ParsedCookie::ParseTokenString(name); |
1735 if (parsed_name != name) | 1778 if (parsed_name != name) |
1736 return NULL; | 1779 return NULL; |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1842 std::string CookieMonster::CanonicalCookie::DebugString() const { | 1885 std::string CookieMonster::CanonicalCookie::DebugString() const { |
1843 return StringPrintf("name: %s value: %s domain: %s path: %s creation: %" | 1886 return StringPrintf("name: %s value: %s domain: %s path: %s creation: %" |
1844 PRId64, | 1887 PRId64, |
1845 name_.c_str(), value_.c_str(), | 1888 name_.c_str(), value_.c_str(), |
1846 domain_.c_str(), path_.c_str(), | 1889 domain_.c_str(), path_.c_str(), |
1847 static_cast<int64>(creation_date_.ToTimeT())); | 1890 static_cast<int64>(creation_date_.ToTimeT())); |
1848 } | 1891 } |
1849 | 1892 |
1850 } // namespace | 1893 } // namespace |
1851 | 1894 |
OLD | NEW |