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

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

Issue 2860012: Revert 50296 (Causes DCHECK failures) - Make CookieMonster NonThreadSafe.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 6 months 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
« no previous file with comments | « chrome/browser/net/cookie_policy_browsertest.cc ('k') | net/base/cookie_monster.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/lock.h" 16 #include "base/lock.h"
17 #include "base/logging.h"
18 #include "base/non_thread_safe.h"
19 #include "base/ref_counted.h" 17 #include "base/ref_counted.h"
20 #include "base/scoped_ptr.h" 18 #include "base/scoped_ptr.h"
21 #include "base/time.h" 19 #include "base/time.h"
22 #include "net/base/cookie_store.h" 20 #include "net/base/cookie_store.h"
23 21
24 class GURL; 22 class GURL;
25 23
26 namespace net { 24 namespace net {
27 25
28 // The cookie monster is the system for storing and retrieving cookies. It has 26 // The cookie monster is the system for storing and retrieving cookies. It has
29 // an in-memory list of all cookies, and synchronizes non-session cookies to an 27 // an in-memory list of all cookies, and synchronizes non-session cookies to an
30 // optional permanent storage that implements the PersistentCookieStore 28 // optional permanent storage that implements the PersistentCookieStore
31 // interface. 29 // interface.
32 // 30 //
33 // This class IS thread-safe. Normally, it is only used on the I/O thread, but 31 // This class IS thread-safe. Normally, it is only used on the I/O thread, but
34 // is also accessed directly through Automation for UI testing. 32 // is also accessed directly through Automation for UI testing.
35 // 33 //
36 // TODO(deanm) Implement CookieMonster, the cookie database. 34 // TODO(deanm) Implement CookieMonster, the cookie database.
37 // - Verify that our domain enforcement and non-dotted handling is correct 35 // - Verify that our domain enforcement and non-dotted handling is correct
38 class CookieMonster : public CookieStore, NonThreadSafe { 36 class CookieMonster : public CookieStore {
39 public: 37 public:
40 class CanonicalCookie; 38 class CanonicalCookie;
41 class Delegate; 39 class Delegate;
42 class ParsedCookie; 40 class ParsedCookie;
43 class PersistentCookieStore; 41 class PersistentCookieStore;
44 42
45 // NOTE(deanm): 43 // NOTE(deanm):
46 // I benchmarked hash_multimap vs multimap. We're going to be query-heavy 44 // I benchmarked hash_multimap vs multimap. We're going to be query-heavy
47 // so it would seem like hashing would help. However they were very 45 // so it would seem like hashing would help. However they were very
48 // close, with multimap being a tiny bit faster. I think this is because 46 // close, with multimap being a tiny bit faster. I think this is because
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 // i.e. it doesn't begin with a leading '.' character. 81 // i.e. it doesn't begin with a leading '.' character.
84 static bool DomainIsHostOnly(const std::string& domain_string); 82 static bool DomainIsHostOnly(const std::string& domain_string);
85 83
86 // CookieStore implementation. 84 // CookieStore implementation.
87 virtual bool SetCookieWithOptions(const GURL& url, 85 virtual bool SetCookieWithOptions(const GURL& url,
88 const std::string& cookie_line, 86 const std::string& cookie_line,
89 const CookieOptions& options); 87 const CookieOptions& options);
90 virtual std::string GetCookiesWithOptions(const GURL& url, 88 virtual std::string GetCookiesWithOptions(const GURL& url,
91 const CookieOptions& options); 89 const CookieOptions& options);
92 virtual void DeleteCookie(const GURL& url, const std::string& cookie_name); 90 virtual void DeleteCookie(const GURL& url, const std::string& cookie_name);
93 virtual CookieMonster* GetCookieMonster() { 91 virtual CookieMonster* GetCookieMonster() { return this; }
94 DCHECK(CalledOnValidThread());
95 return this;
96 }
97 92
98 // Sets a cookie given explicit user-provided cookie attributes. The cookie 93 // Sets a cookie given explicit user-provided cookie attributes. The cookie
99 // name, value, domain, etc. are each provided as separate strings. This 94 // name, value, domain, etc. are each provided as separate strings. This
100 // function expects each attribute to be well-formed. It will check for 95 // function expects each attribute to be well-formed. It will check for
101 // disallowed characters (e.g. the ';' character is disallowed within the 96 // disallowed characters (e.g. the ';' character is disallowed within the
102 // cookie value attribute) and will return false without setting the cookie 97 // cookie value attribute) and will return false without setting the cookie
103 // if such characters are found. 98 // if such characters are found.
104 bool SetCookieWithDetails(const GURL& url, 99 bool SetCookieWithDetails(const GURL& url,
105 const std::string& name, 100 const std::string& name,
106 const std::string& value, 101 const std::string& value,
107 const std::string& domain, 102 const std::string& domain,
108 const std::string& path, 103 const std::string& path,
109 const base::Time& expiration_time, 104 const base::Time& expiration_time,
110 bool secure, bool http_only); 105 bool secure, bool http_only);
111 106
112 // Exposed for unit testing. 107 // Exposed for unit testing.
113 bool SetCookieWithCreationTimeAndOptions(const GURL& url, 108 bool SetCookieWithCreationTimeAndOptions(const GURL& url,
114 const std::string& cookie_line, 109 const std::string& cookie_line,
115 const base::Time& creation_time, 110 const base::Time& creation_time,
116 const CookieOptions& options); 111 const CookieOptions& options);
117 bool SetCookieWithCreationTime(const GURL& url, 112 bool SetCookieWithCreationTime(const GURL& url,
118 const std::string& cookie_line, 113 const std::string& cookie_line,
119 const base::Time& creation_time) { 114 const base::Time& creation_time) {
120 DCHECK(CalledOnValidThread());
121 return SetCookieWithCreationTimeAndOptions(url, cookie_line, creation_time, 115 return SetCookieWithCreationTimeAndOptions(url, cookie_line, creation_time,
122 CookieOptions()); 116 CookieOptions());
123 } 117 }
124 118
125 // Returns all the cookies, for use in management UI, etc. This does not mark 119 // Returns all the cookies, for use in management UI, etc. This does not mark
126 // the cookies as having been accessed. 120 // the cookies as having been accessed.
127 CookieList GetAllCookies(); 121 CookieList GetAllCookies();
128 122
129 // Returns all the cookies, for use in management UI, etc. Filters results 123 // Returns all the cookies, for use in management UI, etc. Filters results
130 // using given url scheme, host / domain and path. This does not mark the 124 // using given url scheme, host / domain and path. This does not mark the
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 base::Time last_time_seen_; 276 base::Time last_time_seen_;
283 277
284 // Minimum delay after updating a cookie's LastAccessDate before we will 278 // Minimum delay after updating a cookie's LastAccessDate before we will
285 // update it again. 279 // update it again.
286 const base::TimeDelta last_access_threshold_; 280 const base::TimeDelta last_access_threshold_;
287 281
288 std::vector<std::string> cookieable_schemes_; 282 std::vector<std::string> cookieable_schemes_;
289 283
290 scoped_refptr<Delegate> delegate_; 284 scoped_refptr<Delegate> delegate_;
291 285
292 // TODO(willchan): Remove this lock after making sure CookieMonster is
293 // completely single threaded.
294 // Lock for thread-safety 286 // Lock for thread-safety
295 Lock lock_; 287 Lock lock_;
296 288
297 DISALLOW_COPY_AND_ASSIGN(CookieMonster); 289 DISALLOW_COPY_AND_ASSIGN(CookieMonster);
298 }; 290 };
299 291
300 class CookieMonster::CanonicalCookie { 292 class CookieMonster::CanonicalCookie {
301 public: 293 public:
302 CanonicalCookie() { } 294 CanonicalCookie() { }
303 CanonicalCookie(const std::string& name, 295 CanonicalCookie(const std::string& name,
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 protected: 491 protected:
500 PersistentCookieStore() { } 492 PersistentCookieStore() { }
501 493
502 private: 494 private:
503 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore); 495 DISALLOW_COPY_AND_ASSIGN(PersistentCookieStore);
504 }; 496 };
505 497
506 } // namespace net 498 } // namespace net
507 499
508 #endif // NET_BASE_COOKIE_MONSTER_H_ 500 #endif // NET_BASE_COOKIE_MONSTER_H_
OLDNEW
« no previous file with comments | « chrome/browser/net/cookie_policy_browsertest.cc ('k') | net/base/cookie_monster.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698