Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(220)

Side by Side Diff: net/base/cookie_monster.h

Issue 7995: Move Time, TimeDelta and TimeTicks into namespace base. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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>
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 64
65 // The store passed in should not have had Init() called on it yet. This class 65 // The store passed in should not have had Init() called on it yet. This class
66 // will take care of initializing it. The backing store is NOT owned by this 66 // will take care of initializing it. The backing store is NOT owned by this
67 // class, but it must remain valid for the duration of the cookie monster's 67 // class, but it must remain valid for the duration of the cookie monster's
68 // existence. 68 // existence.
69 CookieMonster(PersistentCookieStore* store); 69 CookieMonster(PersistentCookieStore* store);
70 70
71 ~CookieMonster(); 71 ~CookieMonster();
72 72
73 // Parse the string with the cookie time (very forgivingly). 73 // Parse the string with the cookie time (very forgivingly).
74 static Time ParseCookieTime(const std::string& time_string); 74 static base::Time ParseCookieTime(const std::string& time_string);
75 75
76 // Set a single cookie. Expects a cookie line, like "a=1; domain=b.com". 76 // Set a single cookie. Expects a cookie line, like "a=1; domain=b.com".
77 bool SetCookie(const GURL& url, const std::string& cookie_line); 77 bool SetCookie(const GURL& url, const std::string& cookie_line);
78 // Sets a single cookie with a specific creation date. To set a cookie with 78 // Sets a single cookie with a specific creation date. To set a cookie with
79 // a creation date of Now() use SetCookie() instead (it calls this function 79 // a creation date of Now() use SetCookie() instead (it calls this function
80 // internally). 80 // internally).
81 bool SetCookieWithCreationTime(const GURL& url, 81 bool SetCookieWithCreationTime(const GURL& url,
82 const std::string& cookie_line, 82 const std::string& cookie_line,
83 const Time& creation_time); 83 const base::Time& creation_time);
84 // Set a vector of response cookie values for the same URL. 84 // Set a vector of response cookie values for the same URL.
85 void SetCookies(const GURL& url, const std::vector<std::string>& cookies); 85 void SetCookies(const GURL& url, const std::vector<std::string>& cookies);
86 86
87 // TODO what if the total size of all the cookies >4k, can we have a header 87 // TODO what if the total size of all the cookies >4k, can we have a header
88 // that big or do we need multiple Cookie: headers? 88 // that big or do we need multiple Cookie: headers?
89 // Simple interface, get a cookie string "a=b; c=d" for the given URL. 89 // Simple interface, get a cookie string "a=b; c=d" for the given URL.
90 // It will _not_ return httponly cookies, see GetCookiesWithOptions 90 // It will _not_ return httponly cookies, see GetCookiesWithOptions
91 std::string GetCookies(const GURL& url); 91 std::string GetCookies(const GURL& url);
92 std::string GetCookiesWithOptions(const GURL& url, CookieOptions options); 92 std::string GetCookiesWithOptions(const GURL& url, CookieOptions options);
93 // Returns all the cookies, for use in management UI, etc. 93 // Returns all the cookies, for use in management UI, etc.
94 CookieList GetAllCookies(); 94 CookieList GetAllCookies();
95 95
96 // Delete all of the cookies. 96 // Delete all of the cookies.
97 int DeleteAll(bool sync_to_store); 97 int DeleteAll(bool sync_to_store);
98 // Delete all of the cookies that have a creation_date greater than or equal 98 // Delete all of the cookies that have a creation_date greater than or equal
99 // to |delete_begin| and less than |delete_end| 99 // to |delete_begin| and less than |delete_end|
100 int DeleteAllCreatedBetween(const Time& delete_begin, 100 int DeleteAllCreatedBetween(const base::Time& delete_begin,
101 const Time& delete_end, 101 const base::Time& delete_end,
102 bool sync_to_store); 102 bool sync_to_store);
103 // Delete all of the cookies that have a creation_date more recent than the 103 // Delete all of the cookies that have a creation_date more recent than the
104 // one passed into the function via |delete_after|. 104 // one passed into the function via |delete_after|.
105 int DeleteAllCreatedAfter(const Time& delete_begin, bool sync_to_store); 105 int DeleteAllCreatedAfter(const base::Time& delete_begin, bool sync_to_store);
106 106
107 // Delete one specific cookie. 107 // Delete one specific cookie.
108 bool DeleteCookie(const std::string& domain, 108 bool DeleteCookie(const std::string& domain,
109 const CanonicalCookie& cookie, 109 const CanonicalCookie& cookie,
110 bool sync_to_store); 110 bool sync_to_store);
111 111
112 // There are some unknowns about how to correctly handle file:// cookies, 112 // There are some unknowns about how to correctly handle file:// cookies,
113 // and our implementation for this is not robust enough. This allows you 113 // and our implementation for this is not robust enough. This allows you
114 // to enable support, but it should only be used for testing. Bug 1157243. 114 // to enable support, but it should only be used for testing. Bug 1157243.
115 static void EnableFileScheme(); 115 static void EnableFileScheme();
(...skipping 16 matching lines...) Expand all
132 // Should only be called by InitIfNecessary(). 132 // Should only be called by InitIfNecessary().
133 void InitStore(); 133 void InitStore();
134 134
135 void FindCookiesForHostAndDomain(const GURL& url, 135 void FindCookiesForHostAndDomain(const GURL& url,
136 CookieOptions options, 136 CookieOptions options,
137 std::vector<CanonicalCookie*>* cookies); 137 std::vector<CanonicalCookie*>* cookies);
138 138
139 void FindCookiesForKey(const std::string& key, 139 void FindCookiesForKey(const std::string& key,
140 const GURL& url, 140 const GURL& url,
141 CookieOptions options, 141 CookieOptions options,
142 const Time& current, 142 const base::Time& current,
143 std::vector<CanonicalCookie*>* cookies); 143 std::vector<CanonicalCookie*>* cookies);
144 144
145 int DeleteEquivalentCookies(const std::string& key, 145 int DeleteEquivalentCookies(const std::string& key,
146 const CanonicalCookie& ecc); 146 const CanonicalCookie& ecc);
147 147
148 void InternalInsertCookie(const std::string& key, 148 void InternalInsertCookie(const std::string& key,
149 CanonicalCookie* cc, 149 CanonicalCookie* cc,
150 bool sync_to_store); 150 bool sync_to_store);
151 151
152 void InternalDeleteCookie(CookieMap::iterator it, bool sync_to_store); 152 void InternalDeleteCookie(CookieMap::iterator it, bool sync_to_store);
153 153
154 // Enforce cookie maximum limits, purging expired and old cookies if needed 154 // Enforce cookie maximum limits, purging expired and old cookies if needed
155 int GarbageCollect(const Time& current, const std::string& key); 155 int GarbageCollect(const base::Time& current, const std::string& key);
156 int GarbageCollectRange(const Time& current, 156 int GarbageCollectRange(const base::Time& current,
157 const CookieMapItPair& itpair, 157 const CookieMapItPair& itpair,
158 size_t num_max, 158 size_t num_max,
159 size_t num_purge); 159 size_t num_purge);
160 160
161 CookieMap cookies_; 161 CookieMap cookies_;
162 162
163 // Indicates whether the cookie store has been initialized. This happens 163 // Indicates whether the cookie store has been initialized. This happens
164 // lazily in InitStoreIfNecessary(). 164 // lazily in InitStoreIfNecessary().
165 bool initialized_; 165 bool initialized_;
166 166
167 PersistentCookieStore* store_; 167 PersistentCookieStore* store_;
168 168
169 // The resolution of our time isn't enough, so we do something 169 // The resolution of our time isn't enough, so we do something
170 // ugly and increment when we've seen the same time twice. 170 // ugly and increment when we've seen the same time twice.
171 Time CurrentTime(); 171 base::Time CurrentTime();
172 Time last_time_seen_; 172 base::Time last_time_seen_;
173 173
174 // Lock for thread-safety 174 // Lock for thread-safety
175 Lock lock_; 175 Lock lock_;
176 176
177 DISALLOW_COPY_AND_ASSIGN(CookieMonster); 177 DISALLOW_COPY_AND_ASSIGN(CookieMonster);
178 }; 178 };
179 179
180 class CookieMonster::ParsedCookie { 180 class CookieMonster::ParsedCookie {
181 public: 181 public:
182 typedef std::pair<std::string, std::string> TokenValuePair; 182 typedef std::pair<std::string, std::string> TokenValuePair;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 size_t httponly_index_; 230 size_t httponly_index_;
231 231
232 DISALLOW_COPY_AND_ASSIGN(ParsedCookie); 232 DISALLOW_COPY_AND_ASSIGN(ParsedCookie);
233 }; 233 };
234 234
235 235
236 class CookieMonster::CanonicalCookie { 236 class CookieMonster::CanonicalCookie {
237 public: 237 public:
238 CanonicalCookie(const std::string& name, const std::string& value, 238 CanonicalCookie(const std::string& name, const std::string& value,
239 const std::string& path, bool secure, 239 const std::string& path, bool secure,
240 bool httponly, const Time& creation, 240 bool httponly, const base::Time& creation,
241 bool has_expires, const Time& expires) 241 bool has_expires, const base::Time& expires)
242 : name_(name), 242 : name_(name),
243 value_(value), 243 value_(value),
244 path_(path), 244 path_(path),
245 creation_date_(creation), 245 creation_date_(creation),
246 expiry_date_(expires), 246 expiry_date_(expires),
247 has_expires_(has_expires), 247 has_expires_(has_expires),
248 secure_(secure), 248 secure_(secure),
249 httponly_(httponly) { 249 httponly_(httponly) {
250 } 250 }
251 251
252 #if defined(_MSC_VER) && _CPPLIB_VER == 505 252 #if defined(_MSC_VER) && _CPPLIB_VER == 505
253 // On Visual Studio 2008 Service Pack 1, std::vector<> do an early 253 // On Visual Studio 2008 Service Pack 1, std::vector<> do an early
254 // optimization in a way that requires the availability of a default 254 // optimization in a way that requires the availability of a default
255 // constructor. It is because it sees std::pair<> as "swappable", so creates a 255 // constructor. It is because it sees std::pair<> as "swappable", so creates a
256 // dummy to swap with, which requires an empty constructor for any entry in 256 // dummy to swap with, which requires an empty constructor for any entry in
257 // the std::pair. 257 // the std::pair.
258 CanonicalCookie() { } 258 CanonicalCookie() { }
259 #endif 259 #endif
260 260
261 // Supports the default copy constructor. 261 // Supports the default copy constructor.
262 262
263 const std::string& Name() const { return name_; } 263 const std::string& Name() const { return name_; }
264 const std::string& Value() const { return value_; } 264 const std::string& Value() const { return value_; }
265 const std::string& Path() const { return path_; } 265 const std::string& Path() const { return path_; }
266 const Time& CreationDate() const { return creation_date_; } 266 const base::Time& CreationDate() const { return creation_date_; }
267 bool DoesExpire() const { return has_expires_; } 267 bool DoesExpire() const { return has_expires_; }
268 bool IsPersistent() const { return DoesExpire(); } 268 bool IsPersistent() const { return DoesExpire(); }
269 const Time& ExpiryDate() const { return expiry_date_; } 269 const base::Time& ExpiryDate() const { return expiry_date_; }
270 bool IsSecure() const { return secure_; } 270 bool IsSecure() const { return secure_; }
271 bool IsHttpOnly() const { return httponly_; } 271 bool IsHttpOnly() const { return httponly_; }
272 272
273 bool IsExpired(const Time& current) { 273 bool IsExpired(const base::Time& current) {
274 return has_expires_ && current >= expiry_date_; 274 return has_expires_ && current >= expiry_date_;
275 } 275 }
276 276
277 // Are the cookies considered equivalent in the eyes of the RFC. 277 // Are the cookies considered equivalent in the eyes of the RFC.
278 // This says that the domain and path should string match identically. 278 // This says that the domain and path should string match identically.
279 bool IsEquivalent(const CanonicalCookie& ecc) const { 279 bool IsEquivalent(const CanonicalCookie& ecc) const {
280 // It seems like it would make sense to take secure and httponly into 280 // It seems like it would make sense to take secure and httponly into
281 // account, but the RFC doesn't specify this. 281 // account, but the RFC doesn't specify this.
282 return name_ == ecc.Name() && path_ == ecc.Path(); 282 return name_ == ecc.Name() && path_ == ecc.Path();
283 } 283 }
284 284
285 bool IsOnPath(const std::string& url_path) const; 285 bool IsOnPath(const std::string& url_path) const;
286 286
287 std::string DebugString() const; 287 std::string DebugString() const;
288 private: 288 private:
289 std::string name_; 289 std::string name_;
290 std::string value_; 290 std::string value_;
291 std::string path_; 291 std::string path_;
292 Time creation_date_; 292 base::Time creation_date_;
293 Time expiry_date_; 293 base::Time expiry_date_;
294 bool has_expires_; 294 bool has_expires_;
295 bool secure_; 295 bool secure_;
296 bool httponly_; 296 bool httponly_;
297 }; 297 };
298 298
299 class CookieMonster::PersistentCookieStore { 299 class CookieMonster::PersistentCookieStore {
300 public: 300 public:
301 virtual ~PersistentCookieStore() { } 301 virtual ~PersistentCookieStore() { }
302 302
303 // Initializes the store and retrieves the existing cookies. This will be 303 // Initializes the store and retrieves the existing cookies. This will be
304 // called only once at startup. 304 // called only once at startup.
305 virtual bool Load(std::vector<CookieMonster::KeyedCanonicalCookie>*) = 0; 305 virtual bool Load(std::vector<CookieMonster::KeyedCanonicalCookie>*) = 0;
306 306
307 virtual void AddCookie(const std::string&, const CanonicalCookie&) = 0; 307 virtual void AddCookie(const std::string&, const CanonicalCookie&) = 0;
308 virtual void DeleteCookie(const CanonicalCookie&) = 0; 308 virtual void DeleteCookie(const CanonicalCookie&) = 0;
309 309
310 protected: 310 protected:
311 PersistentCookieStore() { } 311 PersistentCookieStore() { }
312 312
313 private: 313 private:
314 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore); 314 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore);
315 }; 315 };
316 316
317 } // namespace net 317 } // namespace net
318 318
319 #endif // NET_BASE_COOKIE_MONSTER_H_ 319 #endif // NET_BASE_COOKIE_MONSTER_H_
320 320
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698