Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Side by Side Diff: net/cookies/cookie_monster.cc

Issue 10694093: Remove the force_session cookie option, as it's not used anymore (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: patch for landing Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/cookies/cookie_monster.h ('k') | net/cookies/cookie_monster_store_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1174 matching lines...) Expand 10 before | Expand all | Expand 10 after
1185 1185
1186 // TODO(abarth): Take these values as parameters. 1186 // TODO(abarth): Take these values as parameters.
1187 std::string mac_key; 1187 std::string mac_key;
1188 std::string mac_algorithm; 1188 std::string mac_algorithm;
1189 1189
1190 scoped_ptr<CanonicalCookie> cc; 1190 scoped_ptr<CanonicalCookie> cc;
1191 cc.reset(CanonicalCookie::Create( 1191 cc.reset(CanonicalCookie::Create(
1192 url, name, value, domain, path, 1192 url, name, value, domain, path,
1193 mac_key, mac_algorithm, 1193 mac_key, mac_algorithm,
1194 creation_time, expiration_time, 1194 creation_time, expiration_time,
1195 secure, http_only, !expiration_time.is_null())); 1195 secure, http_only));
1196 1196
1197 if (!cc.get()) 1197 if (!cc.get())
1198 return false; 1198 return false;
1199 1199
1200 CookieOptions options; 1200 CookieOptions options;
1201 options.set_include_httponly(); 1201 options.set_include_httponly();
1202 return SetCanonicalCookie(&cc, creation_time, options); 1202 return SetCanonicalCookie(&cc, creation_time, options);
1203 } 1203 }
1204 1204
1205 bool CookieMonster::InitializeFrom(const CookieList& list) { 1205 bool CookieMonster::InitializeFrom(const CookieList& list) {
(...skipping 703 matching lines...) Expand 10 before | Expand all | Expand 10 after
1909 } 1909 }
1910 1910
1911 std::string cookie_path = CanonPath(url, pc); 1911 std::string cookie_path = CanonPath(url, pc);
1912 std::string mac_key = pc.HasMACKey() ? pc.MACKey() : std::string(); 1912 std::string mac_key = pc.HasMACKey() ? pc.MACKey() : std::string();
1913 std::string mac_algorithm = pc.HasMACAlgorithm() ? 1913 std::string mac_algorithm = pc.HasMACAlgorithm() ?
1914 pc.MACAlgorithm() : std::string(); 1914 pc.MACAlgorithm() : std::string();
1915 1915
1916 scoped_ptr<CanonicalCookie> cc; 1916 scoped_ptr<CanonicalCookie> cc;
1917 Time cookie_expires = CanonExpiration(pc, creation_time); 1917 Time cookie_expires = CanonExpiration(pc, creation_time);
1918 1918
1919 bool session_only = options.force_session() || cookie_expires.is_null();
1920 cc.reset(new CanonicalCookie(url, pc.Name(), pc.Value(), cookie_domain, 1919 cc.reset(new CanonicalCookie(url, pc.Name(), pc.Value(), cookie_domain,
1921 cookie_path, mac_key, mac_algorithm, 1920 cookie_path, mac_key, mac_algorithm,
1922 creation_time, cookie_expires, 1921 creation_time, cookie_expires,
1923 creation_time, pc.IsSecure(), pc.IsHttpOnly(), 1922 creation_time, pc.IsSecure(), pc.IsHttpOnly()));
1924 !cookie_expires.is_null(),
1925 !session_only));
1926 1923
1927 if (!cc.get()) { 1924 if (!cc.get()) {
1928 VLOG(kVlogSetCookies) << "WARNING: Failed to allocate CanonicalCookie"; 1925 VLOG(kVlogSetCookies) << "WARNING: Failed to allocate CanonicalCookie";
1929 return false; 1926 return false;
1930 } 1927 }
1931 return SetCanonicalCookie(&cc, creation_time, options); 1928 return SetCanonicalCookie(&cc, creation_time, options);
1932 } 1929 }
1933 1930
1934 bool CookieMonster::SetCanonicalCookie(scoped_ptr<CanonicalCookie>* cc, 1931 bool CookieMonster::SetCanonicalCookie(scoped_ptr<CanonicalCookie>* cc,
1935 const Time& creation_time, 1932 const Time& creation_time,
1936 const CookieOptions& options) { 1933 const CookieOptions& options) {
1937 const std::string key(GetKey((*cc)->Domain())); 1934 const std::string key(GetKey((*cc)->Domain()));
1938 bool already_expired = (*cc)->IsExpired(creation_time); 1935 bool already_expired = (*cc)->IsExpired(creation_time);
1939 if (DeleteAnyEquivalentCookie(key, **cc, options.exclude_httponly(), 1936 if (DeleteAnyEquivalentCookie(key, **cc, options.exclude_httponly(),
1940 already_expired)) { 1937 already_expired)) {
1941 VLOG(kVlogSetCookies) << "SetCookie() not clobbering httponly cookie"; 1938 VLOG(kVlogSetCookies) << "SetCookie() not clobbering httponly cookie";
1942 return false; 1939 return false;
1943 } 1940 }
1944 1941
1945 VLOG(kVlogSetCookies) << "SetCookie() key: " << key << " cc: " 1942 VLOG(kVlogSetCookies) << "SetCookie() key: " << key << " cc: "
1946 << (*cc)->DebugString(); 1943 << (*cc)->DebugString();
1947 1944
1948 // Realize that we might be setting an expired cookie, and the only point 1945 // Realize that we might be setting an expired cookie, and the only point
1949 // was to delete the cookie which we've already done. 1946 // was to delete the cookie which we've already done.
1950 if (!already_expired || keep_expired_cookies_) { 1947 if (!already_expired || keep_expired_cookies_) {
1951 // See InitializeHistograms() for details. 1948 // See InitializeHistograms() for details.
1952 if ((*cc)->DoesExpire()) { 1949 if ((*cc)->IsPersistent()) {
1953 histogram_expiration_duration_minutes_->Add( 1950 histogram_expiration_duration_minutes_->Add(
1954 ((*cc)->ExpiryDate() - creation_time).InMinutes()); 1951 ((*cc)->ExpiryDate() - creation_time).InMinutes());
1955 } 1952 }
1956 1953
1957 InternalInsertCookie(key, cc->release(), true); 1954 InternalInsertCookie(key, cc->release(), true);
1958 } 1955 }
1959 1956
1960 // We assume that hopefully setting a cookie will be less common than 1957 // We assume that hopefully setting a cookie will be less common than
1961 // querying a cookie. Since setting a cookie can put us over our limits, 1958 // querying a cookie. Since setting a cookie can put us over our limits,
1962 // make sure that we garbage collect... We can also make the assumption that 1959 // make sure that we garbage collect... We can also make the assumption that
(...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after
2602 } else if (pairs_[i].first == kHttpOnlyTokenName) { 2599 } else if (pairs_[i].first == kHttpOnlyTokenName) {
2603 httponly_index_ = i; 2600 httponly_index_ = i;
2604 } else { 2601 } else {
2605 /* some attribute we don't know or don't care about. */ 2602 /* some attribute we don't know or don't care about. */
2606 } 2603 }
2607 } 2604 }
2608 } 2605 }
2609 2606
2610 CookieMonster::CanonicalCookie::CanonicalCookie() 2607 CookieMonster::CanonicalCookie::CanonicalCookie()
2611 : secure_(false), 2608 : secure_(false),
2612 httponly_(false), 2609 httponly_(false) {
2613 has_expires_(false),
2614 is_persistent_(false) {
2615 SetSessionCookieExpiryTime(); 2610 SetSessionCookieExpiryTime();
2616 } 2611 }
2617 2612
2618 CookieMonster::CanonicalCookie::CanonicalCookie( 2613 CookieMonster::CanonicalCookie::CanonicalCookie(
2619 const GURL& url, const std::string& name, const std::string& value, 2614 const GURL& url, const std::string& name, const std::string& value,
2620 const std::string& domain, const std::string& path, 2615 const std::string& domain, const std::string& path,
2621 const std::string& mac_key, const std::string& mac_algorithm, 2616 const std::string& mac_key, const std::string& mac_algorithm,
2622 const base::Time& creation, const base::Time& expiration, 2617 const base::Time& creation, const base::Time& expiration,
2623 const base::Time& last_access, bool secure, bool httponly, bool has_expires, 2618 const base::Time& last_access, bool secure, bool httponly)
2624 bool is_persistent)
2625 : source_(GetCookieSourceFromURL(url)), 2619 : source_(GetCookieSourceFromURL(url)),
2626 name_(name), 2620 name_(name),
2627 value_(value), 2621 value_(value),
2628 domain_(domain), 2622 domain_(domain),
2629 path_(path), 2623 path_(path),
2630 mac_key_(mac_key), 2624 mac_key_(mac_key),
2631 mac_algorithm_(mac_algorithm), 2625 mac_algorithm_(mac_algorithm),
2632 creation_date_(creation), 2626 creation_date_(creation),
2633 expiry_date_(expiration), 2627 expiry_date_(expiration),
2634 last_access_date_(last_access), 2628 last_access_date_(last_access),
2635 secure_(secure), 2629 secure_(secure),
2636 httponly_(httponly), 2630 httponly_(httponly) {
2637 has_expires_(has_expires), 2631 if (expiration.is_null())
2638 is_persistent_(is_persistent) {
2639 if (!has_expires_) {
2640 DCHECK(!is_persistent_);
2641 SetSessionCookieExpiryTime(); 2632 SetSessionCookieExpiryTime();
2642 }
2643 } 2633 }
2644 2634
2645 CookieMonster::CanonicalCookie::CanonicalCookie(const GURL& url, 2635 CookieMonster::CanonicalCookie::CanonicalCookie(const GURL& url,
2646 const ParsedCookie& pc) 2636 const ParsedCookie& pc)
2647 : source_(GetCookieSourceFromURL(url)), 2637 : source_(GetCookieSourceFromURL(url)),
2648 name_(pc.Name()), 2638 name_(pc.Name()),
2649 value_(pc.Value()), 2639 value_(pc.Value()),
2650 path_(CanonPath(url, pc)), 2640 path_(CanonPath(url, pc)),
2651 mac_key_(pc.MACKey()), 2641 mac_key_(pc.MACKey()),
2652 mac_algorithm_(pc.MACAlgorithm()), 2642 mac_algorithm_(pc.MACAlgorithm()),
2653 creation_date_(Time::Now()), 2643 creation_date_(Time::Now()),
2654 last_access_date_(Time()), 2644 last_access_date_(Time()),
2655 secure_(pc.IsSecure()), 2645 secure_(pc.IsSecure()),
2656 httponly_(pc.IsHttpOnly()), 2646 httponly_(pc.IsHttpOnly()) {
2657 has_expires_(pc.HasExpires()), 2647 if (pc.HasExpires())
2658 is_persistent_(pc.HasExpires()) {
2659 if (has_expires_)
2660 expiry_date_ = CanonExpiration(pc, creation_date_); 2648 expiry_date_ = CanonExpiration(pc, creation_date_);
2661 else 2649 else
2662 SetSessionCookieExpiryTime(); 2650 SetSessionCookieExpiryTime();
2663 2651
2664 // Do the best we can with the domain. 2652 // Do the best we can with the domain.
2665 std::string cookie_domain; 2653 std::string cookie_domain;
2666 std::string domain_string; 2654 std::string domain_string;
2667 if (pc.HasDomain()) { 2655 if (pc.HasDomain()) {
2668 domain_string = pc.Domain(); 2656 domain_string = pc.Domain();
2669 } 2657 }
(...skipping 20 matching lines...) Expand all
2690 2678
2691 return url.GetOrigin().ReplaceComponents(replacements).spec(); 2679 return url.GetOrigin().ReplaceComponents(replacements).spec();
2692 } 2680 }
2693 2681
2694 void CookieMonster::CanonicalCookie::SetSessionCookieExpiryTime() { 2682 void CookieMonster::CanonicalCookie::SetSessionCookieExpiryTime() {
2695 #if defined(ENABLE_PERSISTENT_SESSION_COOKIES) 2683 #if defined(ENABLE_PERSISTENT_SESSION_COOKIES)
2696 // Mobile apps can sometimes be shut down without any warning, so the session 2684 // Mobile apps can sometimes be shut down without any warning, so the session
2697 // cookie has to be persistent and given a default expiration time. 2685 // cookie has to be persistent and given a default expiration time.
2698 expiry_date_ = base::Time::Now() + 2686 expiry_date_ = base::Time::Now() +
2699 base::TimeDelta::FromDays(kPersistentSessionCookieExpiryInDays); 2687 base::TimeDelta::FromDays(kPersistentSessionCookieExpiryInDays);
2700 has_expires_ = true;
2701 #endif 2688 #endif
2702 } 2689 }
2703 2690
2704 CookieMonster::CanonicalCookie* CookieMonster::CanonicalCookie::Create( 2691 CookieMonster::CanonicalCookie* CookieMonster::CanonicalCookie::Create(
2705 const GURL& url, 2692 const GURL& url,
2706 const ParsedCookie& pc) { 2693 const ParsedCookie& pc) {
2707 if (!pc.IsValid()) { 2694 if (!pc.IsValid()) {
2708 return NULL; 2695 return NULL;
2709 } 2696 }
2710 2697
2711 std::string domain_string; 2698 std::string domain_string;
2712 if (!GetCookieDomain(url, pc, &domain_string)) { 2699 if (!GetCookieDomain(url, pc, &domain_string)) {
2713 return NULL; 2700 return NULL;
2714 } 2701 }
2715 std::string path_string = CanonPath(url, pc); 2702 std::string path_string = CanonPath(url, pc);
2716 std::string mac_key = pc.HasMACKey() ? pc.MACKey() : std::string(); 2703 std::string mac_key = pc.HasMACKey() ? pc.MACKey() : std::string();
2717 std::string mac_algorithm = pc.HasMACAlgorithm() ? 2704 std::string mac_algorithm = pc.HasMACAlgorithm() ?
2718 pc.MACAlgorithm() : std::string(); 2705 pc.MACAlgorithm() : std::string();
2719 Time creation_time = Time::Now(); 2706 Time creation_time = Time::Now();
2720 Time expiration_time; 2707 Time expiration_time;
2721 if (pc.HasExpires()) 2708 if (pc.HasExpires())
2722 expiration_time = net::CookieMonster::ParseCookieTime(pc.Expires()); 2709 expiration_time = net::CookieMonster::ParseCookieTime(pc.Expires());
2723 2710
2724 return (Create(url, pc.Name(), pc.Value(), domain_string, path_string, 2711 return (Create(url, pc.Name(), pc.Value(), domain_string, path_string,
2725 mac_key, mac_algorithm, creation_time, expiration_time, 2712 mac_key, mac_algorithm, creation_time, expiration_time,
2726 pc.IsSecure(), pc.IsHttpOnly(), !expiration_time.is_null())); 2713 pc.IsSecure(), pc.IsHttpOnly()));
2727 } 2714 }
2728 2715
2729 CookieMonster::CanonicalCookie* CookieMonster::CanonicalCookie::Create( 2716 CookieMonster::CanonicalCookie* CookieMonster::CanonicalCookie::Create(
2730 const GURL& url, 2717 const GURL& url,
2731 const std::string& name, 2718 const std::string& name,
2732 const std::string& value, 2719 const std::string& value,
2733 const std::string& domain, 2720 const std::string& domain,
2734 const std::string& path, 2721 const std::string& path,
2735 const std::string& mac_key, 2722 const std::string& mac_key,
2736 const std::string& mac_algorithm, 2723 const std::string& mac_algorithm,
2737 const base::Time& creation, 2724 const base::Time& creation,
2738 const base::Time& expiration, 2725 const base::Time& expiration,
2739 bool secure, 2726 bool secure,
2740 bool http_only, 2727 bool http_only) {
2741 bool is_persistent) {
2742 // Expect valid attribute tokens and values, as defined by the ParsedCookie 2728 // Expect valid attribute tokens and values, as defined by the ParsedCookie
2743 // logic, otherwise don't create the cookie. 2729 // logic, otherwise don't create the cookie.
2744 std::string parsed_name = ParsedCookie::ParseTokenString(name); 2730 std::string parsed_name = ParsedCookie::ParseTokenString(name);
2745 if (parsed_name != name) 2731 if (parsed_name != name)
2746 return NULL; 2732 return NULL;
2747 std::string parsed_value = ParsedCookie::ParseValueString(value); 2733 std::string parsed_value = ParsedCookie::ParseValueString(value);
2748 if (parsed_value != value) 2734 if (parsed_value != value)
2749 return NULL; 2735 return NULL;
2750 2736
2751 std::string parsed_domain = ParsedCookie::ParseValueString(domain); 2737 std::string parsed_domain = ParsedCookie::ParseValueString(domain);
(...skipping 17 matching lines...) Expand all
2769 url_parse::Component path_component(0, cookie_path.length()); 2755 url_parse::Component path_component(0, cookie_path.length());
2770 url_canon::RawCanonOutputT<char> canon_path; 2756 url_canon::RawCanonOutputT<char> canon_path;
2771 url_parse::Component canon_path_component; 2757 url_parse::Component canon_path_component;
2772 url_canon::CanonicalizePath(cookie_path.data(), path_component, 2758 url_canon::CanonicalizePath(cookie_path.data(), path_component,
2773 &canon_path, &canon_path_component); 2759 &canon_path, &canon_path_component);
2774 cookie_path = std::string(canon_path.data() + canon_path_component.begin, 2760 cookie_path = std::string(canon_path.data() + canon_path_component.begin,
2775 canon_path_component.len); 2761 canon_path_component.len);
2776 2762
2777 return new CanonicalCookie(url, parsed_name, parsed_value, cookie_domain, 2763 return new CanonicalCookie(url, parsed_name, parsed_value, cookie_domain,
2778 cookie_path, mac_key, mac_algorithm, creation, 2764 cookie_path, mac_key, mac_algorithm, creation,
2779 expiration, creation, secure, http_only, 2765 expiration, creation, secure, http_only);
2780 !expiration.is_null(), is_persistent);
2781 } 2766 }
2782 2767
2783 bool CookieMonster::CanonicalCookie::IsOnPath( 2768 bool CookieMonster::CanonicalCookie::IsOnPath(
2784 const std::string& url_path) const { 2769 const std::string& url_path) const {
2785 2770
2786 // A zero length would be unsafe for our trailing '/' checks, and 2771 // A zero length would be unsafe for our trailing '/' checks, and
2787 // would also make no sense for our prefix match. The code that 2772 // would also make no sense for our prefix match. The code that
2788 // creates a CanonicalCookie should make sure the path is never zero length, 2773 // creates a CanonicalCookie should make sure the path is never zero length,
2789 // but we double check anyway. 2774 // but we double check anyway.
2790 if (path_.empty()) 2775 if (path_.empty())
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
2855 std::string CookieMonster::CanonicalCookie::DebugString() const { 2840 std::string CookieMonster::CanonicalCookie::DebugString() const {
2856 return base::StringPrintf( 2841 return base::StringPrintf(
2857 "name: %s value: %s domain: %s path: %s creation: %" 2842 "name: %s value: %s domain: %s path: %s creation: %"
2858 PRId64, 2843 PRId64,
2859 name_.c_str(), value_.c_str(), 2844 name_.c_str(), value_.c_str(),
2860 domain_.c_str(), path_.c_str(), 2845 domain_.c_str(), path_.c_str(),
2861 static_cast<int64>(creation_date_.ToTimeT())); 2846 static_cast<int64>(creation_date_.ToTimeT()));
2862 } 2847 }
2863 2848
2864 } // namespace 2849 } // namespace
OLDNEW
« no previous file with comments | « net/cookies/cookie_monster.h ('k') | net/cookies/cookie_monster_store_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698