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 78fb510ffa93c837cfc09e8d5f356b20df50ee2c..be01b8126eed9ea58349a514ded9b967939a806f 100644 |
--- a/ios/net/cookies/cookie_store_ios.mm |
+++ b/ios/net/cookies/cookie_store_ios.mm |
@@ -261,6 +261,21 @@ bool IsCookieCreatedBetweenForHost(base::Time time_begin, |
IsCookieCreatedBetween(time_begin, time_end, cookie, creation_time); |
} |
+// Tests whether the |creation_time| of |cookie| is in the time range defined |
+// by |time_begin| and |time_end| and the cookie host match |host|. A null |
+// |time_end| means end-of-time. |
+bool IsCookieCreatedBetweenWithPredicate( |
+ base::Time time_begin, |
+ base::Time time_end, |
+ const net::CookieStore::CookiePredicate& predicate, |
+ NSHTTPCookie* cookie, |
+ base::Time creation_time) { |
+ CanonicalCookie canonical_cookie = |
+ CanonicalCookieFromSystemCookie(cookie, creation_time); |
+ return IsCookieCreatedBetween(time_begin, time_end, cookie, creation_time) && |
+ predicate.Run(canonical_cookie); |
+} |
+ |
// Adds cookies in |cookies| with name |name| to |filtered|. |
void OnlyCookiesWithName(const net::CookieList& cookies, |
const std::string& name, |
@@ -688,10 +703,10 @@ void CookieStoreIOS::DeleteAllCreatedBetweenAsync( |
} |
} |
-void CookieStoreIOS::DeleteAllCreatedBetweenForHostAsync( |
- const base::Time delete_begin, |
- const base::Time delete_end, |
- const GURL& url, |
+void CookieStoreIOS::DeleteAllCreatedBetweenWithPredicateAsync( |
+ const base::Time& delete_begin, |
+ const base::Time& delete_end, |
+ const CookiePredicate& predicate, |
const DeleteCallback& callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
@@ -700,19 +715,19 @@ void CookieStoreIOS::DeleteAllCreatedBetweenForHostAsync( |
switch (synchronization_state_) { |
case NOT_SYNCHRONIZED: |
- cookie_monster_->DeleteAllCreatedBetweenForHostAsync( |
- delete_begin, delete_end, url, WrapDeleteCallback(callback)); |
+ cookie_monster_->DeleteAllCreatedBetweenWithPredicateAsync( |
+ delete_begin, delete_end, predicate, WrapDeleteCallback(callback)); |
break; |
case SYNCHRONIZING: |
tasks_pending_synchronization_.push_back( |
- base::Bind(&CookieStoreIOS::DeleteAllCreatedBetweenForHostAsync, |
- weak_factory_.GetWeakPtr(), delete_begin, delete_end, url, |
- WrapDeleteCallback(callback))); |
+ base::Bind(&CookieStoreIOS::DeleteAllCreatedBetweenWithPredicateAsync, |
+ weak_factory_.GetWeakPtr(), delete_begin, delete_end, |
+ predicate, WrapDeleteCallback(callback))); |
break; |
case SYNCHRONIZED: |
- NSString* host = base::SysUTF8ToNSString(url.host()); |
- CookieFilterFunction filter = base::Bind(IsCookieCreatedBetweenForHost, |
- delete_begin, delete_end, host); |
+ CookieFilterFunction filter = |
+ base::Bind(IsCookieCreatedBetweenWithPredicate, delete_begin, |
+ delete_end, predicate); |
DeleteCookiesWithFilter(filter, callback); |
break; |
} |