blob: 08f0ef8a7a7c21ffa8933eb9266dfee83847d5d4 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/dbus/shill_stub_helper.h"
#include "base/bind.h"
#include "base/command_line.h"
#include "chromeos/chromeos_switches.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/shill_device_client.h"
#include "chromeos/dbus/shill_manager_client.h"
#include "chromeos/dbus/shill_profile_client.h"
#include "chromeos/dbus/shill_service_client.h"
#include "third_party/cros_system_api/dbus/service_constants.h"
namespace chromeos {
namespace shill_stub_helper {
namespace {
const char kDevicePathEthernet[] = "/device/eth1";
const char kDevicePathWifi[] = "/device/wifi1";
const char kDevicePathCellular[] = "/device/cellular1";
const char kDevicePathWimax[] = "/device/wimax1";
const char kStubPortalledWifiName[] = "Portalled Wifi";
const char kStubPortalledWifiPath[] = "portalled_wifi";
void UpdatePortalledWifiState() {
ShillServiceClient::TestInterface* services =
DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface();
services->SetServiceProperty(kStubPortalledWifiPath,
shill::kStateProperty,
base::StringValue(shill::kStatePortal));
}
} // namespace
const char kSharedProfilePath[] = "/profile/default";
bool IsStubPortalledWifiEnabled(const std::string& path) {
if (!CommandLine::ForCurrentProcess()->HasSwitch(
chromeos::switches::kEnableStubPortalledWifi)) {
return false;
}
return path == kStubPortalledWifiPath;
}
void SetupDefaultEnvironment() {
ShillServiceClient::TestInterface* services =
DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface();
ShillProfileClient::TestInterface* profiles =
DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface();
ShillManagerClient::TestInterface* manager =
DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface();
ShillDeviceClient::TestInterface* devices =
DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface();
if (!services || !profiles || !manager | !devices)
return;
// Stub Technologies.
if (!CommandLine::ForCurrentProcess()->HasSwitch(
chromeos::switches::kDisableStubEthernet)) {
manager->AddTechnology(shill::kTypeEthernet, true);
}
manager->AddTechnology(shill::kTypeWifi, true);
manager->AddTechnology(shill::kTypeCellular, true);
manager->AddTechnology(shill::kTypeWimax, true);
profiles->AddProfile(kSharedProfilePath, std::string());
devices->AddDevice(
kDevicePathEthernet, shill::kTypeEthernet, "stub_eth_device1");
devices->AddDevice(kDevicePathWifi, shill::kTypeWifi, "stub_wifi_device1");
devices->AddDevice(
kDevicePathCellular, shill::kTypeCellular, "stub_cellular_device1");
devices->SetDeviceProperty(kDevicePathCellular,
shill::kCarrierProperty,
base::StringValue(shill::kCarrierSprint));
devices->AddDevice(kDevicePathWimax, shill::kTypeWimax, "stub_wimax_device1");
const bool add_to_visible = true;
const bool add_to_watchlist = true;
if (!CommandLine::ForCurrentProcess()->HasSwitch(
chromeos::switches::kDisableStubEthernet)) {
services->AddService("eth1", "eth1",
shill::kTypeEthernet,
shill::kStateOnline,
add_to_visible, add_to_watchlist);
profiles->AddService(kSharedProfilePath, "eth1");
}
// Wifi
services->AddService("wifi1",
"wifi1",
shill::kTypeWifi,
shill::kStateOnline,
add_to_visible, add_to_watchlist);
services->SetServiceProperty("wifi1",
shill::kSecurityProperty,
base::StringValue(shill::kSecurityWep));
profiles->AddService(kSharedProfilePath, "wifi1");
services->AddService("wifi2",
"wifi2_PSK",
shill::kTypeWifi,
shill::kStateIdle,
add_to_visible, add_to_watchlist);
services->SetServiceProperty("wifi2",
shill::kSecurityProperty,
base::StringValue(shill::kSecurityPsk));
base::FundamentalValue strength_value(80);
services->SetServiceProperty(
"wifi2", shill::kSignalStrengthProperty, strength_value);
profiles->AddService(kSharedProfilePath, "wifi2");
if (CommandLine::ForCurrentProcess()->HasSwitch(
chromeos::switches::kEnableStubPortalledWifi)) {
services->AddService(kStubPortalledWifiPath,
kStubPortalledWifiName,
shill::kTypeWifi,
shill::kStatePortal,
add_to_visible, add_to_watchlist);
services->SetServiceProperty(kStubPortalledWifiPath,
shill::kSecurityProperty,
base::StringValue(shill::kSecurityNone));
services->SetConnectBehavior(kStubPortalledWifiPath,
base::Bind(&UpdatePortalledWifiState));
services->SetServiceProperty(kStubPortalledWifiPath,
shill::kConnectableProperty,
base::FundamentalValue(true));
}
// Wimax
services->AddService("wimax1",
"wimax1",
shill::kTypeWimax,
shill::kStateIdle,
add_to_visible, add_to_watchlist);
services->SetServiceProperty(
"wimax1", shill::kConnectableProperty, base::FundamentalValue(true));
// Cellular
services->AddService("cellular1",
"cellular1",
shill::kTypeCellular,
shill::kStateIdle,
add_to_visible, add_to_watchlist);
base::StringValue technology_value(shill::kNetworkTechnologyGsm);
services->SetServiceProperty(
"cellular1", shill::kNetworkTechnologyProperty, technology_value);
services->SetServiceProperty(
"cellular1",
shill::kActivationStateProperty,
base::StringValue(shill::kActivationStateNotActivated));
services->SetServiceProperty("cellular1",
shill::kRoamingStateProperty,
base::StringValue(shill::kRoamingStateHome));
// VPN
// Set the "Provider" dictionary properties. Note: when setting these in
// Shill, "Provider.Type", etc keys are used, but when reading the values
// "Provider" . "Type", etc keys are used. Here we are setting the values
// that will be read (by the UI, tests, etc).
base::DictionaryValue provider_properties;
provider_properties.SetString(shill::kTypeProperty, shill::kProviderOpenVpn);
provider_properties.SetString(shill::kHostProperty, "vpn_host");
services->AddService("vpn1",
"vpn1",
shill::kTypeVPN,
shill::kStateOnline,
add_to_visible, add_to_watchlist);
services->SetServiceProperty(
"vpn1", shill::kProviderProperty, provider_properties);
profiles->AddService(kSharedProfilePath, "vpn1");
services->AddService("vpn2",
"vpn2",
shill::kTypeVPN,
shill::kStateOffline,
add_to_visible, add_to_watchlist);
services->SetServiceProperty(
"vpn2", shill::kProviderProperty, provider_properties);
manager->SortManagerServices();
}
std::string DevicePathForType(const std::string& type) {
if (type == shill::kTypeEthernet)
return kDevicePathEthernet;
if (type == shill::kTypeWifi)
return kDevicePathWifi;
if (type == shill::kTypeCellular)
return kDevicePathCellular;
if (type == shill::kTypeWimax)
return kDevicePathWimax;
return "";
}
} // namespace shill_stub_helper
} // namespace chromeos