Index: net/base/cookie_monster.cc |
diff --git a/net/base/cookie_monster.cc b/net/base/cookie_monster.cc |
index 03061c6851041bf6b9e2a6ab707a52b57f076fde..fd11926843a368ff98aebed2d212c3daa010df8f 100644 |
--- a/net/base/cookie_monster.cc |
+++ b/net/base/cookie_monster.cc |
@@ -370,7 +370,8 @@ CookieMonster::CookieMonster(PersistentCookieStore* store, Delegate* delegate) |
TimeDelta::FromSeconds(kDefaultAccessUpdateThresholdSeconds)), |
delegate_(delegate), |
last_statistic_record_time_(Time::Now()), |
- keep_expired_cookies_(false) { |
+ keep_expired_cookies_(false), |
+ persist_session_cookies_(false) { |
InitializeHistograms(); |
SetDefaultCookieableSchemes(); |
} |
@@ -386,7 +387,8 @@ CookieMonster::CookieMonster(PersistentCookieStore* store, |
last_access_threshold_milliseconds)), |
delegate_(delegate), |
last_statistic_record_time_(base::Time::Now()), |
- keep_expired_cookies_(false) { |
+ keep_expired_cookies_(false), |
+ persist_session_cookies_(false) { |
InitializeHistograms(); |
SetDefaultCookieableSchemes(); |
} |
@@ -1399,6 +1401,18 @@ CookieMonster* CookieMonster::GetCookieMonster() { |
return this; |
} |
+void CookieMonster::SetPersistSessionCookies(bool persist_session_cookies) { |
+ // This function must be called before the CookieMonster is used. |
+ DCHECK(!initialized_); |
+ persist_session_cookies_ = persist_session_cookies; |
+} |
+ |
+void CookieMonster::SaveSessionCookies() { |
+ if (store_) { |
+ store_->SetClearLocalStateOnExit(false); |
+ } |
+} |
+ |
CookieMonster::~CookieMonster() { |
DeleteAll(false); |
} |
@@ -1774,7 +1788,8 @@ void CookieMonster::InternalInsertCookie(const std::string& key, |
bool sync_to_store) { |
lock_.AssertAcquired(); |
- if (cc->IsPersistent() && store_ && sync_to_store) |
+ if ((cc->IsPersistent() || persist_session_cookies_) && |
+ store_ && sync_to_store) |
store_->AddCookie(*cc); |
cookies_.insert(CookieMap::value_type(key, cc)); |
if (delegate_.get()) { |
@@ -1891,7 +1906,7 @@ void CookieMonster::InternalUpdateCookieAccessTime(CanonicalCookie* cc, |
(current - cc->LastAccessDate()).InMinutes()); |
cc->SetLastAccessDate(current); |
- if (cc->IsPersistent() && store_) |
+ if ((cc->IsPersistent() || persist_session_cookies_) && store_) |
store_->UpdateCookieAccessTime(*cc); |
} |
@@ -1913,7 +1928,8 @@ void CookieMonster::InternalDeleteCookie(CookieMap::iterator it, |
CanonicalCookie* cc = it->second; |
VLOG(kVlogSetCookies) << "InternalDeleteCookie() cc: " << cc->DebugString(); |
- if (cc->IsPersistent() && store_ && sync_to_store) |
+ if ((cc->IsPersistent() || persist_session_cookies_) |
+ && store_ && sync_to_store) |
store_->DeleteCookie(*cc); |
if (delegate_.get()) { |
ChangeCausePair mapping = ChangeCauseMapping[deletion_cause]; |