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