1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chromeos/dbus/shill_stub_helper.h" 6 7 #include "base/bind.h" 8 #include "base/command_line.h" 9 #include "chromeos/chromeos_switches.h" 10 #include "chromeos/dbus/dbus_thread_manager.h" 11 #include "chromeos/dbus/shill_device_client.h" 12 #include "chromeos/dbus/shill_manager_client.h" 13 #include "chromeos/dbus/shill_profile_client.h" 14 #include "chromeos/dbus/shill_service_client.h" 15 #include "third_party/cros_system_api/dbus/service_constants.h" 16 17 namespace chromeos { 18 namespace shill_stub_helper { 19 20 namespace { 21 22 const char kDevicePathEthernet[] = "/device/eth1"; 23 const char kDevicePathWifi[] = "/device/wifi1"; 24 const char kDevicePathCellular[] = "/device/cellular1"; 25 const char kDevicePathWimax[] = "/device/wimax1"; 26 27 const char kStubPortalledWifiName[] = "Portalled Wifi"; 28 const char kStubPortalledWifiPath[] = "portalled_wifi"; 29 30 void UpdatePortalledWifiState() { 31 ShillServiceClient::TestInterface* services = 32 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); 33 34 services->SetServiceProperty(kStubPortalledWifiPath, 35 shill::kStateProperty, 36 base::StringValue(shill::kStatePortal)); 37 } 38 39 } // namespace 40 41 const char kSharedProfilePath[] = "/profile/default"; 42 43 bool IsStubPortalledWifiEnabled(const std::string& path) { 44 if (!CommandLine::ForCurrentProcess()->HasSwitch( 45 chromeos::switches::kEnableStubPortalledWifi)) { 46 return false; 47 } 48 return path == kStubPortalledWifiPath; 49 } 50 51 void SetupDefaultEnvironment() { 52 ShillServiceClient::TestInterface* services = 53 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); 54 ShillProfileClient::TestInterface* profiles = 55 DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface(); 56 ShillManagerClient::TestInterface* manager = 57 DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface(); 58 ShillDeviceClient::TestInterface* devices = 59 DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface(); 60 if (!services || !profiles || !manager | !devices) 61 return; 62 63 // Stub Technologies. 64 if (!CommandLine::ForCurrentProcess()->HasSwitch( 65 chromeos::switches::kDisableStubEthernet)) { 66 manager->AddTechnology(shill::kTypeEthernet, true); 67 } 68 manager->AddTechnology(shill::kTypeWifi, true); 69 manager->AddTechnology(shill::kTypeCellular, true); 70 manager->AddTechnology(shill::kTypeWimax, true); 71 72 profiles->AddProfile(kSharedProfilePath, std::string()); 73 74 devices->AddDevice( 75 kDevicePathEthernet, shill::kTypeEthernet, "stub_eth_device1"); 76 devices->AddDevice(kDevicePathWifi, shill::kTypeWifi, "stub_wifi_device1"); 77 78 devices->AddDevice( 79 kDevicePathCellular, shill::kTypeCellular, "stub_cellular_device1"); 80 devices->SetDeviceProperty(kDevicePathCellular, 81 shill::kCarrierProperty, 82 base::StringValue(shill::kCarrierSprint)); 83 84 devices->AddDevice(kDevicePathWimax, shill::kTypeWimax, "stub_wimax_device1"); 85 86 const bool add_to_visible = true; 87 const bool add_to_watchlist = true; 88 89 if (!CommandLine::ForCurrentProcess()->HasSwitch( 90 chromeos::switches::kDisableStubEthernet)) { 91 services->AddService("eth1", "eth1", 92 shill::kTypeEthernet, 93 shill::kStateOnline, 94 add_to_visible, add_to_watchlist); 95 profiles->AddService(kSharedProfilePath, "eth1"); 96 } 97 98 // Wifi 99 100 services->AddService("wifi1", 101 "wifi1", 102 shill::kTypeWifi, 103 shill::kStateOnline, 104 add_to_visible, add_to_watchlist); 105 services->SetServiceProperty("wifi1", 106 shill::kSecurityProperty, 107 base::StringValue(shill::kSecurityWep)); 108 profiles->AddService(kSharedProfilePath, "wifi1"); 109 110 services->AddService("wifi2", 111 "wifi2_PSK", 112 shill::kTypeWifi, 113 shill::kStateIdle, 114 add_to_visible, add_to_watchlist); 115 services->SetServiceProperty("wifi2", 116 shill::kSecurityProperty, 117 base::StringValue(shill::kSecurityPsk)); 118 base::FundamentalValue strength_value(80); 119 services->SetServiceProperty( 120 "wifi2", shill::kSignalStrengthProperty, strength_value); 121 profiles->AddService(kSharedProfilePath, "wifi2"); 122 123 if (CommandLine::ForCurrentProcess()->HasSwitch( 124 chromeos::switches::kEnableStubPortalledWifi)) { 125 services->AddService(kStubPortalledWifiPath, 126 kStubPortalledWifiName, 127 shill::kTypeWifi, 128 shill::kStatePortal, 129 add_to_visible, add_to_watchlist); 130 services->SetServiceProperty(kStubPortalledWifiPath, 131 shill::kSecurityProperty, 132 base::StringValue(shill::kSecurityNone)); 133 services->SetConnectBehavior(kStubPortalledWifiPath, 134 base::Bind(&UpdatePortalledWifiState)); 135 services->SetServiceProperty(kStubPortalledWifiPath, 136 shill::kConnectableProperty, 137 base::FundamentalValue(true)); 138 } 139 140 // Wimax 141 142 services->AddService("wimax1", 143 "wimax1", 144 shill::kTypeWimax, 145 shill::kStateIdle, 146 add_to_visible, add_to_watchlist); 147 services->SetServiceProperty( 148 "wimax1", shill::kConnectableProperty, base::FundamentalValue(true)); 149 150 // Cellular 151 152 services->AddService("cellular1", 153 "cellular1", 154 shill::kTypeCellular, 155 shill::kStateIdle, 156 add_to_visible, add_to_watchlist); 157 base::StringValue technology_value(shill::kNetworkTechnologyGsm); 158 services->SetServiceProperty( 159 "cellular1", shill::kNetworkTechnologyProperty, technology_value); 160 services->SetServiceProperty( 161 "cellular1", 162 shill::kActivationStateProperty, 163 base::StringValue(shill::kActivationStateNotActivated)); 164 services->SetServiceProperty("cellular1", 165 shill::kRoamingStateProperty, 166 base::StringValue(shill::kRoamingStateHome)); 167 168 // VPN 169 170 // Set the "Provider" dictionary properties. Note: when setting these in 171 // Shill, "Provider.Type", etc keys are used, but when reading the values 172 // "Provider" . "Type", etc keys are used. Here we are setting the values 173 // that will be read (by the UI, tests, etc). 174 base::DictionaryValue provider_properties; 175 provider_properties.SetString(shill::kTypeProperty, shill::kProviderOpenVpn); 176 provider_properties.SetString(shill::kHostProperty, "vpn_host"); 177 178 services->AddService("vpn1", 179 "vpn1", 180 shill::kTypeVPN, 181 shill::kStateOnline, 182 add_to_visible, add_to_watchlist); 183 services->SetServiceProperty( 184 "vpn1", shill::kProviderProperty, provider_properties); 185 profiles->AddService(kSharedProfilePath, "vpn1"); 186 187 services->AddService("vpn2", 188 "vpn2", 189 shill::kTypeVPN, 190 shill::kStateOffline, 191 add_to_visible, add_to_watchlist); 192 services->SetServiceProperty( 193 "vpn2", shill::kProviderProperty, provider_properties); 194 195 manager->SortManagerServices(); 196 } 197 198 std::string DevicePathForType(const std::string& type) { 199 if (type == shill::kTypeEthernet) 200 return kDevicePathEthernet; 201 if (type == shill::kTypeWifi) 202 return kDevicePathWifi; 203 if (type == shill::kTypeCellular) 204 return kDevicePathCellular; 205 if (type == shill::kTypeWimax) 206 return kDevicePathWimax; 207 return ""; 208 } 209 210 } // namespace shill_stub_helper 211 } // namespace chromeos 212