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 6386f85d3cb22b65f26e025c95ff76c24af35b91..e645d846eb524f3a9ac8eb7923bf4931a7f1edf5 100644 |
--- a/content/browser/net/sqlite_persistent_cookie_store.cc |
+++ b/content/browser/net/sqlite_persistent_cookie_store.cc |
@@ -77,7 +77,7 @@ class SQLitePersistentCookieStore::Backend |
const scoped_refptr<base::SequencedTaskRunner>& background_task_runner, |
bool restore_old_session_cookies, |
quota::SpecialStoragePolicy* special_storage_policy, |
- scoped_ptr<CookieCryptoDelegate> crypto_delegate) |
+ CookieCryptoDelegate* crypto_delegate) |
: path_(path), |
num_pending_(0), |
force_keep_session_state_(false), |
@@ -90,7 +90,7 @@ class SQLitePersistentCookieStore::Backend |
background_task_runner_(background_task_runner), |
num_priority_waiting_(0), |
total_priority_requests_(0), |
- crypto_(crypto_delegate.Pass()) {} |
+ crypto_(crypto_delegate) {} |
// Creates or loads the SQLite database. |
void Load(const LoadedCallback& loaded_callback); |
@@ -275,7 +275,9 @@ class SQLitePersistentCookieStore::Backend |
base::TimeDelta priority_wait_duration_; |
// Class with functions that do cryptographic operations (for protecting |
// cookies stored persistently). |
- scoped_ptr<CookieCryptoDelegate> crypto_; |
+ // |
+ // Not owned. |
+ CookieCryptoDelegate* crypto_; |
DISALLOW_COPY_AND_ASSIGN(Backend); |
}; |
@@ -719,7 +721,7 @@ bool SQLitePersistentCookieStore::Backend::LoadCookiesForDomains( |
while (smt.Step()) { |
std::string value; |
std::string encrypted_value = smt.ColumnString(4); |
- if (!encrypted_value.empty() && crypto_.get()) { |
+ if (!encrypted_value.empty() && crypto_) { |
crypto_->DecryptString(encrypted_value, &value); |
} else { |
DCHECK(encrypted_value.empty()); |
@@ -998,7 +1000,7 @@ void SQLitePersistentCookieStore::Backend::Commit() { |
add_smt.BindInt64(0, po->cc().CreationDate().ToInternalValue()); |
add_smt.BindString(1, po->cc().Domain()); |
add_smt.BindString(2, po->cc().Name()); |
- if (crypto_.get()) { |
+ if (crypto_) { |
std::string encrypted_value; |
add_smt.BindCString(3, ""); // value |
crypto_->EncryptString(po->cc().Value(), &encrypted_value); |
@@ -1204,13 +1206,13 @@ SQLitePersistentCookieStore::SQLitePersistentCookieStore( |
const scoped_refptr<base::SequencedTaskRunner>& background_task_runner, |
bool restore_old_session_cookies, |
quota::SpecialStoragePolicy* special_storage_policy, |
- scoped_ptr<CookieCryptoDelegate> crypto_delegate) |
+ CookieCryptoDelegate* crypto_delegate) |
: backend_(new Backend(path, |
client_task_runner, |
background_task_runner, |
restore_old_session_cookies, |
special_storage_policy, |
- crypto_delegate.Pass())) { |
+ crypto_delegate)) { |
} |
void SQLitePersistentCookieStore::Load(const LoadedCallback& loaded_callback) { |
@@ -1250,25 +1252,70 @@ SQLitePersistentCookieStore::~SQLitePersistentCookieStore() { |
// a reference if the background runner has not run Close() yet. |
} |
-net::CookieStore* CreatePersistentCookieStore( |
- const base::FilePath& path, |
- bool restore_old_session_cookies, |
- quota::SpecialStoragePolicy* storage_policy, |
- net::CookieMonster::Delegate* cookie_monster_delegate, |
- const scoped_refptr<base::SequencedTaskRunner>& client_task_runner, |
- const scoped_refptr<base::SequencedTaskRunner>& background_task_runner, |
- scoped_ptr<CookieCryptoDelegate> crypto_delegate) { |
- SQLitePersistentCookieStore* persistent_store = |
- new SQLitePersistentCookieStore( |
- path, |
- client_task_runner, |
- background_task_runner, |
- restore_old_session_cookies, |
- storage_policy, |
- crypto_delegate.Pass()); |
- |
- net::CookieMonster* cookie_monster = |
- new net::CookieMonster(persistent_store, cookie_monster_delegate); |
+CookieStoreConfig::CookieStoreConfig() |
+ : session_cookie_mode(EPHEMERAL_SESSION_COOKIES), |
+ crypto_delegate(NULL) { |
+ // Default to an in-memory cookie store. |
+} |
+ |
+CookieStoreConfig::CookieStoreConfig( |
+ const base::FilePath& path, |
+ SessionCookieMode session_cookie_mode, |
+ quota::SpecialStoragePolicy* storage_policy, |
+ net::CookieMonsterDelegate* cookie_delegate) |
+ : path(path), |
+ session_cookie_mode(session_cookie_mode), |
+ storage_policy(storage_policy), |
+ cookie_delegate(cookie_delegate), |
+ crypto_delegate(NULL) { |
+ CHECK(!path.empty() || session_cookie_mode == EPHEMERAL_SESSION_COOKIES); |
+} |
+ |
+CookieStoreConfig::~CookieStoreConfig() { |
+} |
+ |
+net::CookieStore* CreateCookieStore(const CookieStoreConfig& config) { |
+ net::CookieMonster* cookie_monster = NULL; |
+ |
+ if (config.path.empty()) { |
+ // Empty path means in-memory store. |
+ cookie_monster = new net::CookieMonster(NULL, config.cookie_delegate); |
+ } else { |
+ scoped_refptr<base::SequencedTaskRunner> client_task_runner = |
+ config.client_task_runner; |
+ scoped_refptr<base::SequencedTaskRunner> background_task_runner = |
+ config.background_task_runner; |
+ |
+ if (!client_task_runner) { |
+ client_task_runner = |
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO); |
+ } |
+ |
+ if (!background_task_runner) { |
+ background_task_runner = |
+ BrowserThread::GetBlockingPool()->GetSequencedTaskRunner( |
+ BrowserThread::GetBlockingPool()->GetSequenceToken()); |
+ } |
+ |
+ SQLitePersistentCookieStore* persistent_store = |
+ new SQLitePersistentCookieStore( |
+ config.path, |
+ client_task_runner, |
+ background_task_runner, |
+ (config.session_cookie_mode == |
+ CookieStoreConfig::RESTORED_SESSION_COOKIES), |
+ config.storage_policy, |
+ config.crypto_delegate); |
+ |
+ cookie_monster = |
+ 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); |
+ } |
+ } |
// In the case of Android WebView, the cookie store may be created |
// before the browser process fully initializes -- certainly before |
@@ -1287,33 +1334,4 @@ net::CookieStore* CreatePersistentCookieStore( |
return cookie_monster; |
} |
-net::CookieStore* CreatePersistentCookieStore( |
- const base::FilePath& path, |
- bool restore_old_session_cookies, |
- quota::SpecialStoragePolicy* storage_policy, |
- net::CookieMonster::Delegate* cookie_monster_delegate, |
- scoped_ptr<CookieCryptoDelegate> crypto_delegate) { |
- return CreatePersistentCookieStore( |
- path, |
- restore_old_session_cookies, |
- storage_policy, |
- cookie_monster_delegate, |
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO), |
- BrowserThread::GetBlockingPool()->GetSequencedTaskRunner( |
- BrowserThread::GetBlockingPool()->GetSequenceToken()), |
- crypto_delegate.Pass()); |
-} |
- |
-net::CookieStore* CreateInMemoryCookieStore( |
- net::CookieMonster::Delegate* cookie_monster_delegate) { |
- net::CookieMonster* cookie_monster = |
- new net::CookieMonster(NULL, cookie_monster_delegate); |
- if (CommandLine::InitializedForCurrentProcess() && |
- CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kEnableFileCookies)) { |
- cookie_monster->SetEnableFileScheme(true); |
- } |
- return cookie_monster; |
-} |
- |
} // namespace content |