Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / net / cookies / cookie_store.h
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.
4
5 // Brought to you by number 42.
6
7 #ifndef NET_COOKIES_COOKIE_STORE_H_
8 #define NET_COOKIES_COOKIE_STORE_H_
9
10 #include <string>
11 #include <vector>
12
13 #include "base/basictypes.h"
14 #include "base/callback.h"
15 #include "base/callback_list.h"
16 #include "base/memory/ref_counted.h"
17 #include "base/time/time.h"
18 #include "net/base/net_export.h"
19 #include "net/cookies/canonical_cookie.h"
20 #include "net/cookies/cookie_options.h"
21
22 class GURL;
23
24 namespace net {
25
26 class CookieMonster;
27
28 // An interface for storing and retrieving cookies. Implementations need to
29 // be thread safe as its methods can be accessed from IO as well as UI threads.
30 class NET_EXPORT CookieStore : public base::RefCountedThreadSafe<CookieStore> {
31  public:
32   // Callback definitions.
33   typedef base::Callback<void(const CookieList& cookies)> GetCookieListCallback;
34   typedef base::Callback<void(const std::string& cookie)> GetCookiesCallback;
35   typedef base::Callback<void(bool success)> SetCookiesCallback;
36   typedef base::Callback<void(int num_deleted)> DeleteCallback;
37   typedef base::Callback<void(const CanonicalCookie& cookie, bool removed)>
38       CookieChangedCallback;
39   typedef base::CallbackList<void(const CanonicalCookie& cookie, bool removed)>
40       CookieChangedCallbackList;
41   typedef CookieChangedCallbackList::Subscription CookieChangedSubscription;
42
43   // Sets a single cookie.  Expects a cookie line, like "a=1; domain=b.com".
44   //
45   // Fails either if the cookie is invalid or if this is a non-HTTPONLY cookie
46   // and it would overwrite an existing HTTPONLY cookie.
47   // Returns true if the cookie is successfully set.
48   virtual void SetCookieWithOptionsAsync(
49       const GURL& url,
50       const std::string& cookie_line,
51       const CookieOptions& options,
52       const SetCookiesCallback& callback) = 0;
53
54   // TODO(???): what if the total size of all the cookies >4k, can we have a
55   // header that big or do we need multiple Cookie: headers?
56   // Note: Some sites, such as Facebook, occasionally use Cookie headers >4k.
57   //
58   // Simple interface, gets a cookie string "a=b; c=d" for the given URL.
59   // Use options to access httponly cookies.
60   virtual void GetCookiesWithOptionsAsync(
61       const GURL& url,
62       const CookieOptions& options,
63       const GetCookiesCallback& callback) = 0;
64
65   // Returns all matching cookies without marking them as accessed,
66   // including HTTP only cookies.
67   virtual void GetAllCookiesForURLAsync(
68       const GURL& url,
69       const GetCookieListCallback& callback) = 0;
70
71   // Deletes the passed in cookie for the specified URL.
72   virtual void DeleteCookieAsync(const GURL& url,
73                                  const std::string& cookie_name,
74                                  const base::Closure& callback) = 0;
75
76   // Deletes all of the cookies that have a creation_date greater than or equal
77   // to |delete_begin| and less than |delete_end|
78   // Returns the number of cookies that have been deleted.
79   virtual void DeleteAllCreatedBetweenAsync(const base::Time& delete_begin,
80                                             const base::Time& delete_end,
81                                             const DeleteCallback& callback) = 0;
82
83   // Deletes all of the cookies that match the host of the given URL
84   // regardless of path and that have a creation_date greater than or
85   // equal to |delete_begin| and less then |delete_end|. This includes
86   // all http_only and secure cookies, but does not include any domain
87   // cookies that may apply to this host.
88   // Returns the number of cookies deleted.
89   virtual void DeleteAllCreatedBetweenForHostAsync(
90       const base::Time delete_begin,
91       const base::Time delete_end,
92       const GURL& url,
93       const DeleteCallback& callback) = 0;
94
95   virtual void DeleteSessionCookiesAsync(const DeleteCallback&) = 0;
96
97   // Returns the underlying CookieMonster.
98   virtual CookieMonster* GetCookieMonster() = 0;
99
100   // Add a callback to be notified when the set of cookies named |name| that
101   // would be sent for a request to |url| changes. The returned handle is
102   // guaranteed not to hold a hard reference to the CookieStore object.
103   //
104   // |callback| will be called when a cookie is added or removed. |callback| is
105   // passed the respective |cookie| which was added to or removed from the
106   // cookies and a boolean indicating if the cookies was removed or not.
107   //
108   // Note that |callback| is called twice when a cookie is updated: once for
109   // the removal of the existing cookie and once for the adding the new cookie.
110   //
111   // Note that this method consumes memory and CPU per (url, name) pair ever
112   // registered that are still consumed even after all subscriptions for that
113   // (url, name) pair are removed. If this method ever needs to support an
114   // unbounded amount of such pairs, this contract needs to change and
115   // implementors need to be improved to not behave this way.
116   virtual scoped_ptr<CookieChangedSubscription> AddCallbackForCookie(
117       const GURL& url,
118       const std::string& name,
119       const CookieChangedCallback& callback) = 0;
120
121  protected:
122   friend class base::RefCountedThreadSafe<CookieStore>;
123   CookieStore();
124   virtual ~CookieStore();
125 };
126
127 }  // namespace net
128
129 #endif  // NET_COOKIES_COOKIE_STORE_H_