1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef IOS_NET_COOKIES_COOKIE_CACHE_H_
6 #define IOS_NET_COOKIES_COOKIE_CACHE_H_
13 #include "base/macros.h"
14 #include "net/cookies/canonical_cookie.h"
19 // CookieCache is a specialized cache for storing the set of cookies with a
20 // specified name that would be sent with requests for a given URL. It only
21 // provides one operation, Update(), which updates the set of cookies for a
22 // (url, name) pair and returns whether the new set for that (url, name) pair is
23 // different from the old set.
29 // Update the cookie cache with cookies named |name| that would be sent for a
30 // request to |url|. The new vector of cookies overwrite the existing cookies
31 // stored for the specified (url, name) pair.
33 // Returns true if the new set is different from the old set, i.e.:
34 // * any cookie in |new_cookies| is not present in the cache
35 // * any cookie in the cache is not present in |new_cookies|
36 // * any cookie in both |new_cookies| and the cache has changed value
37 // Returns false otherwise.
39 // |out_removed_cookies|, if not NULL, will be populated with the cookies that
41 // |out_changed_cookies|, if not NULL, will be populated with the cookies that
43 bool Update(const GURL
& url
,
44 const std::string
& name
,
45 const std::vector
<net::CanonicalCookie
>& new_cookies
,
46 std::vector
<net::CanonicalCookie
>* out_removed_cookies
,
47 std::vector
<net::CanonicalCookie
>* out_added_cookies
);
50 // Compares two cookies, returning true if |lhs| comes before |rhs| in the
51 // partial ordering defined for CookieSet. This effectively does a
52 // lexicographic comparison of (domain, path, name) tuples for two cookies.
53 struct CookieComparator
{
54 bool operator()(const net::CanonicalCookie
& lhs
,
55 const net::CanonicalCookie
& rhs
) const;
58 // Compares two cookies, returning true if |lhs| comes before |rhs| in the
59 // partial ordering defined for CookieSet. This effectively does a
60 // lexicographic comparison of (domain, path, name, value) tuples for two
62 struct CookieAndValueComparator
{
63 bool operator()(const net::CanonicalCookie
& lhs
,
64 const net::CanonicalCookie
& rhs
) const;
67 typedef std::set
<net::CanonicalCookie
, CookieComparator
> CookieSet
;
68 typedef std::pair
<GURL
, std::string
> CookieKey
;
69 typedef std::map
<CookieKey
, CookieSet
> CookieKeyPathMap
;
71 CookieKeyPathMap cache_
;
73 DISALLOW_COPY_AND_ASSIGN(CookieCache
);
78 #endif // IOS_NET_COOKIES_COOKIE_CACHE_H_