OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2011 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 // Maps hostnames to cookie settings. Written on the UI thread and read on any | |
Bernhard Bauer
2011/10/25 13:11:21
Nit: If this is a class-level comment, you should
marja
2011/10/26 13:03:21
Done.
| |
6 // thread. One instance per profile. | |
7 | |
8 #ifndef CHROME_BROWSER_CONTENT_SETTINGS_COOKIE_SETTINGS_H_ | |
9 #define CHROME_BROWSER_CONTENT_SETTINGS_COOKIE_SETTINGS_H_ | |
10 #pragma once | |
11 | |
12 #include <string> | |
13 | |
14 #include "base/compiler_specific.h" | |
15 #include "base/memory/ref_counted.h" | |
16 #include "base/synchronization/lock.h" | |
17 #include "chrome/browser/content_settings/host_content_settings_map.h" | |
18 #include "chrome/browser/prefs/pref_change_registrar.h" | |
19 #include "chrome/common/content_settings.h" | |
20 #include "content/public/browser/notification_observer.h" | |
21 | |
22 class ContentSettingsPattern; | |
23 class GURL; | |
24 class PrefService; | |
25 class Profile; | |
26 | |
27 // A frontend to the cookie settings of |HostContentSettingsMap|. Handles | |
28 // cookie-specific logic such as blocking third-party cookies. | |
29 class CookieSettings | |
30 : public content::NotificationObserver, | |
31 public base::RefCountedThreadSafe<CookieSettings> { | |
32 public: | |
33 CookieSettings( | |
34 HostContentSettingsMap* host_content_settings_map, | |
35 PrefService* prefs); | |
36 | |
37 virtual ~CookieSettings(); | |
38 | |
39 // Returns the |CookieSettings| associated with the |profile|. | |
40 // | |
41 // This should only be called on the UI thread. | |
42 static CookieSettings* GetForProfile(Profile* profile); | |
43 | |
44 // Returns the default content setting (CONTENT_SETTING_ALLOW, | |
45 // CONTENT_SETTING_BLOCK, or CONTENT_SETTING_SESSION_ONLY) for cookies. If | |
46 // |provider_id| is not NULL, the id of the provider which provided the | |
47 // default setting is assigned to it. | |
48 // | |
49 // This may be called on any thread. | |
50 ContentSetting GetDefaultCookieSetting(std::string* provider_id) const; | |
51 | |
52 // Returns true if the page identified by (|url|, |first_party_url|) is | |
53 // allowed to read cookies. | |
54 // | |
55 // This may be called on any thread. | |
56 bool IsReadingCookieAllowed(const GURL& url, | |
57 const GURL& first_party_url) const; | |
58 | |
59 // Returns true if the page identified by (|url|, |first_party_url|) is | |
60 // allowed to set cookies (permanent or session only). | |
61 // | |
62 // This may be called on any thread. | |
63 bool IsSettingCookieAllowed(const GURL& url, | |
64 const GURL& first_party_url) const; | |
65 | |
66 // Returns true if the cookie set by a page identified by |url| should be | |
67 // session only. Querying this only makes sense if |IsSettingCookieAllowed| | |
68 // has returned true. | |
69 // | |
70 // This may be called on any thread. | |
71 bool IsCookieSessionOnly(const GURL& url) const; | |
72 | |
73 // Returns all patterns with a non-default cookie setting, mapped to their | |
74 // actual settings, in the precedence order of the setting rules. |settings| | |
75 // must be a non-NULL outparam. | |
76 // | |
77 // This may be called on any thread. | |
78 void GetCookieSettings( | |
79 HostContentSettingsMap::SettingsForOneType* settings) const; | |
80 | |
81 // Sets the default content setting (CONTENT_SETTING_ALLOW, | |
82 // CONTENT_SETTING_BLOCK, or CONTENT_SETTING_SESSION_ONLY) for cookies. | |
83 // | |
84 // This should only be called on the UI thread. | |
85 void SetDefaultCookieSetting(ContentSetting setting); | |
86 | |
87 // Sets the cookie setting to CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK or | |
88 // CONTENT_SETTING_SESSION_ONLY for (url, first_party_url) pairs where url | |
Bernhard Bauer
2011/10/25 13:11:21
|first_party_url| does not exist here. Also, the c
marja
2011/10/26 13:03:21
Done.
| |
89 // matches |primary_pattern|. | |
90 // | |
91 // This should only be called on the UI thread. | |
92 void SetCookieSetting(const ContentSettingsPattern& primary_pattern, | |
Bernhard Bauer
2011/10/25 13:11:21
We should not have two methods here.
marja
2011/10/26 13:03:21
Done.
| |
93 ContentSetting setting); | |
94 | |
95 // Sets the cookie setting to CONTENT_SETTING_ALLOW or CONTENT_SETTING_BLOCK | |
96 // for (url, first_party_url) pairs where url matches |primary_pattern| and | |
97 // first_party_url matches |secondary_pattern|. | |
Bernhard Bauer
2011/10/25 13:11:21
This comment is a bit redundant (you're describing
marja
2011/10/26 13:03:21
Done.
| |
98 // | |
99 // This should only be called on the UI thread. | |
100 void SetCookieSetting(const ContentSettingsPattern& primary_pattern, | |
Bernhard Bauer
2011/10/25 13:11:21
Who calls this method, BTW?
marja
2011/10/26 13:03:21
Currently nobody was setting cookie settings where
Bernhard Bauer
2011/10/26 13:24:09
Yes, this is nicer than having overloaded methods,
| |
101 const ContentSettingsPattern& secondary_pattern, | |
102 ContentSetting setting); | |
103 | |
104 // Resets the cookie setting for (url, first_party_url) pairs where url | |
105 // matches |primary_pattern|. | |
106 // | |
107 // This should only be called on the UI thread. | |
108 void ResetCookieSetting(const ContentSettingsPattern& primary_pattern); | |
Bernhard Bauer
2011/10/25 13:11:21
We should not have two methods there either.
marja
2011/10/26 13:03:21
Done.
| |
109 | |
110 // Resets the cookie setting for (url, first_party_url) pairs where url | |
111 // matches |primary_pattern| and first_party_url matches |secondary_pattern|. | |
112 // | |
113 // This should only be called on the UI thread. | |
114 void ResetCookieSetting(const ContentSettingsPattern& primary_pattern, | |
115 const ContentSettingsPattern& secondary_pattern); | |
116 | |
117 // |NotificationObserver| implementation. | |
118 virtual void Observe(int type, | |
119 const content::NotificationSource& source, | |
120 const content::NotificationDetails& details) OVERRIDE; | |
121 | |
122 // Detaches the |CookieSettings| from all |Profile|-related objects like | |
123 // |PrefService|. This methods needs to be called before destroying the | |
124 // |Profile|. Afterwards, none of the methods above that should only be called | |
Bernhard Bauer
2011/10/25 13:11:21
I think we can simplify the comment to "Afterwards
marja
2011/10/26 13:03:21
Done.
| |
125 // on the UI thread should be called anymore. | |
126 void ShutdownOnUIThread(); | |
127 | |
128 // A helper for applying third party cookie blocking rules. | |
129 ContentSetting GetCookieSetting(const GURL& url, | |
130 const GURL& first_party_url, | |
131 bool setting_cookie) const; | |
132 private: | |
133 class Factory; | |
134 | |
135 // This setting trumps any host-specific settings. | |
Bernhard Bauer
2011/10/25 13:11:21
This comment isn't true anymore.
marja
2011/10/26 13:03:21
Done.
| |
136 // | |
137 // This method may be called on any thread. | |
138 bool ShouldBlockThirdPartyCookies() const; | |
139 | |
140 scoped_refptr<HostContentSettingsMap> host_content_settings_map_; | |
141 PrefChangeRegistrar pref_change_registrar_; | |
142 | |
143 // Used around accesses to |block_third_party_cookies_| to guarantee thread | |
144 // safety. | |
145 mutable base::Lock lock_; | |
146 | |
147 bool block_third_party_cookies_; | |
148 }; | |
149 | |
150 #endif // CHROME_BROWSER_CONTENT_SETTINGS_COOKIE_SETTINGS_H_ | |
OLD | NEW |