Index: net/base/cookie_monster.h |
diff --git a/net/base/cookie_monster.h b/net/base/cookie_monster.h |
index 6d590921b0e4413f4260956c665334a0289d48c6..0c03813ca27dfdff97522bfdff098176d53c8870 100644 |
--- a/net/base/cookie_monster.h |
+++ b/net/base/cookie_monster.h |
@@ -275,6 +275,18 @@ class NET_EXPORT CookieMonster : public CookieStore { |
virtual CookieMonster* GetCookieMonster() OVERRIDE; |
+ // Enables writing session cookies into the cookie database. |
+ void SetPersistSessionCookies(bool persist_session_cookies); |
+ |
+ // Protects session cookies from deletion on shutdown. |
+ void SaveSessionCookies(); |
+ |
+ // Merges restored session cookies with other cookies. |
+ void RestoreOldSessionCookies(); |
+ |
+ // Discards restored session cookies. |
+ void DiscardOldSessionCookies(); |
+ |
// Debugging method to perform various validation checks on the map. |
// Currently just checking that there are no null CanonicalCookie pointers |
// in the map. |
@@ -352,6 +364,10 @@ class NET_EXPORT CookieMonster : public CookieStore { |
// already-expired expiration date. This captures that case. |
DELETE_COOKIE_EXPIRED_OVERWRITE, |
+ // Old session cookies can be explicitly deleted, and they also get |
+ // automatically deleted when trying to read / write them. |
+ DELETE_COOKIE_OLD_SESSION_COOKIE, |
+ |
DELETE_COOKIE_LAST_ENTRY |
}; |
@@ -517,7 +533,8 @@ class NET_EXPORT CookieMonster : public CookieStore { |
// Takes ownership of *cc. |
void InternalInsertCookie(const std::string& key, |
CanonicalCookie* cc, |
- bool sync_to_store); |
+ bool sync_to_store, |
+ bool notify); |
// Helper function that sets cookies with more control. |
// Not exposed as we don't want callers to have the ability |
@@ -673,6 +690,19 @@ class NET_EXPORT CookieMonster : public CookieStore { |
base::Time last_statistic_record_time_; |
bool keep_expired_cookies_; |
+ bool persist_session_cookies_; |
+ |
+ // Describes what to do with old session cookies. |
+ enum SessionCookieBehavior { |
+ // Keep old session cookies separate, don't return them when cookies are |
+ // read. |
+ SESSION_COOKIES_UNDECIDED, |
+ // Merge old session cookies in and treat them as normal cookies. |
+ SESSION_COOKIES_MERGE, |
+ // Discard old session cookies. |
+ SESSION_COOKIES_DELETE |
+ }; |
+ SessionCookieBehavior old_session_cookie_behavior_; |
static bool enable_file_scheme_; |
@@ -755,6 +785,14 @@ class NET_EXPORT CookieMonster::CanonicalCookie { |
return has_expires_ && current >= expiry_date_; |
} |
+ bool IsOldSessionCookie() const { |
+ return is_old_session_cookie_; |
+ } |
+ |
+ void SetIsOldSessionCookie(bool is_old_session_cookie) { |
+ is_old_session_cookie_ = is_old_session_cookie; |
+ } |
+ |
// Are the cookies considered equivalent in the eyes of RFC 2965. |
// The RFC says that name must match (case-sensitive), domain must |
// match (case insensitive), and path must match (case sensitive). |
@@ -809,6 +847,7 @@ class NET_EXPORT CookieMonster::CanonicalCookie { |
bool httponly_; |
bool has_expires_; |
bool is_persistent_; |
+ bool is_old_session_cookie_; |
}; |
class CookieMonster::Delegate |
@@ -984,6 +1023,8 @@ class CookieMonster::PersistentCookieStore |
// Flush the store and post the given Task when complete. |
virtual void Flush(Task* completion_task) = 0; |
+ virtual void DeleteSessionCookies() = 0; |
+ |
protected: |
PersistentCookieStore() {} |