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 0d5f0017571ba4724b405ab567c76800fef90b76..b6a3ed1c76ac5558e49a1953801ff277d56a58a1 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, |
@@ -718,6 +733,36 @@ void CookieStoreIOS::DeleteAllCreatedBetweenForHostAsync( |
} |
} |
+void CookieStoreIOS::DeleteAllCreatedBetweenWithPredicateAsync( |
+ const base::Time& delete_begin, |
+ const base::Time& delete_end, |
+ const CookiePredicate& predicate, |
+ const DeleteCallback& callback) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
+ if (metrics_enabled_) |
+ ResetCookieCountMetrics(); |
+ |
+ switch (synchronization_state_) { |
+ case NOT_SYNCHRONIZED: |
+ cookie_monster_->DeleteAllCreatedBetweenWithPredicateAsync( |
+ delete_begin, delete_end, predicate, WrapDeleteCallback(callback)); |
+ break; |
+ case SYNCHRONIZING: |
+ tasks_pending_synchronization_.push_back( |
+ base::Bind(&CookieStoreIOS::DeleteAllCreatedBetweenWithPredicateAsync, |
+ weak_factory_.GetWeakPtr(), delete_begin, delete_end, |
+ predicate, WrapDeleteCallback(callback))); |
+ break; |
+ case SYNCHRONIZED: |
+ CookieFilterFunction filter = |
+ base::Bind(IsCookieCreatedBetweenWithPredicate, |
+ delete_begin, delete_end, predicate); |
+ DeleteCookiesWithFilter(filter, callback); |
+ break; |
+ } |
+} |
+ |
void CookieStoreIOS::DeleteSessionCookiesAsync(const DeleteCallback& callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |