OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Brought to you by the letter D and the number 2. | 5 // Brought to you by the letter D and the number 2. |
6 | 6 |
7 #ifndef NET_BASE_COOKIE_MONSTER_H_ | 7 #ifndef NET_BASE_COOKIE_MONSTER_H_ |
8 #define NET_BASE_COOKIE_MONSTER_H_ | 8 #define NET_BASE_COOKIE_MONSTER_H_ |
9 | 9 |
10 #include <map> | 10 #include <map> |
11 #include <string> | 11 #include <string> |
12 #include <utility> | 12 #include <utility> |
13 #include <vector> | 13 #include <vector> |
14 | 14 |
15 #include "base/basictypes.h" | 15 #include "base/basictypes.h" |
16 #include "base/histogram.h" | 16 #include "base/histogram.h" |
17 #include "base/lock.h" | 17 #include "base/lock.h" |
18 #include "base/ref_counted.h" | 18 #include "base/ref_counted.h" |
19 #include "base/scoped_ptr.h" | 19 #include "base/scoped_ptr.h" |
20 #include "base/time.h" | 20 #include "base/time.h" |
21 #include "net/base/cookie_store.h" | 21 #include "net/base/cookie_store.h" |
| 22 #include "testing/gtest/include/gtest/gtest_prod.h" |
22 | 23 |
23 class GURL; | 24 class GURL; |
24 | 25 |
25 namespace net { | 26 namespace net { |
26 | 27 |
27 // The cookie monster is the system for storing and retrieving cookies. It has | 28 // The cookie monster is the system for storing and retrieving cookies. It has |
28 // an in-memory list of all cookies, and synchronizes non-session cookies to an | 29 // an in-memory list of all cookies, and synchronizes non-session cookies to an |
29 // optional permanent storage that implements the PersistentCookieStore | 30 // optional permanent storage that implements the PersistentCookieStore |
30 // interface. | 31 // interface. |
31 // | 32 // |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 // cookie value attribute) and will return false without setting the cookie | 100 // cookie value attribute) and will return false without setting the cookie |
100 // if such characters are found. | 101 // if such characters are found. |
101 bool SetCookieWithDetails(const GURL& url, | 102 bool SetCookieWithDetails(const GURL& url, |
102 const std::string& name, | 103 const std::string& name, |
103 const std::string& value, | 104 const std::string& value, |
104 const std::string& domain, | 105 const std::string& domain, |
105 const std::string& path, | 106 const std::string& path, |
106 const base::Time& expiration_time, | 107 const base::Time& expiration_time, |
107 bool secure, bool http_only); | 108 bool secure, bool http_only); |
108 | 109 |
109 // Exposed for unit testing. | |
110 bool SetCookieWithCreationTimeAndOptions(const GURL& url, | |
111 const std::string& cookie_line, | |
112 const base::Time& creation_time, | |
113 const CookieOptions& options); | |
114 bool SetCookieWithCreationTime(const GURL& url, | |
115 const std::string& cookie_line, | |
116 const base::Time& creation_time) { | |
117 return SetCookieWithCreationTimeAndOptions(url, cookie_line, creation_time, | |
118 CookieOptions()); | |
119 } | |
120 | |
121 // Returns all the cookies, for use in management UI, etc. This does not mark | 110 // Returns all the cookies, for use in management UI, etc. This does not mark |
122 // the cookies as having been accessed. | 111 // the cookies as having been accessed. |
123 CookieList GetAllCookies(); | 112 CookieList GetAllCookies(); |
124 | 113 |
125 // Returns all the cookies, for use in management UI, etc. Filters results | 114 // Returns all the cookies, for use in management UI, etc. Filters results |
126 // using given url scheme, host / domain and path. This does not mark the | 115 // using given url scheme, host / domain and path. This does not mark the |
127 // cookies as having been accessed. | 116 // cookies as having been accessed. |
128 CookieList GetAllCookiesForURL(const GURL& url); | 117 CookieList GetAllCookiesForURL(const GURL& url); |
129 | 118 |
130 // Delete all of the cookies. | 119 // Delete all of the cookies. |
(...skipping 28 matching lines...) Expand all Loading... |
159 // There are some unknowns about how to correctly handle file:// cookies, | 148 // There are some unknowns about how to correctly handle file:// cookies, |
160 // and our implementation for this is not robust enough. This allows you | 149 // and our implementation for this is not robust enough. This allows you |
161 // to enable support, but it should only be used for testing. Bug 1157243. | 150 // to enable support, but it should only be used for testing. Bug 1157243. |
162 // Must be called before creating a CookieMonster instance. | 151 // Must be called before creating a CookieMonster instance. |
163 static void EnableFileScheme(); | 152 static void EnableFileScheme(); |
164 static bool enable_file_scheme_; | 153 static bool enable_file_scheme_; |
165 | 154 |
166 private: | 155 private: |
167 ~CookieMonster(); | 156 ~CookieMonster(); |
168 | 157 |
| 158 // Testing support. |
| 159 friend class CookieMonsterTest; |
| 160 FRIEND_TEST(CookieMonsterTest, TestCookieDeleteAllCreatedAfterTimestamp); |
| 161 FRIEND_TEST(CookieMonsterTest, TestCookieDeleteAllCreatedBetweenTimestamps); |
| 162 bool SetCookieWithCreationTime(const GURL& url, |
| 163 const std::string& cookie_line, |
| 164 const base::Time& creation_time); |
| 165 |
169 // Called by all non-static functions to ensure that the cookies store has | 166 // Called by all non-static functions to ensure that the cookies store has |
170 // been initialized. This is not done during creating so it doesn't block | 167 // been initialized. This is not done during creating so it doesn't block |
171 // the window showing. | 168 // the window showing. |
172 // Note: this method should always be called with lock_ held. | 169 // Note: this method should always be called with lock_ held. |
173 void InitIfNecessary() { | 170 void InitIfNecessary() { |
174 if (!initialized_) { | 171 if (!initialized_) { |
175 if (store_) | 172 if (store_) |
176 InitStore(); | 173 InitStore(); |
177 initialized_ = true; | 174 initialized_ = true; |
178 } | 175 } |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 // return value with be true if |skip_httponly| skipped an httponly cookie. | 209 // return value with be true if |skip_httponly| skipped an httponly cookie. |
213 // NOTE: There should never be more than a single matching equivalent cookie. | 210 // NOTE: There should never be more than a single matching equivalent cookie. |
214 bool DeleteAnyEquivalentCookie(const std::string& key, | 211 bool DeleteAnyEquivalentCookie(const std::string& key, |
215 const CanonicalCookie& ecc, | 212 const CanonicalCookie& ecc, |
216 bool skip_httponly); | 213 bool skip_httponly); |
217 | 214 |
218 void InternalInsertCookie(const std::string& key, | 215 void InternalInsertCookie(const std::string& key, |
219 CanonicalCookie* cc, | 216 CanonicalCookie* cc, |
220 bool sync_to_store); | 217 bool sync_to_store); |
221 | 218 |
| 219 // Helper function that sets cookies with more control. |
| 220 // Not exposed as we don't want callers to have the ability |
| 221 // to specify (potentially duplicate) creation times. |
| 222 bool SetCookieWithCreationTimeAndOptions(const GURL& url, |
| 223 const std::string& cookie_line, |
| 224 const base::Time& creation_time, |
| 225 const CookieOptions& options); |
| 226 |
| 227 |
222 // Helper function that sets a canonical cookie, deleting equivalents and | 228 // Helper function that sets a canonical cookie, deleting equivalents and |
223 // performing garbage collection. | 229 // performing garbage collection. |
224 bool SetCanonicalCookie(scoped_ptr<CanonicalCookie>* cc, | 230 bool SetCanonicalCookie(scoped_ptr<CanonicalCookie>* cc, |
225 const base::Time& creation_time, | 231 const base::Time& creation_time, |
226 const CookieOptions& options); | 232 const CookieOptions& options); |
227 | 233 |
228 void InternalUpdateCookieAccessTime(CanonicalCookie* cc); | 234 void InternalUpdateCookieAccessTime(CanonicalCookie* cc); |
229 | 235 |
230 enum DeletionCause { | 236 enum DeletionCause { |
231 DELETE_COOKIE_EXPLICIT, | 237 DELETE_COOKIE_EXPLICIT, |
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
542 protected: | 548 protected: |
543 PersistentCookieStore() { } | 549 PersistentCookieStore() { } |
544 | 550 |
545 private: | 551 private: |
546 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore); | 552 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore); |
547 }; | 553 }; |
548 | 554 |
549 } // namespace net | 555 } // namespace net |
550 | 556 |
551 #endif // NET_BASE_COOKIE_MONSTER_H_ | 557 #endif // NET_BASE_COOKIE_MONSTER_H_ |
OLD | NEW |