| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 #ifndef NET_PROXY_PROXY_BYPASS_RULES_H_ | 5 #ifndef NET_PROXY_PROXY_BYPASS_RULES_H_ |
| 6 #define NET_PROXY_PROXY_BYPASS_RULES_H_ | 6 #define NET_PROXY_PROXY_BYPASS_RULES_H_ |
| 7 | 7 |
| 8 #include <memory> |
| 8 #include <string> | 9 #include <string> |
| 9 #include <vector> | 10 #include <vector> |
| 10 | 11 |
| 11 #include "base/macros.h" | 12 #include "base/macros.h" |
| 12 #include "net/base/net_export.h" | 13 #include "net/base/net_export.h" |
| 13 #include "url/gurl.h" | 14 #include "url/gurl.h" |
| 14 | 15 |
| 15 namespace net { | 16 namespace net { |
| 16 | 17 |
| 17 // ProxyBypassRules describes the set of URLs that should bypass the proxy | 18 // ProxyBypassRules describes the set of URLs that should bypass the proxy |
| 18 // settings, as a list of rules. A URL is said to match the bypass rules | 19 // settings, as a list of rules. A URL is said to match the bypass rules |
| 19 // if it matches any one of these rules. | 20 // if it matches any one of these rules. |
| 20 class NET_EXPORT ProxyBypassRules { | 21 class NET_EXPORT ProxyBypassRules { |
| 21 public: | 22 public: |
| 22 // Interface for an individual proxy bypass rule. | 23 // Interface for an individual proxy bypass rule. |
| 23 class NET_EXPORT Rule { | 24 class NET_EXPORT Rule { |
| 24 public: | 25 public: |
| 25 Rule(); | 26 Rule(); |
| 26 virtual ~Rule(); | 27 virtual ~Rule(); |
| 27 | 28 |
| 28 // Returns true if |url| matches the rule. | 29 // Returns true if |url| matches the rule. |
| 29 virtual bool Matches(const GURL& url) const = 0; | 30 virtual bool Matches(const GURL& url) const = 0; |
| 30 | 31 |
| 31 // Returns a string representation of this rule. This is used both for | 32 // Returns a string representation of this rule. This is used both for |
| 32 // visualizing the rules, and also to test equality of a rules list. | 33 // visualizing the rules, and also to test equality of a rules list. |
| 33 virtual std::string ToString() const = 0; | 34 virtual std::string ToString() const = 0; |
| 34 | 35 |
| 35 // Creates a copy of this rule. (Caller is responsible for deleting it) | 36 // Creates a copy of this rule. |
| 36 virtual Rule* Clone() const = 0; | 37 virtual std::unique_ptr<Rule> Clone() const = 0; |
| 37 | 38 |
| 38 bool Equals(const Rule& rule) const; | 39 bool Equals(const Rule& rule) const; |
| 39 | 40 |
| 40 private: | 41 private: |
| 41 DISALLOW_COPY_AND_ASSIGN(Rule); | 42 DISALLOW_COPY_AND_ASSIGN(Rule); |
| 42 }; | 43 }; |
| 43 | 44 |
| 44 typedef std::vector<const Rule*> RuleList; | 45 typedef std::vector<std::unique_ptr<Rule>> RuleList; |
| 45 | 46 |
| 46 // Note: This class supports copy constructor and assignment. | 47 // Note: This class supports copy constructor and assignment. |
| 47 ProxyBypassRules(); | 48 ProxyBypassRules(); |
| 48 ProxyBypassRules(const ProxyBypassRules& rhs); | 49 ProxyBypassRules(const ProxyBypassRules& rhs); |
| 49 ~ProxyBypassRules(); | 50 ~ProxyBypassRules(); |
| 50 ProxyBypassRules& operator=(const ProxyBypassRules& rhs); | 51 ProxyBypassRules& operator=(const ProxyBypassRules& rhs); |
| 51 | 52 |
| 52 // Returns the current list of rules. The rules list contains pointers | 53 // Returns the current list of rules. The rules list contains pointers |
| 53 // which are owned by this class, callers should NOT keep references | 54 // which are owned by this class, callers should NOT keep references |
| 54 // or delete them. | 55 // or delete them. |
| 55 const RuleList& rules() const { return rules_; } | 56 const RuleList& rules() const { return rules_; } |
| 56 | 57 |
| 57 // Returns true if |url| matches any of the proxy bypass rules. | 58 // Returns true if |url| matches any of the proxy bypass rules. |
| 58 bool Matches(const GURL& url) const; | 59 bool Matches(const GURL& url) const; |
| 59 | 60 |
| 60 // Returns true if |*this| is equal to |other|; in other words, whether they | 61 // Returns true if |*this| is equal to |other|; in other words, whether they |
| 61 // describe the same set of rules. | 62 // describe the same set of rules. |
| 62 bool Equals(const ProxyBypassRules& other) const; | 63 bool Equals(const ProxyBypassRules& other) const; |
| 63 | 64 |
| 64 // Initializes the list of rules by parsing the string |raw|. |raw| is a | 65 // Initializes the list of rules by parsing the string |raw|. |raw| is a |
| 65 // comma separated list of rules. See AddRuleFromString() to see the list | 66 // comma separated list of rules. See AddRuleFromString() to see the list |
| 66 // of supported formats. | 67 // of supported formats. |
| 67 void ParseFromString(const std::string& raw); | 68 void ParseFromString(const std::string& raw); |
| 68 | 69 |
| 69 // This is a variant of ParseFromString, which interprets hostname patterns | 70 // This is a variant of ParseFromString, which interprets hostname patterns |
| 70 // as suffix tests rather than hostname tests (so "google.com" would actually | 71 // as suffix tests rather than hostname tests (so "google.com" would actually |
| 71 // match "*google.com"). This is only currently used for the linux no_proxy | 72 // match "*google.com"). This is only currently used for the linux no_proxy |
| 72 // evironment variable. It is less flexible, since with the suffix matching | 73 // environment variable. It is less flexible, since with the suffix matching |
| 73 // format you can't match an individual host. | 74 // format you can't match an individual host. |
| 74 // NOTE: Use ParseFromString() unless you truly need this behavior. | 75 // NOTE: Use ParseFromString() unless you truly need this behavior. |
| 75 void ParseFromStringUsingSuffixMatching(const std::string& raw); | 76 void ParseFromStringUsingSuffixMatching(const std::string& raw); |
| 76 | 77 |
| 77 // Adds a rule that matches a URL when all of the following are true: | 78 // Adds a rule that matches a URL when all of the following are true: |
| 78 // (a) The URL's scheme matches |optional_scheme|, if | 79 // (a) The URL's scheme matches |optional_scheme|, if |
| 79 // |!optional_scheme.empty()| | 80 // |!optional_scheme.empty()| |
| 80 // (b) The URL's hostname matches |hostname_pattern|. | 81 // (b) The URL's hostname matches |hostname_pattern|. |
| 81 // (c) The URL's (effective) port number matches |optional_port| if | 82 // (c) The URL's (effective) port number matches |optional_port| if |
| 82 // |optional_port != -1| | 83 // |optional_port != -1| |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 bool use_hostname_suffix_matching); | 172 bool use_hostname_suffix_matching); |
| 172 bool AddRuleFromStringInternalWithLogging(const std::string& raw, | 173 bool AddRuleFromStringInternalWithLogging(const std::string& raw, |
| 173 bool use_hostname_suffix_matching); | 174 bool use_hostname_suffix_matching); |
| 174 | 175 |
| 175 RuleList rules_; | 176 RuleList rules_; |
| 176 }; | 177 }; |
| 177 | 178 |
| 178 } // namespace net | 179 } // namespace net |
| 179 | 180 |
| 180 #endif // NET_PROXY_PROXY_BYPASS_RULES_H_ | 181 #endif // NET_PROXY_PROXY_BYPASS_RULES_H_ |
| OLD | NEW |