1 // Copyright (c) 2012 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 // Brought to you by number 42.
7 #ifndef NET_COOKIES_COOKIE_STORE_H_
8 #define NET_COOKIES_COOKIE_STORE_H_
13 #include "base/basictypes.h"
14 #include "base/callback.h"
15 #include "base/memory/ref_counted.h"
16 #include "base/time/time.h"
17 #include "net/base/net_export.h"
18 #include "net/cookies/canonical_cookie.h"
19 #include "net/cookies/cookie_options.h"
27 // An interface for storing and retrieving cookies. Implementations need to
28 // be thread safe as its methods can be accessed from IO as well as UI threads.
29 class NET_EXPORT CookieStore
: public base::RefCountedThreadSafe
<CookieStore
> {
31 // Callback definitions.
32 typedef base::Callback
<void(const CookieList
& cookies
)> GetCookieListCallback
;
33 typedef base::Callback
<void(const std::string
& cookie
)> GetCookiesCallback
;
34 typedef base::Callback
<void(bool success
)> SetCookiesCallback
;
35 typedef base::Callback
<void(int num_deleted
)> DeleteCallback
;
37 // Sets a single cookie. Expects a cookie line, like "a=1; domain=b.com".
39 // Fails either if the cookie is invalid or if this is a non-HTTPONLY cookie
40 // and it would overwrite an existing HTTPONLY cookie.
41 // Returns true if the cookie is successfully set.
42 virtual void SetCookieWithOptionsAsync(
44 const std::string
& cookie_line
,
45 const CookieOptions
& options
,
46 const SetCookiesCallback
& callback
) = 0;
48 // TODO(???): what if the total size of all the cookies >4k, can we have a
49 // header that big or do we need multiple Cookie: headers?
50 // Note: Some sites, such as Facebook, occasionally use Cookie headers >4k.
52 // Simple interface, gets a cookie string "a=b; c=d" for the given URL.
53 // Use options to access httponly cookies.
54 virtual void GetCookiesWithOptionsAsync(
56 const CookieOptions
& options
,
57 const GetCookiesCallback
& callback
) = 0;
59 // Returns all matching cookies without marking them as accessed,
60 // including HTTP only cookies.
61 virtual void GetAllCookiesForURLAsync(
63 const GetCookieListCallback
& callback
) = 0;
65 // Deletes the passed in cookie for the specified URL.
66 virtual void DeleteCookieAsync(const GURL
& url
,
67 const std::string
& cookie_name
,
68 const base::Closure
& callback
) = 0;
70 // Deletes all of the cookies that have a creation_date greater than or equal
71 // to |delete_begin| and less than |delete_end|
72 // Returns the number of cookies that have been deleted.
73 virtual void DeleteAllCreatedBetweenAsync(const base::Time
& delete_begin
,
74 const base::Time
& delete_end
,
75 const DeleteCallback
& callback
) = 0;
77 // Deletes all of the cookies that match the host of the given URL
78 // regardless of path and that have a creation_date greater than or
79 // equal to |delete_begin| and less then |delete_end|. This includes
80 // all http_only and secure cookies, but does not include any domain
81 // cookies that may apply to this host.
82 // Returns the number of cookies deleted.
83 virtual void DeleteAllCreatedBetweenForHostAsync(
84 const base::Time delete_begin
,
85 const base::Time delete_end
,
87 const DeleteCallback
& callback
) = 0;
89 virtual void DeleteSessionCookiesAsync(const DeleteCallback
&) = 0;
91 // Returns the underlying CookieMonster.
92 virtual CookieMonster
* GetCookieMonster() = 0;
95 friend class base::RefCountedThreadSafe
<CookieStore
>;
97 virtual ~CookieStore();
102 #endif // NET_COOKIES_COOKIE_STORE_H_