| 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 |