| 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..bc5f3531ce1b2e50237b50f0538196a010ccecd3 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,89 @@ 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::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() | 
| +  : in_memory(true), | 
| +    session_cookie_mode(EPHEMERAL_SESSION_COOKIES) { | 
| +} | 
| + | 
| +CookieStoreConfig::~CookieStoreConfig() { | 
| +} | 
| + | 
| +CookieStoreConfig CookieStoreConfig::InMemory() { | 
| +  return CookieStoreConfig(true, base::FilePath(), EPHEMERAL_SESSION_COOKIES, | 
| +                           NULL, NULL); | 
| +} | 
| + | 
| +CookieStoreConfig CookieStoreConfig::InMemoryWithOptions( | 
| quota::SpecialStoragePolicy* storage_policy, | 
| -    net::CookieMonster::Delegate* cookie_monster_delegate) { | 
| +    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 | 
|  |