OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 // Patterns used in content setting rules. | 5 // Patterns used in content setting rules. |
6 | 6 |
7 #ifndef CHROME_COMMON_CONTENT_SETTINGS_PATTERN_H_ | 7 #ifndef CHROME_COMMON_CONTENT_SETTINGS_PATTERN_H_ |
8 #define CHROME_COMMON_CONTENT_SETTINGS_PATTERN_H_ | 8 #define CHROME_COMMON_CONTENT_SETTINGS_PATTERN_H_ |
9 | 9 |
10 #include <ostream> | 10 #include <ostream> |
11 #include <string> | 11 #include <string> |
12 | 12 |
13 #include "base/basictypes.h" | 13 #include "base/basictypes.h" |
14 #include "base/compiler_specific.h" | |
15 #include "base/gtest_prod_util.h" | 14 #include "base/gtest_prod_util.h" |
16 | 15 |
17 class GURL; | 16 class GURL; |
18 class Pickle; | |
19 class PickleIterator; | 17 class PickleIterator; |
20 | 18 |
21 namespace content_settings { | 19 namespace content_settings { |
| 20 class ContentSettingsClient; |
22 class PatternParser; | 21 class PatternParser; |
23 } | 22 } |
24 | 23 |
25 namespace IPC { | 24 namespace IPC { |
26 class Message; | 25 class Message; |
27 } | 26 } |
28 | 27 |
29 // A pattern used in content setting rules. See |IsValid| for a description of | 28 // A pattern used in content setting rules. See |IsValid| for a description of |
30 // possible patterns. | 29 // possible patterns. |
31 class ContentSettingsPattern { | 30 class ContentSettingsPattern { |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 // Returns a content settings pattern according to the current configuration | 123 // Returns a content settings pattern according to the current configuration |
125 // of the builder. | 124 // of the builder. |
126 virtual ContentSettingsPattern Build() = 0; | 125 virtual ContentSettingsPattern Build() = 0; |
127 }; | 126 }; |
128 | 127 |
129 static BuilderInterface* CreateBuilder(bool use_legacy_validate); | 128 static BuilderInterface* CreateBuilder(bool use_legacy_validate); |
130 | 129 |
131 // The version of the pattern format implemented. | 130 // The version of the pattern format implemented. |
132 static const int kContentSettingsPatternVersion; | 131 static const int kContentSettingsPatternVersion; |
133 | 132 |
134 // The format of a domain wildcard. | |
135 static const char* kDomainWildcard; | |
136 | |
137 // The length of kDomainWildcard (without the trailing '\0'). | |
138 static const size_t kDomainWildcardLength; | |
139 | |
140 // Returns a wildcard content settings pattern that matches all possible valid | 133 // Returns a wildcard content settings pattern that matches all possible valid |
141 // origins. | 134 // origins. |
142 static ContentSettingsPattern Wildcard(); | 135 static ContentSettingsPattern Wildcard(); |
143 | 136 |
144 // Returns a pattern that matches the scheme and host of this URL, as well as | 137 // Returns a pattern that matches the scheme and host of this URL, as well as |
145 // all subdomains and ports. | 138 // all subdomains and ports. |
146 static ContentSettingsPattern FromURL(const GURL& url); | 139 static ContentSettingsPattern FromURL(const GURL& url); |
147 | 140 |
148 // Returns a pattern that matches exactly this URL. | 141 // Returns a pattern that matches exactly this URL. |
149 static ContentSettingsPattern FromURLNoWildcard(const GURL& url); | 142 static ContentSettingsPattern FromURLNoWildcard(const GURL& url); |
150 | 143 |
151 // Returns a pattern that matches the given pattern specification. | 144 // Returns a pattern that matches the given pattern specification. |
152 // Valid patterns specifications are: | 145 // Valid patterns specifications are: |
153 // - [*.]domain.tld (matches domain.tld and all sub-domains) | 146 // - [*.]domain.tld (matches domain.tld and all sub-domains) |
154 // - host (matches an exact hostname) | 147 // - host (matches an exact hostname) |
155 // - scheme://host:port (supported schemes: http,https) | 148 // - scheme://host:port (supported schemes: http,https) |
156 // - scheme://[*.]domain.tld:port (supported schemes: http,https) | 149 // - scheme://[*.]domain.tld:port (supported schemes: http,https) |
157 // - file://path (The path has to be an absolute path and start with a '/') | 150 // - file://path (The path has to be an absolute path and start with a '/') |
158 // - a.b.c.d (matches an exact IPv4 ip) | 151 // - a.b.c.d (matches an exact IPv4 ip) |
159 // - [a:b:c:d:e:f:g:h] (matches an exact IPv6 ip) | 152 // - [a:b:c:d:e:f:g:h] (matches an exact IPv6 ip) |
160 static ContentSettingsPattern FromString(const std::string& pattern_spec); | 153 static ContentSettingsPattern FromString( |
161 | 154 content_settings::ContentSettingsClient* client, |
162 static ContentSettingsPattern LegacyFromString( | |
163 const std::string& pattern_spec); | 155 const std::string& pattern_spec); |
164 | 156 |
165 // Constructs an empty pattern. Empty patterns are invalid patterns. Invalid | 157 // Constructs an empty pattern. Empty patterns are invalid patterns. Invalid |
166 // patterns match nothing. | 158 // patterns match nothing. |
167 ContentSettingsPattern(); | 159 ContentSettingsPattern(); |
168 | 160 |
169 // Serializes the pattern to an IPC message or deserializes it. | 161 // Serializes the pattern to an IPC message or deserializes it. |
170 void WriteToMessage(IPC::Message* m) const; | 162 void WriteToMessage(IPC::Message* m) const; |
171 bool ReadFromMessage(const IPC::Message* m, PickleIterator* iter); | 163 bool ReadFromMessage(const IPC::Message* m, PickleIterator* iter); |
172 | 164 |
173 // True if this is a valid pattern. | 165 // True if this is a valid pattern. |
174 bool IsValid() const { return is_valid_; } | 166 bool IsValid() const { return is_valid_; } |
175 | 167 |
176 // True if |url| matches this pattern. | 168 // True if |url| matches this pattern. |
177 bool Matches(const GURL& url) const; | 169 bool Matches(const GURL& url) const; |
178 | 170 |
179 // True if this pattern matches all hosts (i.e. it has a host wildcard). | 171 // True if this pattern matches all hosts (i.e. it has a host wildcard). |
180 bool MatchesAllHosts() const; | 172 bool MatchesAllHosts() const; |
181 | 173 |
182 // Returns a std::string representation of this pattern. | 174 // Returns a std::string representation of this pattern. |
183 const std::string ToString() const; | 175 std::string ToString(content_settings::ContentSettingsClient* client) const; |
184 | 176 |
185 // Compares the pattern with a given |other| pattern and returns the | 177 // Compares the pattern with a given |other| pattern and returns the |
186 // |Relation| of the two patterns. | 178 // |Relation| of the two patterns. |
187 Relation Compare(const ContentSettingsPattern& other) const; | 179 Relation Compare(const ContentSettingsPattern& other) const; |
188 | 180 |
189 // Returns true if the pattern and the |other| pattern are identical. | 181 // Returns true if the pattern and the |other| pattern are identical. |
190 bool operator==(const ContentSettingsPattern& other) const; | 182 bool operator==(const ContentSettingsPattern& other) const; |
191 | 183 |
192 // Returns true if the pattern and the |other| pattern are not identical. | 184 // Returns true if the pattern and the |other| pattern are not identical. |
193 bool operator!=(const ContentSettingsPattern& other) const; | 185 bool operator!=(const ContentSettingsPattern& other) const; |
194 | 186 |
195 // Returns true if the pattern has a lower priority than the |other| pattern. | 187 // Returns true if the pattern has a lower priority than the |other| pattern. |
196 bool operator<(const ContentSettingsPattern& other) const; | 188 bool operator<(const ContentSettingsPattern& other) const; |
197 | 189 |
198 // Returns true if the pattern has a higher priority than the |other| pattern. | 190 // Returns true if the pattern has a higher priority than the |other| pattern. |
199 bool operator>(const ContentSettingsPattern& other) const; | 191 bool operator>(const ContentSettingsPattern& other) const; |
200 | 192 |
201 private: | 193 private: |
202 friend class content_settings::PatternParser; | 194 friend class content_settings::PatternParser; |
203 friend class Builder; | |
204 FRIEND_TEST_ALL_PREFIXES(ContentSettingsPatternParserTest, SerializePatterns); | 195 FRIEND_TEST_ALL_PREFIXES(ContentSettingsPatternParserTest, SerializePatterns); |
205 | 196 |
206 class Builder : public BuilderInterface { | 197 class Builder; |
207 public: | |
208 explicit Builder(bool use_legacy_validate); | |
209 virtual ~Builder(); | |
210 | |
211 // Overrides BuilderInterface | |
212 virtual BuilderInterface* WithPort(const std::string& port) OVERRIDE; | |
213 | |
214 virtual BuilderInterface* WithPortWildcard() OVERRIDE; | |
215 | |
216 virtual BuilderInterface* WithHost(const std::string& host) OVERRIDE; | |
217 | |
218 virtual BuilderInterface* WithDomainWildcard() OVERRIDE; | |
219 | |
220 virtual BuilderInterface* WithScheme(const std::string& scheme) OVERRIDE; | |
221 | |
222 virtual BuilderInterface* WithSchemeWildcard() OVERRIDE; | |
223 | |
224 virtual BuilderInterface* WithPath(const std::string& path) OVERRIDE; | |
225 | |
226 virtual BuilderInterface* WithPathWildcard() OVERRIDE; | |
227 | |
228 virtual BuilderInterface* Invalid() OVERRIDE; | |
229 | |
230 virtual ContentSettingsPattern Build() OVERRIDE; | |
231 | |
232 private: | |
233 // Canonicalizes the pattern parts so that they are ASCII only, either | |
234 // in original (if it was already ASCII) or punycode form. Returns true if | |
235 // the canonicalization was successful. | |
236 static bool Canonicalize(PatternParts* parts); | |
237 | |
238 // Returns true when the pattern |parts| represent a valid pattern. | |
239 static bool Validate(const PatternParts& parts); | |
240 | |
241 static bool LegacyValidate(const PatternParts& parts); | |
242 | |
243 bool is_valid_; | |
244 | |
245 bool use_legacy_validate_; | |
246 | |
247 PatternParts parts_; | |
248 | |
249 DISALLOW_COPY_AND_ASSIGN(Builder); | |
250 }; | |
251 | 198 |
252 static Relation CompareScheme( | 199 static Relation CompareScheme( |
253 const ContentSettingsPattern::PatternParts& parts, | 200 const ContentSettingsPattern::PatternParts& parts, |
254 const ContentSettingsPattern::PatternParts& other_parts); | 201 const ContentSettingsPattern::PatternParts& other_parts); |
255 | 202 |
256 static Relation CompareHost( | 203 static Relation CompareHost( |
257 const ContentSettingsPattern::PatternParts& parts, | 204 const ContentSettingsPattern::PatternParts& parts, |
258 const ContentSettingsPattern::PatternParts& other_parts); | 205 const ContentSettingsPattern::PatternParts& other_parts); |
259 | 206 |
260 static Relation ComparePort( | 207 static Relation ComparePort( |
261 const ContentSettingsPattern::PatternParts& parts, | 208 const ContentSettingsPattern::PatternParts& parts, |
262 const ContentSettingsPattern::PatternParts& other_parts); | 209 const ContentSettingsPattern::PatternParts& other_parts); |
263 | 210 |
264 static bool Validate(const PatternParts& parts); | 211 static bool Validate(const PatternParts& parts); |
265 | 212 |
266 ContentSettingsPattern(const PatternParts& parts, bool valid); | 213 ContentSettingsPattern(const PatternParts& parts, bool valid); |
267 | 214 |
268 PatternParts parts_; | 215 PatternParts parts_; |
269 | 216 |
270 bool is_valid_; | 217 bool is_valid_; |
271 }; | 218 }; |
272 | 219 |
273 // Stream operator so ContentSettingsPattern can be used in assertion | |
274 // statements. | |
275 inline std::ostream& operator<<( | |
276 std::ostream& out, const ContentSettingsPattern& pattern) { | |
277 return out << pattern.ToString(); | |
278 } | |
279 | |
280 #endif // CHROME_COMMON_CONTENT_SETTINGS_PATTERN_H_ | 220 #endif // CHROME_COMMON_CONTENT_SETTINGS_PATTERN_H_ |
OLD | NEW |