Index: ios/net/cookies/cookie_cache.h |
diff --git a/ios/net/cookies/cookie_cache.h b/ios/net/cookies/cookie_cache.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..aa808b51b668e3db28b3b26cf70139fdffe38fca |
--- /dev/null |
+++ b/ios/net/cookies/cookie_cache.h |
@@ -0,0 +1,78 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef IOS_NET_COOKIES_COOKIE_CACHE_H_ |
+#define IOS_NET_COOKIES_COOKIE_CACHE_H_ |
+ |
+#include <map> |
+#include <set> |
+#include <string> |
+#include <utility> |
+ |
+#include "base/macros.h" |
+#include "net/cookies/canonical_cookie.h" |
+#include "url/gurl.h" |
+ |
+namespace net { |
+ |
+// CookieCache is a specialized cache for storing the set of cookies with a |
+// specified name that would be sent with requests for a given URL. It only |
+// provides one operation, Update(), which updates the set of cookies for a |
+// (url, name) pair and returns whether the new set for that (url, name) pair is |
+// different from the old set. |
+class CookieCache { |
+ public: |
+ CookieCache(); |
+ ~CookieCache(); |
+ |
+ // Update the cookie cache with cookies named |name| that would be sent for a |
+ // request to |url|. The new vector of cookies overwrite the existing cookies |
+ // stored for the specified (url, name) pair. |
+ // |
+ // Returns true if the new set is different from the old set, i.e.: |
+ // * any cookie in |new_cookies| is not present in the cache |
+ // * any cookie in the cache is not present in |new_cookies| |
+ // * any cookie in both |new_cookies| and the cache has changed value |
+ // Returns false otherwise. |
+ // |
+ // |out_removed_cookies|, if not NULL, will be populated with the cookies that |
+ // were removed. |
+ // |out_changed_cookies|, if not NULL, will be populated with the cookies that |
+ // were added. |
+ bool Update(const GURL& url, |
+ const std::string& name, |
+ const std::vector<net::CanonicalCookie>& new_cookies, |
+ std::vector<net::CanonicalCookie>* out_removed_cookies, |
+ std::vector<net::CanonicalCookie>* out_added_cookies); |
+ |
+ private: |
+ // Compares two cookies, returning true if |lhs| comes before |rhs| in the |
+ // partial ordering defined for CookieSet. This effectively does a |
+ // lexicographic comparison of (domain, path, name) tuples for two cookies. |
+ struct CookieComparator { |
+ bool operator()(const net::CanonicalCookie& lhs, |
+ const net::CanonicalCookie& rhs) const; |
+ }; |
+ |
+ // Compares two cookies, returning true if |lhs| comes before |rhs| in the |
+ // partial ordering defined for CookieSet. This effectively does a |
+ // lexicographic comparison of (domain, path, name, value) tuples for two |
+ // cookies. |
+ struct CookieAndValueComparator { |
+ bool operator()(const net::CanonicalCookie& lhs, |
+ const net::CanonicalCookie& rhs) const; |
+ }; |
+ |
+ typedef std::set<net::CanonicalCookie, CookieComparator> CookieSet; |
+ typedef std::pair<GURL, std::string> CookieKey; |
+ typedef std::map<CookieKey, CookieSet> CookieKeyPathMap; |
+ |
+ CookieKeyPathMap cache_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(CookieCache); |
+}; |
+ |
+} // namespace net |
+ |
+#endif // IOS_NET_COOKIES_COOKIE_CACHE_H_ |