Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: chrome/browser/chromeos/cros/network_library.cc

Issue 7247021: Add remembered virtual networks to NetworkLibrary and internet options. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Change Wifi::RequiresUserProfile() logic. Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #include "chrome/browser/chromeos/cros/network_library.h" 5 #include "chrome/browser/chromeos/cros/network_library.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 9
10 #include "base/i18n/icu_encoding_detection.h" 10 #include "base/i18n/icu_encoding_detection.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 // wifi_networks_: ordered vector of WifiNetwork* entries in network_map_, 48 // wifi_networks_: ordered vector of WifiNetwork* entries in network_map_,
49 // in descending order of importance. 49 // in descending order of importance.
50 // CellularNetwork 50 // CellularNetwork
51 // active_cellular_: Cellular version of wifi_. 51 // active_cellular_: Cellular version of wifi_.
52 // cellular_networks_: Cellular version of wifi_. 52 // cellular_networks_: Cellular version of wifi_.
53 // network_unique_id_map_: map<unique_id,Network*> for visible networks. 53 // network_unique_id_map_: map<unique_id,Network*> for visible networks.
54 // remembered_network_map_: a canonical map<path,Network*> for all networks 54 // remembered_network_map_: a canonical map<path,Network*> for all networks
55 // remembered in the active Profile ("favorites"). 55 // remembered in the active Profile ("favorites").
56 // remembered_wifi_networks_: ordered vector of WifiNetwork* entries in 56 // remembered_wifi_networks_: ordered vector of WifiNetwork* entries in
57 // remembered_network_map_, in descending order of preference. 57 // remembered_network_map_, in descending order of preference.
58 // remembered_virtual_networks_: ordered vector of VirtualNetwork* entries in
59 // remembered_network_map_, in descending order of preference.
58 // 60 //
59 // network_manager_monitor_: a handle to the libcros network Manager handler. 61 // network_manager_monitor_: a handle to the libcros network Manager handler.
60 // NetworkManagerStatusChanged: This handles all messages from the Manager. 62 // NetworkManagerStatusChanged: This handles all messages from the Manager.
61 // Messages are parsed here and the appropriate updates are then requested. 63 // Messages are parsed here and the appropriate updates are then requested.
62 // 64 //
63 // UpdateNetworkServiceList: This is the primary Manager handler. It handles 65 // UpdateNetworkServiceList: This is the primary Manager handler. It handles
64 // the "Services" message which list all visible networks. The handler 66 // the "Services" message which list all visible networks. The handler
65 // rebuilds the network lists without destroying existing Network structures, 67 // rebuilds the network lists without destroying existing Network structures,
66 // then requests neccessary updates to be fetched asynchronously from 68 // then requests neccessary updates to be fetched asynchronously from
67 // libcros (RequestNetworkServiceInfo). 69 // libcros (RequestNetworkServiceInfo).
(...skipping 1090 matching lines...) Expand 10 before | Expand all | Expand 10 after
1158 bool res = info->GetWithoutPathExpansion(key, &value); 1160 bool res = info->GetWithoutPathExpansion(key, &value);
1159 DCHECK(res); 1161 DCHECK(res);
1160 if (res) { 1162 if (res) {
1161 int index = property_index_parser().Get(key); 1163 int index = property_index_parser().Get(key);
1162 if (!ParseValue(index, value)) // virtual. 1164 if (!ParseValue(index, value)) // virtual.
1163 VLOG(1) << "Network: " << name() 1165 VLOG(1) << "Network: " << name()
1164 << " Type: " << ConnectionTypeToString(type()) 1166 << " Type: " << ConnectionTypeToString(type())
1165 << " Unhandled key: " << key; 1167 << " Unhandled key: " << key;
1166 } 1168 }
1167 } 1169 }
1170 CalculateUniqueId();
1168 } 1171 }
1169 1172
1170 void Network::EraseCredentials() { 1173 void Network::EraseCredentials() {
1171 } 1174 }
1172 1175
1176 void Network::CalculateUniqueId() {
1177 unique_id_ = name_;
1178 }
1179
1173 bool Network::RequiresUserProfile() const { 1180 bool Network::RequiresUserProfile() const {
1174 return false; 1181 return false;
1175 } 1182 }
1176 1183
1184 void Network::CopyCredentialsFromRemembered(Network* remembered) {
1185 }
1186
1177 void Network::SetValueProperty(const char* prop, Value* val) { 1187 void Network::SetValueProperty(const char* prop, Value* val) {
1178 DCHECK(prop); 1188 DCHECK(prop);
1179 DCHECK(val); 1189 DCHECK(val);
1180 if (!EnsureCrosLoaded()) 1190 if (!EnsureCrosLoaded())
1181 return; 1191 return;
1182 chromeos::SetNetworkServiceProperty(service_path_.c_str(), prop, val); 1192 chromeos::SetNetworkServiceProperty(service_path_.c_str(), prop, val);
1183 } 1193 }
1184 1194
1185 void Network::ClearProperty(const char* prop) { 1195 void Network::ClearProperty(const char* prop) {
1186 DCHECK(prop); 1196 DCHECK(prop);
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
1397 default: 1407 default:
1398 return Network::ParseValue(index, value); 1408 return Network::ParseValue(index, value);
1399 break; 1409 break;
1400 } 1410 }
1401 return false; 1411 return false;
1402 } 1412 }
1403 1413
1404 void VirtualNetwork::ParseInfo(const DictionaryValue* info) { 1414 void VirtualNetwork::ParseInfo(const DictionaryValue* info) {
1405 Network::ParseInfo(info); 1415 Network::ParseInfo(info);
1406 VLOG(1) << "VPN: " << name() 1416 VLOG(1) << "VPN: " << name()
1417 << " Server: " << server_hostname()
1407 << " Type: " << ProviderTypeToString(provider_type()); 1418 << " Type: " << ProviderTypeToString(provider_type());
1408 if (provider_type_ == PROVIDER_TYPE_L2TP_IPSEC_PSK) { 1419 if (provider_type_ == PROVIDER_TYPE_L2TP_IPSEC_PSK) {
1409 if (!client_cert_id_.empty()) 1420 if (!client_cert_id_.empty())
1410 provider_type_ = PROVIDER_TYPE_L2TP_IPSEC_USER_CERT; 1421 provider_type_ = PROVIDER_TYPE_L2TP_IPSEC_USER_CERT;
1411 } 1422 }
1412 } 1423 }
1413 1424
1414 void VirtualNetwork::EraseCredentials() { 1425 void VirtualNetwork::EraseCredentials() {
1415 WipeString(&ca_cert_nss_); 1426 WipeString(&ca_cert_nss_);
1416 WipeString(&psk_passphrase_); 1427 WipeString(&psk_passphrase_);
1417 WipeString(&client_cert_id_); 1428 WipeString(&client_cert_id_);
1418 WipeString(&user_passphrase_); 1429 WipeString(&user_passphrase_);
1419 } 1430 }
1420 1431
1432 void VirtualNetwork::CalculateUniqueId() {
1433 std::string provider_type(ProviderTypeToString(provider_type_));
1434 unique_id_ = provider_type + "|" + server_hostname_;
1435 }
1436
1421 bool VirtualNetwork::RequiresUserProfile() const { 1437 bool VirtualNetwork::RequiresUserProfile() const {
1422 return true; 1438 return true;
1423 } 1439 }
1424 1440
1441 void VirtualNetwork::CopyCredentialsFromRemembered(Network* remembered) {
1442 DCHECK(remembered->type() == TYPE_VPN);
1443 VirtualNetwork* remembered_vpn = static_cast<VirtualNetwork*>(remembered);
1444 VLOG(1) << "Copy VPN credentials: " << name()
1445 << " username: " << remembered_vpn->username();
1446 if (ca_cert_nss_.empty())
1447 ca_cert_nss_ = remembered_vpn->ca_cert_nss();
1448 if (psk_passphrase_.empty())
1449 psk_passphrase_ = remembered_vpn->psk_passphrase();
1450 if (client_cert_id_.empty())
1451 client_cert_id_ = remembered_vpn->client_cert_id();
1452 if (username_.empty())
1453 username_ = remembered_vpn->username();
1454 if (user_passphrase_.empty())
1455 user_passphrase_ = remembered_vpn->user_passphrase();
1456 }
1457
1425 bool VirtualNetwork::NeedMoreInfoToConnect() const { 1458 bool VirtualNetwork::NeedMoreInfoToConnect() const {
1426 if (server_hostname_.empty() || username_.empty() || user_passphrase_.empty()) 1459 if (server_hostname_.empty() || username_.empty() || user_passphrase_.empty())
1427 return true; 1460 return true;
1428 switch (provider_type_) { 1461 switch (provider_type_) {
1429 case PROVIDER_TYPE_L2TP_IPSEC_PSK: 1462 case PROVIDER_TYPE_L2TP_IPSEC_PSK:
1430 if (psk_passphrase_.empty()) 1463 if (psk_passphrase_.empty())
1431 return true; 1464 return true;
1432 break; 1465 break;
1433 case PROVIDER_TYPE_L2TP_IPSEC_USER_CERT: 1466 case PROVIDER_TYPE_L2TP_IPSEC_USER_CERT:
1434 case PROVIDER_TYPE_OPEN_VPN: 1467 case PROVIDER_TYPE_OPEN_VPN:
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after
1957 : WirelessNetwork(service_path, TYPE_WIFI), 1990 : WirelessNetwork(service_path, TYPE_WIFI),
1958 encryption_(SECURITY_NONE), 1991 encryption_(SECURITY_NONE),
1959 passphrase_required_(false), 1992 passphrase_required_(false),
1960 eap_method_(EAP_METHOD_UNKNOWN), 1993 eap_method_(EAP_METHOD_UNKNOWN),
1961 eap_phase_2_auth_(EAP_PHASE_2_AUTH_AUTO), 1994 eap_phase_2_auth_(EAP_PHASE_2_AUTH_AUTO),
1962 eap_use_system_cas_(true) { 1995 eap_use_system_cas_(true) {
1963 } 1996 }
1964 1997
1965 WifiNetwork::~WifiNetwork() {} 1998 WifiNetwork::~WifiNetwork() {}
1966 1999
1967 // Called from ParseNetwork after calling ParseInfo.
1968 void WifiNetwork::CalculateUniqueId() { 2000 void WifiNetwork::CalculateUniqueId() {
1969 ConnectionSecurity encryption = encryption_; 2001 ConnectionSecurity encryption = encryption_;
1970 // Flimflam treats wpa and rsn as psk internally, so convert those types 2002 // Flimflam treats wpa and rsn as psk internally, so convert those types
1971 // to psk for unique naming. 2003 // to psk for unique naming.
1972 if (encryption == SECURITY_WPA || encryption == SECURITY_RSN) 2004 if (encryption == SECURITY_WPA || encryption == SECURITY_RSN)
1973 encryption = SECURITY_PSK; 2005 encryption = SECURITY_PSK;
1974 std::string security = std::string(SecurityToString(encryption)); 2006 std::string security = std::string(SecurityToString(encryption));
1975 unique_id_ = security + "|" + name_; 2007 unique_id_ = security + "|" + name_;
1976 } 2008 }
1977 2009
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
2091 case PROPERTY_INDEX_EAP_PIN: 2123 case PROPERTY_INDEX_EAP_PIN:
2092 case PROPERTY_INDEX_EAP_KEY_MGMT: 2124 case PROPERTY_INDEX_EAP_KEY_MGMT:
2093 // These properties are currently not used in the UI. 2125 // These properties are currently not used in the UI.
2094 return true; 2126 return true;
2095 default: 2127 default:
2096 return WirelessNetwork::ParseValue(index, value); 2128 return WirelessNetwork::ParseValue(index, value);
2097 } 2129 }
2098 return false; 2130 return false;
2099 } 2131 }
2100 2132
2101 void WifiNetwork::ParseInfo(const DictionaryValue* info) {
2102 Network::ParseInfo(info);
2103 CalculateUniqueId();
2104 }
2105
2106 const std::string& WifiNetwork::GetPassphrase() const { 2133 const std::string& WifiNetwork::GetPassphrase() const {
2107 if (!user_passphrase_.empty()) 2134 if (!user_passphrase_.empty())
2108 return user_passphrase_; 2135 return user_passphrase_;
2109 return passphrase_; 2136 return passphrase_;
2110 } 2137 }
2111 2138
2112 void WifiNetwork::SetPassphrase(const std::string& passphrase) { 2139 void WifiNetwork::SetPassphrase(const std::string& passphrase) {
2113 // Set the user_passphrase_ only; passphrase_ stores the flimflam value. 2140 // Set the user_passphrase_ only; passphrase_ stores the flimflam value.
2114 // If the user sets an empty passphrase, restore it to the passphrase 2141 // If the user sets an empty passphrase, restore it to the passphrase
2115 // remembered by flimflam. 2142 // remembered by flimflam.
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
2269 if (error_ == ERROR_BAD_PASSPHRASE || error_ == ERROR_BAD_WEPKEY) 2296 if (error_ == ERROR_BAD_PASSPHRASE || error_ == ERROR_BAD_WEPKEY)
2270 return true; 2297 return true;
2271 // For 802.1x networks, configuration is required if connectable is false. 2298 // For 802.1x networks, configuration is required if connectable is false.
2272 if (encryption_ == SECURITY_8021X) 2299 if (encryption_ == SECURITY_8021X)
2273 return !connectable_; 2300 return !connectable_;
2274 return passphrase_required_; 2301 return passphrase_required_;
2275 } 2302 }
2276 2303
2277 bool WifiNetwork::RequiresUserProfile() const { 2304 bool WifiNetwork::RequiresUserProfile() const {
2278 // 8021X requires certificates which are only stored for individual users. 2305 // 8021X requires certificates which are only stored for individual users.
2279 if (encryption_ == SECURITY_8021X) 2306 if (encryption_ == SECURITY_8021X &&
2307 (eap_method_ == EAP_METHOD_TLS ||
2308 !eap_client_cert_pkcs11_id().empty()))
2280 return true; 2309 return true;
2281 return false; 2310 return false;
2282 } 2311 }
2283 2312
2284 //////////////////////////////////////////////////////////////////////////////// 2313 ////////////////////////////////////////////////////////////////////////////////
2285 // NetworkLibrary 2314 // NetworkLibrary
2286 2315
2287 class NetworkLibraryImpl : public NetworkLibrary { 2316 class NetworkLibraryImpl : public NetworkLibrary {
2288 public: 2317 public:
2289 NetworkLibraryImpl() 2318 NetworkLibraryImpl()
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
2529 } 2558 }
2530 2559
2531 virtual const CellularNetworkVector& cellular_networks() const { 2560 virtual const CellularNetworkVector& cellular_networks() const {
2532 return cellular_networks_; 2561 return cellular_networks_;
2533 } 2562 }
2534 2563
2535 virtual const VirtualNetworkVector& virtual_networks() const { 2564 virtual const VirtualNetworkVector& virtual_networks() const {
2536 return virtual_networks_; 2565 return virtual_networks_;
2537 } 2566 }
2538 2567
2568 virtual const VirtualNetworkVector& remembered_virtual_networks() const {
2569 return remembered_virtual_networks_;
2570 }
2571
2539 ///////////////////////////////////////////////////////////////////////////// 2572 /////////////////////////////////////////////////////////////////////////////
2540 2573
2541 virtual const NetworkDevice* FindNetworkDeviceByPath( 2574 virtual const NetworkDevice* FindNetworkDeviceByPath(
2542 const std::string& path) const { 2575 const std::string& path) const {
2543 NetworkDeviceMap::const_iterator iter = device_map_.find(path); 2576 NetworkDeviceMap::const_iterator iter = device_map_.find(path);
2544 if (iter != device_map_.end()) 2577 if (iter != device_map_.end())
2545 return iter->second; 2578 return iter->second;
2546 LOG(WARNING) << "Device path not found: " << path; 2579 LOG(WARNING) << "Device path not found: " << path;
2547 return NULL; 2580 return NULL;
2548 } 2581 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
2614 2647
2615 virtual Network* FindNetworkFromRemembered( 2648 virtual Network* FindNetworkFromRemembered(
2616 const Network* remembered) const { 2649 const Network* remembered) const {
2617 NetworkMap::const_iterator found = 2650 NetworkMap::const_iterator found =
2618 network_unique_id_map_.find(remembered->unique_id()); 2651 network_unique_id_map_.find(remembered->unique_id());
2619 if (found != network_unique_id_map_.end()) 2652 if (found != network_unique_id_map_.end())
2620 return found->second; 2653 return found->second;
2621 return NULL; 2654 return NULL;
2622 } 2655 }
2623 2656
2657 Network* FindRememberedFromNetwork(const Network* network) const {
2658 for (NetworkMap::const_iterator iter = remembered_network_map_.begin();
2659 iter != remembered_network_map_.end(); ++iter) {
2660 if (iter->second->unique_id() == network->unique_id())
2661 return iter->second;
2662 }
2663 return NULL;
2664 }
2665
2624 virtual Network* FindRememberedNetworkByPath(const std::string& path) const { 2666 virtual Network* FindRememberedNetworkByPath(const std::string& path) const {
2625 NetworkMap::const_iterator iter = remembered_network_map_.find(path); 2667 NetworkMap::const_iterator iter = remembered_network_map_.find(path);
2626 if (iter != remembered_network_map_.end()) 2668 if (iter != remembered_network_map_.end())
2627 return iter->second; 2669 return iter->second;
2628 return NULL; 2670 return NULL;
2629 } 2671 }
2630 2672
2631 virtual const CellularDataPlanVector* GetDataPlans( 2673 virtual const CellularDataPlanVector* GetDataPlans(
2632 const std::string& path) const { 2674 const std::string& path) const {
2633 CellularDataPlanMap::const_iterator iter = data_plan_map_.find(path); 2675 CellularDataPlanMap::const_iterator iter = data_plan_map_.find(path);
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
3157 active_wifi_ = NULL; 3199 active_wifi_ = NULL;
3158 else if (found_network == active_cellular_) 3200 else if (found_network == active_cellular_)
3159 active_cellular_ = NULL; 3201 active_cellular_ = NULL;
3160 else if (found_network == active_virtual_) 3202 else if (found_network == active_virtual_)
3161 active_virtual_ = NULL; 3203 active_virtual_ = NULL;
3162 } 3204 }
3163 NotifyNetworkManagerChanged(true); // Forced update. 3205 NotifyNetworkManagerChanged(true); // Forced update.
3164 } 3206 }
3165 } 3207 }
3166 3208
3167 virtual void ForgetWifiNetwork(const std::string& service_path) { 3209 virtual void ForgetNetwork(const std::string& service_path) {
3168 if (!EnsureCrosLoaded()) 3210 if (!EnsureCrosLoaded())
3169 return; 3211 return;
3170 // Remove network from remembered list and notify observers. 3212 // Remove network from remembered list and notify observers.
3171 DeleteRememberedWifiNetwork(service_path); 3213 DeleteRememberedNetwork(service_path);
3172 NotifyNetworkManagerChanged(true); // Forced update. 3214 NotifyNetworkManagerChanged(true); // Forced update.
3173 } 3215 }
3174 3216
3175 // Note: currently there is no way to change the profile of a network 3217 // Note: currently there is no way to change the profile of a network
3176 // unless it is visible (i.e. in network_map_). We change the profile by 3218 // unless it is visible (i.e. in network_map_). We change the profile by
3177 // setting the Profile property of the visible network. 3219 // setting the Profile property of the visible network.
3178 // See chromium-os:15523. 3220 // See chromium-os:15523.
3179 virtual void SetNetworkProfile(const std::string& service_path, 3221 virtual void SetNetworkProfile(const std::string& service_path,
3180 NetworkProfileType type) { 3222 NetworkProfileType type) {
3181 Network* network = FindNetworkByPath(service_path); 3223 Network* network = FindNetworkByPath(service_path);
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after
3664 } 3706 }
3665 3707
3666 static void RememberedNetworkServiceUpdate(void* object, 3708 static void RememberedNetworkServiceUpdate(void* object,
3667 const char* service_path, 3709 const char* service_path,
3668 const Value* info) { 3710 const Value* info) {
3669 NetworkLibraryImpl* networklib = static_cast<NetworkLibraryImpl*>(object); 3711 NetworkLibraryImpl* networklib = static_cast<NetworkLibraryImpl*>(object);
3670 DCHECK(networklib); 3712 DCHECK(networklib);
3671 if (service_path) { 3713 if (service_path) {
3672 if (!info) { 3714 if (!info) {
3673 // Remembered network no longer exists. 3715 // Remembered network no longer exists.
3674 networklib->DeleteRememberedWifiNetwork(std::string(service_path)); 3716 networklib->DeleteRememberedNetwork(std::string(service_path));
3675 } else { 3717 } else {
3676 DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); 3718 DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY);
3677 const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); 3719 const DictionaryValue* dict = static_cast<const DictionaryValue*>(info);
3678 networklib->ParseRememberedNetwork(std::string(service_path), dict); 3720 networklib->ParseRememberedNetwork(std::string(service_path), dict);
3679 } 3721 }
3680 } 3722 }
3681 } 3723 }
3682 3724
3683 static void NetworkDeviceUpdate(void* object, 3725 static void NetworkDeviceUpdate(void* object,
3684 const char* device_path, 3726 const char* device_path,
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
3818 data_plan_map_.find(network->service_path()); 3860 data_plan_map_.find(network->service_path());
3819 if (found != data_plan_map_.end()) { 3861 if (found != data_plan_map_.end()) {
3820 CellularDataPlanVector* data_plans = found->second; 3862 CellularDataPlanVector* data_plans = found->second;
3821 delete data_plans; 3863 delete data_plans;
3822 data_plan_map_.erase(found); 3864 data_plan_map_.erase(found);
3823 } 3865 }
3824 } 3866 }
3825 delete network; 3867 delete network;
3826 } 3868 }
3827 3869
3828 void AddRememberedWifiNetwork(WifiNetwork* wifi) { 3870 void AddRememberedNetwork(Network* network) {
3829 std::pair<NetworkMap::iterator,bool> result = 3871 std::pair<NetworkMap::iterator,bool> result =
3830 remembered_network_map_.insert( 3872 remembered_network_map_.insert(
3831 std::make_pair(wifi->service_path(), wifi)); 3873 std::make_pair(network->service_path(), network));
3832 DCHECK(result.second); // Should only get called with new network. 3874 DCHECK(result.second); // Should only get called with new network.
3833 remembered_wifi_networks_.push_back(wifi); 3875 if (network->type() == TYPE_WIFI) {
3876 remembered_wifi_networks_.push_back(
3877 static_cast<WifiNetwork*>(network));
3878 } else if (network->type() == TYPE_VPN) {
3879 remembered_virtual_networks_.push_back(
3880 static_cast<VirtualNetwork*>(network));
3881 } else {
3882 NOTREACHED();
3883 }
3834 // Find service path in profiles. Flimflam does not set the Profile 3884 // Find service path in profiles. Flimflam does not set the Profile
3835 // property for remembered networks, only active networks. 3885 // property for remembered networks, only active networks.
3836 for (NetworkProfileList::iterator iter = profile_list_.begin(); 3886 for (NetworkProfileList::iterator iter = profile_list_.begin();
3837 iter != profile_list_.end(); ++iter) { 3887 iter != profile_list_.end(); ++iter) {
3838 NetworkProfile& profile = *iter; 3888 NetworkProfile& profile = *iter;
3839 if (profile.services.find(wifi->service_path()) != 3889 if (profile.services.find(network->service_path()) !=
3840 profile.services.end()) { 3890 profile.services.end()) {
3841 wifi->set_profile_path(profile.path); 3891 network->set_profile_path(profile.path);
3842 wifi->set_profile_type(profile.type); 3892 network->set_profile_type(profile.type);
3843 VLOG(1) << "AddRememberedWifiNetwork: " << wifi->service_path() 3893 VLOG(1) << "AddRememberedNetwork: " << network->service_path()
3844 << " Profile: " << profile.path; 3894 << " Profile: " << profile.path;
3845 break; 3895 break;
3846 } 3896 }
3847 } 3897 }
3848 DCHECK(!wifi->profile_path().empty()) 3898 DCHECK(!network->profile_path().empty())
3849 << "Wifi service path not in any profile: " << wifi->service_path(); 3899 << "Service path not in any profile: " << network->service_path();
3850 } 3900 }
3851 3901
3852 void DeleteRememberedWifiNetwork(const std::string& service_path) { 3902 void DeleteRememberedNetwork(const std::string& service_path) {
3853 NetworkMap::iterator found = remembered_network_map_.find(service_path); 3903 NetworkMap::iterator found = remembered_network_map_.find(service_path);
3854 if (found == remembered_network_map_.end()) { 3904 if (found == remembered_network_map_.end()) {
3855 LOG(WARNING) << "Attempt to delete non-existant remembered network: " 3905 LOG(WARNING) << "Attempt to delete non-existant remembered network: "
3856 << service_path; 3906 << service_path;
3857 return; 3907 return;
3858 } 3908 }
3859 3909
3860 // Delete remembered network from lists. 3910 // Delete remembered network from lists.
3861 Network* remembered_network = found->second; 3911 Network* remembered_network = found->second;
3862 remembered_network_map_.erase(found); 3912 remembered_network_map_.erase(found);
3863 WifiNetworkVector::iterator iter = std::find(
3864 remembered_wifi_networks_.begin(), remembered_wifi_networks_.end(),
3865 remembered_network);
3866 if (iter != remembered_wifi_networks_.end())
3867 remembered_wifi_networks_.erase(iter);
3868 3913
3914 if (remembered_network->type() == TYPE_WIFI) {
3915 WifiNetworkVector::iterator iter = std::find(
3916 remembered_wifi_networks_.begin(),
3917 remembered_wifi_networks_.end(),
3918 remembered_network);
3919 if (iter != remembered_wifi_networks_.end())
3920 remembered_wifi_networks_.erase(iter);
3921 } else if (remembered_network->type() == TYPE_VPN) {
3922 VirtualNetworkVector::iterator iter = std::find(
3923 remembered_virtual_networks_.begin(),
3924 remembered_virtual_networks_.end(),
3925 remembered_network);
3926 if (iter != remembered_virtual_networks_.end())
3927 remembered_virtual_networks_.erase(iter);
3928 }
3869 // Delete remembered network from all profiles it is in. 3929 // Delete remembered network from all profiles it is in.
3870 for (NetworkProfileList::iterator iter = profile_list_.begin(); 3930 for (NetworkProfileList::iterator iter = profile_list_.begin();
3871 iter != profile_list_.end(); ++iter) { 3931 iter != profile_list_.end(); ++iter) {
3872 NetworkProfile& profile = *iter; 3932 NetworkProfile& profile = *iter;
3873 NetworkProfile::ServiceList::iterator found = 3933 NetworkProfile::ServiceList::iterator found =
3874 profile.services.find(remembered_network->service_path()); 3934 profile.services.find(remembered_network->service_path());
3875 if (found != profile.services.end()) { 3935 if (found != profile.services.end()) {
3876 VLOG(1) << "Deleting: " << remembered_network->service_path() 3936 VLOG(1) << "Deleting: " << remembered_network->service_path()
3877 << " From: " << profile.path; 3937 << " From: " << profile.path;
3878 chromeos::DeleteServiceFromProfile( 3938 chromeos::DeleteServiceFromProfile(
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
4087 4147
4088 network->ParseInfo(info); // virtual. 4148 network->ParseInfo(info); // virtual.
4089 4149
4090 if (!network->unique_id().empty()) 4150 if (!network->unique_id().empty())
4091 network_unique_id_map_[network->unique_id()] = network; 4151 network_unique_id_map_[network->unique_id()] = network;
4092 4152
4093 SetProfileTypeFromPath(network); 4153 SetProfileTypeFromPath(network);
4094 4154
4095 UpdateActiveNetwork(network); 4155 UpdateActiveNetwork(network);
4096 4156
4157 // Copy remembered credentials if required.
4158 Network* remembered = FindRememberedFromNetwork(network);
4159 if (remembered)
4160 network->CopyCredentialsFromRemembered(remembered);
4161
4097 // Find and erase entry in update_requests, and set network priority. 4162 // Find and erase entry in update_requests, and set network priority.
4098 PriorityMap::iterator found2 = network_update_requests_.find(service_path); 4163 PriorityMap::iterator found2 = network_update_requests_.find(service_path);
4099 if (found2 != network_update_requests_.end()) { 4164 if (found2 != network_update_requests_.end()) {
4100 network->priority_order_ = found2->second; 4165 network->priority_order_ = found2->second;
4101 network_update_requests_.erase(found2); 4166 network_update_requests_.erase(found2);
4102 if (network_update_requests_.empty()) { 4167 if (network_update_requests_.empty()) {
4103 // Clear wifi_scanning_ when we have no pending requests. 4168 // Clear wifi_scanning_ when we have no pending requests.
4104 wifi_scanning_ = false; 4169 wifi_scanning_ = false;
4105 } 4170 }
4106 } else { 4171 } else {
4107 // TODO(stevenjb): Enable warning once UpdateNetworkServiceList is fixed. 4172 // TODO(stevenjb): Enable warning once UpdateNetworkServiceList is fixed.
4108 // LOG(WARNING) << "ParseNetwork called with no update request entry: " 4173 // LOG(WARNING) << "ParseNetwork called with no update request entry: "
4109 // << service_path; 4174 // << service_path;
4110 } 4175 }
4111 4176
4112 VLOG(1) << "ParseNetwork: " << network->name() 4177 VLOG(1) << "ParseNetwork: " << network->name()
4113 << " Path: " << network->service_path() 4178 << " Path: " << network->service_path()
4114 << " Profile: " << network->profile_path_; 4179 << " Profile: " << network->profile_path_;
4115 NotifyNetworkManagerChanged(false); // Not forced. 4180 NotifyNetworkManagerChanged(false); // Not forced.
4116 return network; 4181 return network;
4117 } 4182 }
4118 4183
4119 // Returns NULL if |service_path| refers to a network that is not a 4184 // Returns NULL if |service_path| refers to a network that is not a
4120 // remembered type. Called from RememberedNetworkServiceUpdate. 4185 // remembered type. Called from RememberedNetworkServiceUpdate.
4121 Network* ParseRememberedNetwork(const std::string& service_path, 4186 Network* ParseRememberedNetwork(const std::string& service_path,
4122 const DictionaryValue* info) { 4187 const DictionaryValue* info) {
4123 Network* network; 4188 Network* remembered;
4124 NetworkMap::iterator found = remembered_network_map_.find(service_path); 4189 NetworkMap::iterator found = remembered_network_map_.find(service_path);
4125 if (found != remembered_network_map_.end()) { 4190 if (found != remembered_network_map_.end()) {
4126 network = found->second; 4191 remembered = found->second;
4127 } else { 4192 } else {
4128 ConnectionType type = ParseTypeFromDictionary(info); 4193 ConnectionType type = ParseTypeFromDictionary(info);
4129 if (type == TYPE_WIFI) { 4194 if (type == TYPE_WIFI || type == TYPE_VPN) {
4130 network = CreateNewNetwork(type, service_path); 4195 remembered = CreateNewNetwork(type, service_path);
4131 WifiNetwork* wifi = static_cast<WifiNetwork*>(network); 4196 AddRememberedNetwork(remembered);
4132 AddRememberedWifiNetwork(wifi);
4133 } else { 4197 } else {
4134 VLOG(1) << "Ignoring remembered network: " << service_path 4198 VLOG(1) << "Ignoring remembered network: " << service_path
4135 << " Type: " << ConnectionTypeToString(type); 4199 << " Type: " << ConnectionTypeToString(type);
4136 return NULL; 4200 return NULL;
4137 } 4201 }
4138 } 4202 }
4139 network->ParseInfo(info); // virtual. 4203 remembered->ParseInfo(info); // virtual.
4140 4204
4141 SetProfileTypeFromPath(network); 4205 SetProfileTypeFromPath(remembered);
4142 4206
4143 VLOG(1) << "ParseRememberedNetwork: " << network->name() 4207 VLOG(1) << "ParseRememberedNetwork: " << remembered->name()
4144 << " Path: " << network->service_path() 4208 << " Path: " << remembered->service_path()
4145 << " Profile: " << network->profile_path_; 4209 << " Profile: " << remembered->profile_path_;
4146 NotifyNetworkManagerChanged(false); // Not forced. 4210 NotifyNetworkManagerChanged(false); // Not forced.
4147 return network; 4211
4212 if (remembered->type() == TYPE_VPN) {
4213 // VPNs are only stored in profiles. If we don't have a network for it,
4214 // request one.
4215 if (!FindNetworkFromRemembered(remembered)) {
4216 VirtualNetwork* vpn = static_cast<VirtualNetwork*>(remembered);
4217 std::string provider_type = ProviderTypeToString(vpn->provider_type());
4218 VLOG(1) << "Requesting VPN: " << vpn->name()
4219 << " Server: " << vpn->server_hostname()
4220 << " Type: " << provider_type;
4221 RequestVirtualNetwork(
4222 vpn->name().c_str(),
4223 vpn->server_hostname().c_str(),
4224 provider_type.c_str(),
4225 NetworkServiceUpdate,
4226 this);
4227 }
4228 }
4229
4230 return remembered;
4148 } 4231 }
4149 4232
4150 void SetProfileType(Network* network, NetworkProfileType type) { 4233 void SetProfileType(Network* network, NetworkProfileType type) {
4151 if (type == PROFILE_NONE) { 4234 if (type == PROFILE_NONE) {
4152 network->SetProfilePath(std::string()); 4235 network->SetProfilePath(std::string());
4153 network->set_profile_type(PROFILE_NONE); 4236 network->set_profile_type(PROFILE_NONE);
4154 } else { 4237 } else {
4155 std::string profile_path = GetProfilePath(type); 4238 std::string profile_path = GetProfilePath(type);
4156 if (!profile_path.empty()) { 4239 if (!profile_path.empty()) {
4157 network->SetProfilePath(profile_path); 4240 network->SetProfilePath(profile_path);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
4199 active_cellular_ = NULL; 4282 active_cellular_ = NULL;
4200 active_virtual_ = NULL; 4283 active_virtual_ = NULL;
4201 wifi_networks_.clear(); 4284 wifi_networks_.clear();
4202 cellular_networks_.clear(); 4285 cellular_networks_.clear();
4203 virtual_networks_.clear(); 4286 virtual_networks_.clear();
4204 } 4287 }
4205 4288
4206 void ClearRememberedNetworks() { 4289 void ClearRememberedNetworks() {
4207 remembered_network_map_.clear(); 4290 remembered_network_map_.clear();
4208 remembered_wifi_networks_.clear(); 4291 remembered_wifi_networks_.clear();
4292 remembered_virtual_networks_.clear();
4209 } 4293 }
4210 4294
4211 void DeleteNetworks() { 4295 void DeleteNetworks() {
4212 STLDeleteValues(&network_map_); 4296 STLDeleteValues(&network_map_);
4213 ClearNetworks(); 4297 ClearNetworks();
4214 } 4298 }
4215 4299
4216 void DeleteRememberedNetworks() { 4300 void DeleteRememberedNetworks() {
4217 STLDeleteValues(&remembered_network_map_); 4301 STLDeleteValues(&remembered_network_map_);
4218 ClearRememberedNetworks(); 4302 ClearRememberedNetworks();
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
4691 active_cellular_ = cellular1; 4775 active_cellular_ = cellular1;
4692 4776
4693 CellularNetwork* cellular2 = new CellularNetwork("fc2"); 4777 CellularNetwork* cellular2 = new CellularNetwork("fc2");
4694 cellular2->set_name("Fake Cellular 2"); 4778 cellular2->set_name("Fake Cellular 2");
4695 cellular2->set_strength(70); 4779 cellular2->set_strength(70);
4696 cellular2->set_connected(true); 4780 cellular2->set_connected(true);
4697 cellular2->set_activation_state(ACTIVATION_STATE_ACTIVATED); 4781 cellular2->set_activation_state(ACTIVATION_STATE_ACTIVATED);
4698 cellular2->set_network_technology(NETWORK_TECHNOLOGY_UMTS); 4782 cellular2->set_network_technology(NETWORK_TECHNOLOGY_UMTS);
4699 AddNetwork(cellular2); 4783 AddNetwork(cellular2);
4700 4784
4701 // Remembered Networks
4702 DeleteRememberedNetworks();
4703 NetworkProfile profile("default", PROFILE_SHARED);
4704 profile.services.insert("fw2");
4705 profile_list_.push_back(profile);
4706 WifiNetwork* remembered_wifi2 = new WifiNetwork("fw2");
4707 remembered_wifi2->set_name("Fake Wifi 2");
4708 remembered_wifi2->set_strength(70);
4709 remembered_wifi2->set_connected(true);
4710 remembered_wifi2->set_encryption(SECURITY_WEP);
4711 AddRememberedWifiNetwork(remembered_wifi2);
4712
4713 // VPNs. 4785 // VPNs.
4714 VirtualNetwork* vpn1 = new VirtualNetwork("fv1"); 4786 VirtualNetwork* vpn1 = new VirtualNetwork("fv1");
4715 vpn1->set_name("Fake VPN Provider 1"); 4787 vpn1->set_name("Fake VPN Provider 1");
4716 vpn1->set_server_hostname("vpn1server.fake.com"); 4788 vpn1->set_server_hostname("vpn1server.fake.com");
4717 vpn1->set_provider_type(VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_PSK); 4789 vpn1->set_provider_type(VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_PSK);
4718 vpn1->set_username("VPN User 1"); 4790 vpn1->set_username("VPN User 1");
4719 vpn1->set_connected(false); 4791 vpn1->set_connected(false);
4720 AddNetwork(vpn1); 4792 AddNetwork(vpn1);
4721 4793
4722 VirtualNetwork* vpn2 = new VirtualNetwork("fv2"); 4794 VirtualNetwork* vpn2 = new VirtualNetwork("fv2");
4723 vpn2->set_name("Fake VPN Provider 2"); 4795 vpn2->set_name("Fake VPN Provider 2");
4724 vpn2->set_server_hostname("vpn2server.fake.com"); 4796 vpn2->set_server_hostname("vpn2server.fake.com");
4725 vpn2->set_provider_type(VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT); 4797 vpn2->set_provider_type(VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT);
4726 vpn2->set_username("VPN User 2"); 4798 vpn2->set_username("VPN User 2");
4727 vpn2->set_connected(true); 4799 vpn2->set_connected(true);
4728 AddNetwork(vpn2); 4800 AddNetwork(vpn2);
4729 4801
4730 VirtualNetwork* vpn3 = new VirtualNetwork("fv3"); 4802 VirtualNetwork* vpn3 = new VirtualNetwork("fv3");
4731 vpn3->set_name("Fake VPN Provider 3"); 4803 vpn3->set_name("Fake VPN Provider 3");
4732 vpn3->set_server_hostname("vpn3server.fake.com"); 4804 vpn3->set_server_hostname("vpn3server.fake.com");
4733 vpn3->set_provider_type(VirtualNetwork::PROVIDER_TYPE_OPEN_VPN); 4805 vpn3->set_provider_type(VirtualNetwork::PROVIDER_TYPE_OPEN_VPN);
4734 vpn3->set_connected(false); 4806 vpn3->set_connected(false);
4735 AddNetwork(vpn3); 4807 AddNetwork(vpn3);
4736 4808
4737 active_virtual_ = vpn2; 4809 active_virtual_ = vpn2;
4738 4810
4811 // Remembered Networks
4812 DeleteRememberedNetworks();
4813 NetworkProfile profile("default", PROFILE_SHARED);
4814 profile.services.insert("fw2");
4815 profile.services.insert("fv2");
4816 profile_list_.push_back(profile);
4817 WifiNetwork* remembered_wifi2 = new WifiNetwork("fw2");
4818 remembered_wifi2->set_name("Fake Wifi 2");
4819 remembered_wifi2->set_encryption(SECURITY_WEP);
4820 AddRememberedNetwork(remembered_wifi2);
4821 VirtualNetwork* remembered_vpn2 = new VirtualNetwork("fv2");
4822 remembered_vpn2->set_name("Fake VPN Provider 2");
4823 remembered_vpn2->set_server_hostname("vpn2server.fake.com");
4824 remembered_vpn2->set_provider_type(
4825 VirtualNetwork::PROVIDER_TYPE_L2TP_IPSEC_USER_CERT);
4826 remembered_vpn2->set_connected(true);
4827 AddRememberedNetwork(remembered_vpn2);
4828
4739 wifi_scanning_ = false; 4829 wifi_scanning_ = false;
4740 offline_mode_ = false; 4830 offline_mode_ = false;
4741 } 4831 }
4742 4832
4743 // Network manager observer list 4833 // Network manager observer list
4744 ObserverList<NetworkManagerObserver> network_manager_observers_; 4834 ObserverList<NetworkManagerObserver> network_manager_observers_;
4745 4835
4746 // Cellular data plan observer list 4836 // Cellular data plan observer list
4747 ObserverList<CellularDataPlanObserver> data_plan_observers_; 4837 ObserverList<CellularDataPlanObserver> data_plan_observers_;
4748 4838
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
4805 4895
4806 // The current connected (or connecting) cellular network. 4896 // The current connected (or connecting) cellular network.
4807 CellularNetwork* active_cellular_; 4897 CellularNetwork* active_cellular_;
4808 4898
4809 // The list of available virtual networks. 4899 // The list of available virtual networks.
4810 VirtualNetworkVector virtual_networks_; 4900 VirtualNetworkVector virtual_networks_;
4811 4901
4812 // The current connected (or connecting) virtual network. 4902 // The current connected (or connecting) virtual network.
4813 VirtualNetwork* active_virtual_; 4903 VirtualNetwork* active_virtual_;
4814 4904
4905 // The remembered virtual networks.
4906 VirtualNetworkVector remembered_virtual_networks_;
4907
4815 // The path of the active profile (for retrieving remembered services). 4908 // The path of the active profile (for retrieving remembered services).
4816 std::string active_profile_path_; 4909 std::string active_profile_path_;
4817 4910
4818 // The current available network devices. Bitwise flag of ConnectionTypes. 4911 // The current available network devices. Bitwise flag of ConnectionTypes.
4819 int available_devices_; 4912 int available_devices_;
4820 4913
4821 // The current enabled network devices. Bitwise flag of ConnectionTypes. 4914 // The current enabled network devices. Bitwise flag of ConnectionTypes.
4822 int enabled_devices_; 4915 int enabled_devices_;
4823 4916
4824 // The current connected network devices. Bitwise flag of ConnectionTypes. 4917 // The current connected network devices. Bitwise flag of ConnectionTypes.
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
4931 } 5024 }
4932 virtual const WifiNetworkVector& remembered_wifi_networks() const { 5025 virtual const WifiNetworkVector& remembered_wifi_networks() const {
4933 return wifi_networks_; 5026 return wifi_networks_;
4934 } 5027 }
4935 virtual const CellularNetworkVector& cellular_networks() const { 5028 virtual const CellularNetworkVector& cellular_networks() const {
4936 return cellular_networks_; 5029 return cellular_networks_;
4937 } 5030 }
4938 virtual const VirtualNetworkVector& virtual_networks() const { 5031 virtual const VirtualNetworkVector& virtual_networks() const {
4939 return virtual_networks_; 5032 return virtual_networks_;
4940 } 5033 }
5034 virtual const VirtualNetworkVector& remembered_virtual_networks() const {
5035 return virtual_networks_;
5036 }
4941 virtual bool has_cellular_networks() const { 5037 virtual bool has_cellular_networks() const {
4942 return cellular_networks_.begin() != cellular_networks_.end(); 5038 return cellular_networks_.begin() != cellular_networks_.end();
4943 } 5039 }
4944 ///////////////////////////////////////////////////////////////////////////// 5040 /////////////////////////////////////////////////////////////////////////////
4945 5041
4946 virtual const NetworkDevice* FindNetworkDeviceByPath( 5042 virtual const NetworkDevice* FindNetworkDeviceByPath(
4947 const std::string& path) const { return NULL; } 5043 const std::string& path) const { return NULL; }
4948 virtual const NetworkDevice* FindCellularDevice() const { 5044 virtual const NetworkDevice* FindCellularDevice() const {
4949 return NULL; 5045 return NULL;
4950 } 5046 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
5013 virtual void ConnectToVirtualNetworkCert( 5109 virtual void ConnectToVirtualNetworkCert(
5014 const std::string& service_name, 5110 const std::string& service_name,
5015 const std::string& server_hostname, 5111 const std::string& server_hostname,
5016 const std::string& server_ca_cert_nss_nickname, 5112 const std::string& server_ca_cert_nss_nickname,
5017 const std::string& client_cert_pkcs11_id, 5113 const std::string& client_cert_pkcs11_id,
5018 const std::string& username, 5114 const std::string& username,
5019 const std::string& user_passphrase) {} 5115 const std::string& user_passphrase) {}
5020 virtual void SignalCellularPlanPayment() {} 5116 virtual void SignalCellularPlanPayment() {}
5021 virtual bool HasRecentCellularPlanPayment() { return false; } 5117 virtual bool HasRecentCellularPlanPayment() { return false; }
5022 virtual void DisconnectFromNetwork(const Network* network) {} 5118 virtual void DisconnectFromNetwork(const Network* network) {}
5023 virtual void ForgetWifiNetwork(const std::string& service_path) {} 5119 virtual void ForgetNetwork(const std::string& service_path) {}
5024 virtual void SetNetworkProfile(const std::string& service_path, 5120 virtual void SetNetworkProfile(const std::string& service_path,
5025 NetworkProfileType type) {} 5121 NetworkProfileType type) {}
5026 virtual std::string GetCellularHomeCarrierId() const { return std::string(); } 5122 virtual std::string GetCellularHomeCarrierId() const { return std::string(); }
5027 virtual bool ethernet_available() const { return true; } 5123 virtual bool ethernet_available() const { return true; }
5028 virtual bool wifi_available() const { return false; } 5124 virtual bool wifi_available() const { return false; }
5029 virtual bool cellular_available() const { return false; } 5125 virtual bool cellular_available() const { return false; }
5030 virtual bool ethernet_enabled() const { return true; } 5126 virtual bool ethernet_enabled() const { return true; }
5031 virtual bool wifi_enabled() const { return false; } 5127 virtual bool wifi_enabled() const { return false; }
5032 virtual bool cellular_enabled() const { return false; } 5128 virtual bool cellular_enabled() const { return false; }
5033 virtual bool wifi_scanning() const { return false; } 5129 virtual bool wifi_scanning() const { return false; }
(...skipping 29 matching lines...) Expand all
5063 return new NetworkLibraryStubImpl(); 5159 return new NetworkLibraryStubImpl();
5064 else 5160 else
5065 return new NetworkLibraryImpl(); 5161 return new NetworkLibraryImpl();
5066 } 5162 }
5067 5163
5068 } // namespace chromeos 5164 } // namespace chromeos
5069 5165
5070 // Allows InvokeLater without adding refcounting. This class is a Singleton and 5166 // Allows InvokeLater without adding refcounting. This class is a Singleton and
5071 // won't be deleted until it's last InvokeLater is run. 5167 // won't be deleted until it's last InvokeLater is run.
5072 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImpl); 5168 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImpl);
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/cros/network_library.h ('k') | chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698