Index: ios/net/cookies/cookie_store_ios.mm |
diff --git a/ios/net/cookies/cookie_store_ios.mm b/ios/net/cookies/cookie_store_ios.mm |
index be242f82e90d5964176f52b69af0f6add2bdb8d6..d2c5a90d034748649d19df10da1ab287fa2dd531 100644 |
--- a/ios/net/cookies/cookie_store_ios.mm |
+++ b/ios/net/cookies/cookie_store_ios.mm |
@@ -200,9 +200,9 @@ NSInteger CompareCookies(id a, id b, void* context) { |
} |
// Gets the cookies for |url| from the system cookie store. |
-NSArray* GetCookiesForURL(const GURL& url, CookieCreationTimeManager* manager) { |
- NSArray* cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] |
- cookiesForURL:net::NSURLWithGURL(url)]; |
+NSArray* GetCookiesForURL(NSHTTPCookieStorage* system_store, |
+ const GURL& url, CookieCreationTimeManager* manager) { |
+ NSArray* cookies = [system_store cookiesForURL:net::NSURLWithGURL(url)]; |
// Sort cookies by decreasing path length, then creation time, as per RFC6265. |
return [cookies sortedArrayUsingFunction:CompareCookies context:manager]; |
@@ -274,11 +274,21 @@ bool HasExplicitDomain(const std::string& cookie_line) { |
CookieStoreIOS::CookieStoreIOS( |
net::CookieMonster::PersistentCookieStore* persistent_store) |
- : creation_time_manager_(new CookieCreationTimeManager), |
+ : CookieStoreIOS(persistent_store, |
+ [NSHTTPCookieStorage sharedHTTPCookieStorage]) { |
+} |
+ |
+CookieStoreIOS::CookieStoreIOS( |
+ net::CookieMonster::PersistentCookieStore* persistent_store, |
+ NSHTTPCookieStorage* system_store) |
+ : system_store_(system_store), |
+ creation_time_manager_(new CookieCreationTimeManager), |
metrics_enabled_(false), |
flush_delay_(base::TimeDelta::FromSeconds(10)), |
synchronization_state_(NOT_SYNCHRONIZED), |
cookie_cache_(new CookieCache()) { |
+ DCHECK(system_store); |
+ |
NotificationTrampoline::GetInstance()->AddObserver(this); |
cookie_monster_ = new net::CookieMonster(persistent_store, nullptr); |
cookie_monster_->SetPersistSessionCookies(true); |
@@ -298,10 +308,11 @@ void CookieStoreIOS::SetCookiePolicy(CookiePolicy setting) { |
NotificationTrampoline::GetInstance()->NotifyCookiePolicyChanged(); |
} |
-CookieStoreIOS* CookieStoreIOS::CreateCookieStoreFromNSHTTPCookieStorage() { |
+// static |
+CookieStoreIOS* CookieStoreIOS::CreateCookieStore( |
+ NSHTTPCookieStorage* cookie_storage) { |
// TODO(huey): Update this when CrNet supports multiple cookie jars. |
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] |
- setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; |
+ [cookie_storage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; |
// Create a cookie store with no persistent store backing. Then, populate |
// it from the system's cookie jar. |
@@ -332,8 +343,7 @@ void CookieStoreIOS::Flush(const base::Closure& closure) { |
if (SystemCookiesAllowed()) { |
// If cookies are disabled, the system store is empty, and the cookies are |
// stashed on disk. Do not delete the cookies on the disk in this case. |
- WriteToCookieMonster( |
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]); |
+ WriteToCookieMonster([system_store_ cookies]); |
} |
cookie_monster_->FlushStore(closure); |
flush_closure_.Cancel(); |
@@ -408,7 +418,7 @@ void CookieStoreIOS::SetCookieWithOptionsAsync( |
(!has_explicit_domain || has_valid_domain); |
if (success) { |
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; |
+ [system_store_ setCookie:cookie]; |
creation_time_manager_->SetCreationTime( |
cookie, |
creation_time_manager_->MakeUniqueCreationTime(base::Time::Now())); |
@@ -443,7 +453,8 @@ void CookieStoreIOS::GetCookiesWithOptionsAsync( |
// engine. |
DCHECK(!options.exclude_httponly()); |
- NSArray* cookies = GetCookiesForURL(url, creation_time_manager_.get()); |
+ NSArray* cookies = GetCookiesForURL(system_store_, |
+ url, creation_time_manager_.get()); |
if (!callback.is_null()) |
callback.Run(BuildCookieLine(cookies, options)); |
break; |
@@ -471,7 +482,8 @@ void CookieStoreIOS::GetAllCookiesForURLAsync( |
return; |
} |
- NSArray* cookies = GetCookiesForURL(url, creation_time_manager_.get()); |
+ NSArray* cookies = GetCookiesForURL(system_store_, |
+ url, creation_time_manager_.get()); |
net::CookieList cookie_list; |
cookie_list.reserve([cookies count]); |
for (NSHTTPCookie* cookie in cookies) { |
@@ -500,11 +512,12 @@ void CookieStoreIOS::DeleteCookieAsync(const GURL& url, |
WrapClosure(callback))); |
break; |
case SYNCHRONIZED: |
- NSArray* cookies = GetCookiesForURL(url, creation_time_manager_.get()); |
+ NSArray* cookies = GetCookiesForURL(system_store_, |
+ url, creation_time_manager_.get()); |
for (NSHTTPCookie* cookie in cookies) { |
if ([[cookie name] |
isEqualToString:base::SysUTF8ToNSString(cookie_name)]) { |
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie]; |
+ [system_store_ deleteCookie:cookie]; |
creation_time_manager_->DeleteCreationTime(cookie); |
} |
} |
@@ -613,13 +626,11 @@ CookieStoreIOS::~CookieStoreIOS() { |
void CookieStoreIOS::ClearSystemStore() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- NSHTTPCookieStorage* cookie_storage = |
- [NSHTTPCookieStorage sharedHTTPCookieStorage]; |
base::scoped_nsobject<NSArray> copy( |
- [[NSArray alloc] initWithArray:[cookie_storage cookies]]); |
+ [[NSArray alloc] initWithArray:[system_store_ cookies]]); |
for (NSHTTPCookie* cookie in copy.get()) |
- [cookie_storage deleteCookie:cookie]; |
- DCHECK_EQ(0u, [[cookie_storage cookies] count]); |
+ [system_store_ deleteCookie:cookie]; |
+ DCHECK_EQ(0u, [[system_store_ cookies] count]); |
creation_time_manager_->Clear(); |
} |
@@ -630,10 +641,10 @@ void CookieStoreIOS::OnSystemCookiePolicyChanged() { |
return; |
NSHTTPCookieAcceptPolicy policy = |
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookieAcceptPolicy]; |
+ [system_store_ cookieAcceptPolicy]; |
if (policy == NSHTTPCookieAcceptPolicyAlways) { |
// If cookies are disabled, the system cookie store should be empty. |
- DCHECK(![[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] count]); |
+ DCHECK(![[system_store_ cookies] count]); |
DCHECK(synchronization_state_ != SYNCHRONIZING); |
synchronization_state_ = SYNCHRONIZING; |
cookie_monster_->GetAllCookiesAsync( |
@@ -642,8 +653,7 @@ void CookieStoreIOS::OnSystemCookiePolicyChanged() { |
DCHECK_EQ(NSHTTPCookieAcceptPolicyNever, policy); |
// Flush() does not write the cookies to disk when they are disabled. |
// Explicitly copy them. |
- WriteToCookieMonster( |
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]); |
+ WriteToCookieMonster([system_store_ cookies]); |
Flush(base::Closure()); |
ClearSystemStore(); |
if (synchronization_state_ == SYNCHRONIZING) { |
@@ -677,13 +687,13 @@ void CookieStoreIOS::SetSynchronizedWithSystemStore(bool synchronized) { |
#endif |
NSHTTPCookieAcceptPolicy policy = |
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookieAcceptPolicy]; |
+ [system_store_ cookieAcceptPolicy]; |
DCHECK(policy == NSHTTPCookieAcceptPolicyAlways || |
policy == NSHTTPCookieAcceptPolicyNever); |
// If cookies are disabled, the system cookie store should be empty. |
DCHECK(policy == NSHTTPCookieAcceptPolicyAlways || |
- ![[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] count]); |
+ ![[system_store_ cookies] count]); |
// If cookies are disabled, nothing is done now, the work will be done when |
// cookies are re-enabled. |
@@ -710,7 +720,7 @@ void CookieStoreIOS::SetSynchronizedWithSystemStore(bool synchronized) { |
bool CookieStoreIOS::SystemCookiesAllowed() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- return [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookieAcceptPolicy] == |
+ return [system_store_ cookieAcceptPolicy] == |
NSHTTPCookieAcceptPolicyAlways; |
} |
@@ -738,7 +748,7 @@ void CookieStoreIOS::AddCookiesToSystemStore(const net::CookieList& cookies) { |
// invalid characters. |
if (!system_cookie) |
continue; |
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:system_cookie]; |
+ [system_store_ setCookie:system_cookie]; |
creation_time_manager_->SetCreationTime(system_cookie, |
net_cookie.CreationDate()); |
} |
@@ -783,7 +793,7 @@ void CookieStoreIOS::DeleteCookiesWithFilter(const CookieFilterFunction& filter, |
const DeleteCallback& callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK_EQ(SYNCHRONIZED, synchronization_state_); |
- NSArray* cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]; |
+ NSArray* cookies = [system_store_ cookies]; |
// Collect the cookies to delete. |
base::scoped_nsobject<NSMutableArray> to_delete( |
@@ -796,7 +806,7 @@ void CookieStoreIOS::DeleteCookiesWithFilter(const CookieFilterFunction& filter, |
// Delete them. |
for (NSHTTPCookie* cookie in to_delete.get()) { |
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie]; |
+ [system_store_ deleteCookie:cookie]; |
creation_time_manager_->DeleteCreationTime(cookie); |
} |
@@ -885,8 +895,7 @@ bool CookieStoreIOS::GetSystemCookies( |
std::vector<net::CanonicalCookie>* cookies) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
NSURL* url = net::NSURLWithGURL(gurl); |
- NSHTTPCookieStorage* storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; |
- NSArray* nscookies = [storage cookiesForURL:url]; |
+ NSArray* nscookies = [system_store_ cookiesForURL:url]; |
bool found_cookies = false; |
for (NSHTTPCookie* nscookie in nscookies) { |
if (nscookie.name.UTF8String == name) { |