Index: content/browser/net/sqlite_persistent_cookie_store.cc |
diff --git a/content/browser/net/sqlite_persistent_cookie_store.cc b/content/browser/net/sqlite_persistent_cookie_store.cc |
index c23692d475071502c2b8d1d081fab3ffdebd6095..fa4e87451f34b97c6c179f3d7495f867fa22545d 100644 |
--- a/content/browser/net/sqlite_persistent_cookie_store.cc |
+++ b/content/browser/net/sqlite_persistent_cookie_store.cc |
@@ -12,6 +12,7 @@ |
#include "base/basictypes.h" |
#include "base/bind.h" |
#include "base/callback.h" |
+#include "base/command_line.h" |
#include "base/file_util.h" |
#include "base/files/file_path.h" |
#include "base/location.h" |
@@ -28,6 +29,7 @@ |
#include "base/time/time.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/cookie_store_factory.h" |
+#include "content/public/common/content_switches.h" |
#include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
#include "net/cookies/canonical_cookie.h" |
#include "net/cookies/cookie_constants.h" |
@@ -1194,28 +1196,84 @@ SQLitePersistentCookieStore::~SQLitePersistentCookieStore() { |
// a reference if the background runner has not run Close() yet. |
} |
-net::CookieStore* CreatePersistentCookieStore( |
+CookieStoreConfig::CookieStoreConfig( |
+ bool in_memory, |
const base::FilePath& path, |
- bool restore_old_session_cookies, |
+ SessionCookieMode session_cookie_mode, |
quota::SpecialStoragePolicy* storage_policy, |
- net::CookieMonster::Delegate* cookie_monster_delegate) { |
+ net::CookieMonsterDelegate* cookie_delegate) |
+ : in_memory(in_memory), |
+ path(path), |
+ session_cookie_mode(session_cookie_mode), |
+ storage_policy(storage_policy), |
+ cookie_delegate(cookie_delegate) { |
+} |
+ |
+CookieStoreConfig::~CookieStoreConfig() { |
+} |
+ |
+CookieStoreConfig CookieStoreConfig::InMemory() { |
+ return CookieStoreConfig(true, base::FilePath(), EPHEMERAL_SESSION_COOKIES, |
+ NULL, NULL); |
+} |
+ |
+CookieStoreConfig CookieStoreConfig::InMemoryWithOptions( |
+ quota::SpecialStoragePolicy* storage_policy, |
+ net::CookieMonsterDelegate* cookie_delegate) { |
+ return CookieStoreConfig(true, base::FilePath(), |
+ EPHEMERAL_SESSION_COOKIES, storage_policy, |
+ cookie_delegate); |
+} |
+ |
+CookieStoreConfig CookieStoreConfig::Persistent( |
+ const base::FilePath& path, |
+ SessionCookieMode session_cookie_mode) { |
+ return CookieStoreConfig(false, path, session_cookie_mode, NULL, NULL); |
+} |
+ |
+CookieStoreConfig CookieStoreConfig::PersistentWithOptions( |
+ const base::FilePath& path, |
+ SessionCookieMode restore_old_session_cookies, |
+ quota::SpecialStoragePolicy* storage_policy, |
+ net::CookieMonsterDelegate* cookie_delegate) { |
+ return CookieStoreConfig(false, path, restore_old_session_cookies, |
+ storage_policy, cookie_delegate); |
+} |
+ |
+net::CookieStore* CreateCookieStore(const CookieStoreConfig& config) { |
+ if (config.in_memory) { |
+ return new net::CookieMonster(NULL, config.cookie_delegate); |
+ } |
+ |
SQLitePersistentCookieStore* persistent_store = |
new SQLitePersistentCookieStore( |
- path, |
+ config.path, |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO), |
BrowserThread::GetBlockingPool()->GetSequencedTaskRunner( |
BrowserThread::GetBlockingPool()->GetSequenceToken()), |
- restore_old_session_cookies, |
- storage_policy); |
+ (config.session_cookie_mode == |
+ CookieStoreConfig::RESTORED_SESSION_COOKIES), |
+ config.storage_policy); |
net::CookieMonster* cookie_monster = |
- new net::CookieMonster(persistent_store, cookie_monster_delegate); |
+ new net::CookieMonster(persistent_store, config.cookie_delegate); |
+ if ((config.session_cookie_mode == |
+ CookieStoreConfig::PERSISTANT_SESSION_COOKIES) || |
+ (config.session_cookie_mode == |
+ CookieStoreConfig::RESTORED_SESSION_COOKIES)) { |
+ cookie_monster->SetPersistSessionCookies(true); |
+ } |
+ |
+ if (CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableFileCookies)) { |
+ cookie_monster->SetEnableFileScheme(true); |
+ } |
const std::string cookie_priority_experiment_group = |
base::FieldTrialList::FindFullName("CookieRetentionPriorityStudy"); |
cookie_monster->SetPriorityAwareGarbageCollection( |
cookie_priority_experiment_group == "ExperimentOn"); |
- return cookie_monster; |
+ return cookie_monster; |
} |
} // namespace content |