168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file. 468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chromeos/dbus/shill_stub_helper.h" 668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/bind.h" 868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/command_line.h" 968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chromeos/chromeos_switches.h" 1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chromeos/dbus/shill_device_client.h" 1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chromeos/dbus/shill_manager_client.h" 1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chromeos/dbus/shill_profile_client.h" 1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chromeos/dbus/shill_service_client.h" 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace chromeos { 1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace shill_stub_helper { 1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace { 2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const char kDevicePathEthernet[] = "/device/eth1"; 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const char kDevicePathWifi[] = "/device/wifi1"; 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const char kDevicePathCellular[] = "/device/cellular1"; 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const char kDevicePathWimax[] = "/device/wimax1"; 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kStubPortalledWifiName[] = "Portalled Wifi"; 2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kStubPortalledWifiPath[] = "portalled_wifi"; 2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void UpdatePortalledWifiState() { 3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ShillServiceClient::TestInterface* services = 3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); 3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->SetServiceProperty(kStubPortalledWifiPath, 3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kStateProperty, 3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::StringValue(shill::kStatePortal)); 3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} // namespace 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kSharedProfilePath[] = "/profile/default"; 4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)bool IsStubPortalledWifiEnabled(const std::string& path) { 4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!CommandLine::ForCurrentProcess()->HasSwitch( 4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) chromeos::switches::kEnableStubPortalledWifi)) { 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return false; 4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return path == kStubPortalledWifiPath; 4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void SetupDefaultEnvironment() { 5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ShillServiceClient::TestInterface* services = 5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); 5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ShillProfileClient::TestInterface* profiles = 5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface(); 5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ShillManagerClient::TestInterface* manager = 5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface(); 5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ShillDeviceClient::TestInterface* devices = 5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface(); 6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!services || !profiles || !manager | !devices) 6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return; 6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Stub Technologies. 6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!CommandLine::ForCurrentProcess()->HasSwitch( 6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) chromeos::switches::kDisableStubEthernet)) { 6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) manager->AddTechnology(shill::kTypeEthernet, true); 6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) manager->AddTechnology(shill::kTypeWifi, true); 6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) manager->AddTechnology(shill::kTypeCellular, true); 7068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) manager->AddTechnology(shill::kTypeWimax, true); 7168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 7268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) profiles->AddProfile(kSharedProfilePath, std::string()); 7368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) devices->AddDevice( 754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDevicePathEthernet, shill::kTypeEthernet, "stub_eth_device1"); 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) devices->AddDevice(kDevicePathWifi, shill::kTypeWifi, "stub_wifi_device1"); 7768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 7868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) devices->AddDevice( 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kDevicePathCellular, shill::kTypeCellular, "stub_cellular_device1"); 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) devices->SetDeviceProperty(kDevicePathCellular, 8168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kCarrierProperty, 8268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::StringValue(shill::kCarrierSprint)); 8368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) devices->AddDevice(kDevicePathWimax, shill::kTypeWimax, "stub_wimax_device1"); 8568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 8668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const bool add_to_visible = true; 8768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const bool add_to_watchlist = true; 8868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 8968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!CommandLine::ForCurrentProcess()->HasSwitch( 9068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) chromeos::switches::kDisableStubEthernet)) { 9168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->AddService("eth1", "eth1", 9268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeEthernet, 9368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kStateOnline, 9468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) add_to_visible, add_to_watchlist); 9568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) profiles->AddService(kSharedProfilePath, "eth1"); 9668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 9768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 9868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Wifi 9968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 10068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->AddService("wifi1", 10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "wifi1", 10268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeWifi, 10368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kStateOnline, 10468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) add_to_visible, add_to_watchlist); 10568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->SetServiceProperty("wifi1", 10668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kSecurityProperty, 10768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::StringValue(shill::kSecurityWep)); 10868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) profiles->AddService(kSharedProfilePath, "wifi1"); 10968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 11068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->AddService("wifi2", 11168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "wifi2_PSK", 11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeWifi, 11368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kStateIdle, 11468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) add_to_visible, add_to_watchlist); 11568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->SetServiceProperty("wifi2", 11668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kSecurityProperty, 11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::StringValue(shill::kSecurityPsk)); 11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::FundamentalValue strength_value(80); 11968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->SetServiceProperty( 12068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "wifi2", shill::kSignalStrengthProperty, strength_value); 12168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) profiles->AddService(kSharedProfilePath, "wifi2"); 12268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 12368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 12468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) chromeos::switches::kEnableStubPortalledWifi)) { 12568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->AddService(kStubPortalledWifiPath, 12668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kStubPortalledWifiName, 12768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeWifi, 12868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kStatePortal, 12968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) add_to_visible, add_to_watchlist); 13068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->SetServiceProperty(kStubPortalledWifiPath, 13168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kSecurityProperty, 13268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::StringValue(shill::kSecurityNone)); 13368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->SetConnectBehavior(kStubPortalledWifiPath, 13468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::Bind(&UpdatePortalledWifiState)); 13568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->SetServiceProperty(kStubPortalledWifiPath, 13668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kConnectableProperty, 13768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::FundamentalValue(true)); 13868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 13968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 14068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Wimax 14168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 14268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->AddService("wimax1", 14368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "wimax1", 14468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeWimax, 14568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kStateIdle, 14668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) add_to_visible, add_to_watchlist); 14768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->SetServiceProperty( 14868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "wimax1", shill::kConnectableProperty, base::FundamentalValue(true)); 14968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 15068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Cellular 15168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 15268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->AddService("cellular1", 15368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "cellular1", 15468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeCellular, 15568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kStateIdle, 15668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) add_to_visible, add_to_watchlist); 15768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::StringValue technology_value(shill::kNetworkTechnologyGsm); 15868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->SetServiceProperty( 15968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "cellular1", shill::kNetworkTechnologyProperty, technology_value); 16068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->SetServiceProperty( 16168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "cellular1", 16268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kActivationStateProperty, 16368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::StringValue(shill::kActivationStateNotActivated)); 16468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->SetServiceProperty("cellular1", 16568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kRoamingStateProperty, 16668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::StringValue(shill::kRoamingStateHome)); 16768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 16868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // VPN 16968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 17068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Set the "Provider" dictionary properties. Note: when setting these in 17168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Shill, "Provider.Type", etc keys are used, but when reading the values 17268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // "Provider" . "Type", etc keys are used. Here we are setting the values 17368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // that will be read (by the UI, tests, etc). 17468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::DictionaryValue provider_properties; 17568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) provider_properties.SetString(shill::kTypeProperty, shill::kProviderOpenVpn); 17668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) provider_properties.SetString(shill::kHostProperty, "vpn_host"); 17768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 17868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->AddService("vpn1", 17968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "vpn1", 18068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeVPN, 18168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kStateOnline, 18268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) add_to_visible, add_to_watchlist); 18368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->SetServiceProperty( 18468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "vpn1", shill::kProviderProperty, provider_properties); 18568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) profiles->AddService(kSharedProfilePath, "vpn1"); 18668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 18768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->AddService("vpn2", 18868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "vpn2", 18968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeVPN, 19068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kStateOffline, 19168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) add_to_visible, add_to_watchlist); 19268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) services->SetServiceProperty( 19368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) "vpn2", shill::kProviderProperty, provider_properties); 19468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 19568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) manager->SortManagerServices(); 19668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 19768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)std::string DevicePathForType(const std::string& type) { 1994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (type == shill::kTypeEthernet) 2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return kDevicePathEthernet; 2014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (type == shill::kTypeWifi) 2024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return kDevicePathWifi; 2034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (type == shill::kTypeCellular) 2044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return kDevicePathCellular; 2054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (type == shill::kTypeWimax) 2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return kDevicePathWimax; 2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return ""; 2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 21068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} // namespace shill_stub_helper 21168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} // namespace chromeos 212