15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROMEOS_NETWORK_NETWORK_STATE_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROMEOS_NETWORK_NETWORK_STATE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <string> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector> 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/values.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/network/managed_state.h" 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "components/onc/onc_constants.h" 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "url/gurl.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace base { 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class DictionaryValue; 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Value; 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Simple class to provide network state information about a network service. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class should always be passed as a const* and should never be held 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// on to. Store network_state->path() (defined in ManagedState) instead and 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// call NetworkStateHandler::GetNetworkState(path) to retrieve the state for 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the network. 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Note: NetworkStateHandler will store an entry for each member of 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Manager.ServiceCompleteList. The visible() method indicates whether the 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// network is visible, and the IsInProfile() method indicates whether the 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// network is saved in a profile. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CHROMEOS_EXPORT NetworkState : public ManagedState { 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit NetworkState(const std::string& path); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~NetworkState(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ManagedState overrides 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If you change this method, update GetProperties too. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool PropertyChanged(const std::string& key, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value& value) OVERRIDE; 42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual bool InitialPropertiesReceived( 43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const base::DictionaryValue& properties) OVERRIDE; 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void GetStateProperties( 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::DictionaryValue* dictionary) const OVERRIDE; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void IPConfigPropertiesChanged(const base::DictionaryValue& properties); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Returns true, if the network requires a service activation. 50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) bool RequiresActivation() const; 51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Accessors 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool visible() const { return visible_; } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& security() const { return security_; } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& device_path() const { return device_path_; } 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& guid() const { return guid_; } 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& profile_path() const { return profile_path_; } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& error() const { return error_; } 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& last_error() const { return last_error_; } 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void clear_last_error() { last_error_.clear(); } 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Returns |connection_state_| if visible, kStateDisconnect otherwise. 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string connection_state() const; 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const base::DictionaryValue& proxy_config() const { return proxy_config_; } 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // IPConfig Properties. These require an extra call to ShillIPConfigClient, 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // so cache them to avoid excessively complex client code. 697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& ip_address() const { return ip_address_; } 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& gateway() const { return gateway_; } 717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::vector<std::string>& dns_servers() const { return dns_servers_; } 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const GURL& web_proxy_auto_discovery_url() const { 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return web_proxy_auto_discovery_url_; 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Wireless property accessors 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool connectable() const { return connectable_; } 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int signal_strength() const { return signal_strength_; } 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Wifi property accessors 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& eap_method() const { return eap_method_; } 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Cellular property accessors 84a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const std::string& network_technology() const { 85a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return network_technology_; 86a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const std::string& activation_type() const { return activation_type_; } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& activation_state() const { return activation_state_; } 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& roaming() const { return roaming_; } 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& payment_url() const { return payment_url_; } 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool cellular_out_of_credits() const { return cellular_out_of_credits_; } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 933240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Whether this network has a CACertNSS nickname set. 943240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch bool HasCACertNSS() const { return has_ca_cert_nss_; } 953240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 96a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Returns true if |connection_state_| is a connected/connecting state. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsConnectedState() const; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsConnectingState() const; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Returns true if this is a network stored in a profile. 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool IsInProfile() const; 102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Returns true if the network properties are stored in a user profile. 104a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool IsPrivate() const; 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Returns a comma separated string of name servers. 1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string GetDnsServersAsString() const; 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 109ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Converts the prefix length to a netmask string. 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string GetNetmask() const; 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Returns a specifier for identifying this network in the absence of a GUID. 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // This should only be used by NetworkStateHandler for keeping track of 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // GUIDs assigned to unsaved networks. 115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string GetSpecifier() const; 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Set the GUID. Called exclusively by NetworkStateHandler. 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void SetGuid(const std::string& guid); 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 120effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Helpers (used e.g. when a state or error is cached) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool StateIsConnected(const std::string& connection_state); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool StateIsConnecting(const std::string& connection_state); 123effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static bool ErrorIsValid(const std::string& error); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 126424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) friend class MobileActivatorTest; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class NetworkStateHandler; 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class NetworkChangeNotifierChromeosUpdateTest; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 130a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Updates |name_| from WiFi.HexSSID if provided, and validates |name_|. 131a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Returns true if |name_| changes. 132a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool UpdateName(const base::DictionaryValue& properties); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Set to true if the network is a member of Manager.Services. 135f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool visible_; 136f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Network Service properties. Avoid adding any additional properties here. 13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Instead use NetworkConfigurationHandler::GetProperties() to asynchronously 13958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // request properties from Shill. 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string security_; 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string eap_method_; // Needed for WiFi EAP networks 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string device_path_; 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string guid_; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string connection_state_; 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string profile_path_; 14658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool connectable_; 14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Reflects the current Shill Service.Error property. This might get cleared 149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // by Shill shortly after a failure. 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::string error_; 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Last non empty Service.Error property. Cleared by NetworkConnectionHandler 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // when a connection attempt is initiated. 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::string last_error_; 155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // IPConfig properties. 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Note: These do not correspond to actual Shill.Service properties 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // but are derived from the service's corresponding IPConfig object. 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string ip_address_; 1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string gateway_; 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string> dns_servers_; 16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int prefix_length_; // Used by GetNetmask() 1633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL web_proxy_auto_discovery_url_; 16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 16558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Wireless properties, used for icons and Connect logic. 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int signal_strength_; 16758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 16858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Cellular properties, used for icons, Connect, and Activation. 169a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::string network_technology_; 1706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string activation_type_; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string activation_state_; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string roaming_; 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string payment_url_; 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool cellular_out_of_credits_; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1763240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // Whether a deprecated CaCertNSS property of this network is set. Required 1773240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch // for migration to PEM. 1783240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch bool has_ca_cert_nss_; 1793240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(pneubeck): Remove this once (Managed)NetworkConfigurationHandler 181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // provides proxy configuration. crbug.com/241775 182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::DictionaryValue proxy_config_; 183f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NetworkState); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROMEOS_NETWORK_NETWORK_STATE_H_ 190