| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROMEOS_NETWORK_NETWORK_TYPE_PATTERN_H_ |
| #define CHROMEOS_NETWORK_NETWORK_TYPE_PATTERN_H_ |
| |
| #include <string> |
| |
| #include "base/component_export.h" |
| #include "base/macros.h" |
| |
| namespace chromeos { |
| |
| class COMPONENT_EXPORT(CHROMEOS_NETWORK) NetworkTypePattern { |
| public: |
| // Matches any network. |
| static NetworkTypePattern Default(); |
| |
| // Matches wireless (WiFi, Cellular, etc.) networks |
| static NetworkTypePattern Wireless(); |
| |
| // Matches Cellular, WiMAX, or Tether networks. |
| static NetworkTypePattern Mobile(); |
| |
| // Matches Physical networks (i.e. excludes Tether and VPN). |
| static NetworkTypePattern Physical(); |
| |
| // Excludes virtual networks and EthernetEAP. |
| static NetworkTypePattern NonVirtual(); |
| |
| // Matches ethernet networks. |
| static NetworkTypePattern Ethernet(); |
| |
| // Matches ethernet or ethernet EAP networks. |
| static NetworkTypePattern EthernetOrEthernetEAP(); |
| |
| static NetworkTypePattern WiFi(); |
| static NetworkTypePattern Cellular(); |
| static NetworkTypePattern VPN(); |
| static NetworkTypePattern Wimax(); |
| |
| static NetworkTypePattern Tether(); |
| |
| // Matches only networks of exactly the type |shill_network_type|, which must |
| // be one of the types defined in service_constants.h (e.g. |
| // shill::kTypeWifi). |
| // Note: Shill distinguishes Ethernet without EAP from Ethernet with EAP. If |
| // unsure, better use one of the matchers above. |
| static NetworkTypePattern Primitive(const std::string& shill_network_type); |
| |
| bool Equals(const NetworkTypePattern& other) const; |
| bool MatchesType(const std::string& shill_network_type) const; |
| |
| // Returns true if this pattern matches at least one network type that |
| // |other_pattern| matches (according to MatchesType). Thus MatchesPattern is |
| // symmetric and reflexive but not transitive. |
| // See the unit test for examples. |
| bool MatchesPattern(const NetworkTypePattern& other_pattern) const; |
| |
| NetworkTypePattern operator|(const NetworkTypePattern& other) const; |
| |
| std::string ToDebugString() const; |
| |
| private: |
| explicit NetworkTypePattern(int pattern); |
| |
| // The bit array of the matching network types. |
| int pattern_; |
| |
| DISALLOW_ASSIGN(NetworkTypePattern); |
| }; |
| |
| } // namespace chromeos |
| |
| #endif // CHROMEOS_NETWORK_NETWORK_TYPE_PATTERN_H_ |