blob: dc2483224fc4f3607c67dd6aa33673b4489f7b57 [file] [log] [blame]
// Copyright (c) 2012 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 "chrome/browser/chromeos/cros/network_library_impl_stub.h"
#include "base/bind.h"
#include "content/public/browser/browser_thread.h"
using content::BrowserThread;
namespace chromeos {
NetworkLibraryImplStub::NetworkLibraryImplStub()
: ip_address_("1.1.1.1"),
hardware_address_("01:23:45:67:89:ab"),
pin_(""),
pin_required_(false),
pin_entered_(false),
connect_delay_ms_(0),
network_priority_order_(0) {
// Emulate default setting of the CheckPortalList when OOBE is done.
check_portal_list_ = "ethernet,wifi,cellular";
}
NetworkLibraryImplStub::~NetworkLibraryImplStub() {
disabled_wifi_networks_.clear();
disabled_cellular_networks_.clear();
disabled_wimax_networks_.clear();
}
void NetworkLibraryImplStub::Init() {
is_locked_ = false;
// Devices
int devices =
(1 << TYPE_ETHERNET) | (1 << TYPE_WIFI) | (1 << TYPE_CELLULAR) |
(1 << TYPE_WIMAX);
available_devices_ = devices;
enabled_devices_ = devices;
connected_devices_ = devices;
base::ListValue supported_carriers;
supported_carriers.Append(new StringValue("Generic CDMA Carrier 1"));
supported_carriers.Append(new StringValue("Generic UMTS"));
supported_carriers.Append(new StringValue("Generic CDMA Carrier 2"));
supported_carriers.Append(new StringValue("Generic CDMA Carrier 3"));
NetworkDevice* cellular = new NetworkDevice("cellular");
cellular->type_ = TYPE_CELLULAR;
cellular->set_technology_family(TECHNOLOGY_FAMILY_CDMA);
cellular->set_carrier("Generic CDMA Carrier 2");
cellular->imsi_ = "123456789012345";
cellular->set_supported_carriers(supported_carriers);
device_map_["cellular"] = cellular;
CellularApn apn;
apn.apn = "apn";
apn.network_id = "network_id";
apn.username = "username";
apn.password = "password";
apn.name = "name";
apn.localized_name = "localized_name";
apn.language = "language";
CellularApnList apn_list;
apn_list.push_back(apn);
NetworkDevice* cellular_gsm = new NetworkDevice("cellular_gsm");
cellular_gsm->type_ = TYPE_CELLULAR;
cellular_gsm->set_technology_family(TECHNOLOGY_FAMILY_GSM);
cellular_gsm->imsi_ = "123456789012345";
cellular_gsm->set_sim_pin_required(SIM_PIN_REQUIRED);
cellular_gsm->set_provider_apn_list(apn_list);
cellular_gsm->set_supported_carriers(supported_carriers);
device_map_["cellular_gsm"] = cellular_gsm;
// Profiles
AddProfile("default", PROFILE_SHARED);
AddProfile("user", PROFILE_USER);
// Networks
// If these change, the expectations in network_library_unittest and
// network_menu_icon_unittest need to be changed also.
Network* ethernet = new EthernetNetwork("eth1");
ethernet->set_name("Fake Ethernet");
ethernet->set_connected();
AddStubNetwork(ethernet, PROFILE_SHARED);
ethernet->set_is_active(ethernet->connected());
WifiNetwork* wifi1 = new WifiNetwork("wifi1");
wifi1->set_name("Fake WiFi1");
wifi1->set_strength(100);
wifi1->set_connected();
wifi1->set_encryption(SECURITY_NONE);
AddStubNetwork(wifi1, PROFILE_SHARED);
WifiNetwork* wifi2 = new WifiNetwork("wifi2");
wifi2->set_name("Fake WiFi2");
wifi2->set_strength(70);
wifi2->set_encryption(SECURITY_NONE);
AddStubNetwork(wifi2, PROFILE_SHARED);
WifiNetwork* wifi3 = new WifiNetwork("wifi3");
wifi3->set_name("Fake WiFi3 Encrypted with a long name");
wifi3->set_strength(60);
wifi3->set_encryption(SECURITY_WEP);
wifi3->set_passphrase_required(true);
AddStubNetwork(wifi3, PROFILE_USER);
WifiNetwork* wifi_cert_pattern = new WifiNetwork("wifi_cert_pattern");
wifi_cert_pattern->set_name("Fake WiFi CertPattern 802.1x");
wifi_cert_pattern->set_strength(50);
wifi_cert_pattern->set_connectable(false);
wifi_cert_pattern->set_encryption(SECURITY_8021X);
wifi_cert_pattern->SetEAPMethod(EAP_METHOD_TLS);
wifi_cert_pattern->SetEAPUseSystemCAs(true);
wifi_cert_pattern->SetEAPIdentity("user@example.com");
wifi_cert_pattern->SetEAPPhase2Auth(EAP_PHASE_2_AUTH_AUTO);
wifi_cert_pattern->set_client_cert_type(CLIENT_CERT_TYPE_PATTERN);
CertificatePattern pattern;
IssuerSubjectPattern subject;
subject.set_organization("Google Inc");
pattern.set_subject(subject);
std::vector<std::string> enrollment_uris;
enrollment_uris.push_back("http://www.google.com/chromebook");
pattern.set_enrollment_uri_list(enrollment_uris);
wifi_cert_pattern->set_client_cert_pattern(pattern);
wifi_cert_pattern->set_eap_save_credentials(true);
AddStubNetwork(wifi_cert_pattern, PROFILE_USER);
WifiNetwork* wifi4 = new WifiNetwork("wifi4");
wifi4->set_name("Fake WiFi4 802.1x");
wifi4->set_strength(50);
wifi4->set_connectable(false);
wifi4->set_encryption(SECURITY_8021X);
wifi4->SetEAPMethod(EAP_METHOD_PEAP);
wifi4->SetEAPIdentity("nobody@google.com");
wifi4->SetEAPPassphrase("password");
AddStubNetwork(wifi4, PROFILE_NONE);
WifiNetwork* wifi5 = new WifiNetwork("wifi5");
wifi5->set_name("Fake WiFi5 UTF-8 SSID ");
wifi5->SetSsid("Fake WiFi5 UTF-8 SSID \u3042\u3044\u3046");
wifi5->set_strength(25);
AddStubNetwork(wifi5, PROFILE_NONE);
WifiNetwork* wifi6 = new WifiNetwork("wifi6");
wifi6->set_name("Fake WiFi6 latin-1 SSID ");
wifi6->SetSsid("Fake WiFi6 latin-1 SSID \xc0\xcb\xcc\xd6\xfb");
wifi6->set_strength(20);
AddStubNetwork(wifi6, PROFILE_NONE);
WifiNetwork* wifi7 = new WifiNetwork("wifi7");
wifi7->set_name("Fake Wifi7 (policy-managed)");
wifi7->set_strength(100);
wifi7->set_connectable(false);
wifi7->set_passphrase_required(true);
wifi7->set_encryption(SECURITY_8021X);
wifi7->SetEAPMethod(EAP_METHOD_PEAP);
wifi7->SetEAPIdentity("enterprise@example.com");
wifi7->SetEAPPassphrase("password");
NetworkUIData wifi7_ui_data;
wifi7_ui_data.set_onc_source(NetworkUIData::ONC_SOURCE_DEVICE_POLICY);
wifi7->set_ui_data(wifi7_ui_data);
AddStubNetwork(wifi7, PROFILE_USER);
CellularNetwork* cellular1 = new CellularNetwork("cellular1");
cellular1->set_name("Fake Cellular 1");
cellular1->set_device_path(cellular->device_path());
cellular1->set_strength(100);
cellular1->set_connected();
cellular1->set_activation_state(ACTIVATION_STATE_ACTIVATED);
cellular1->set_payment_url(std::string("http://www.google.com"));
cellular1->set_usage_url(std::string("http://www.google.com"));
cellular1->set_network_technology(NETWORK_TECHNOLOGY_EVDO);
AddStubNetwork(cellular1, PROFILE_NONE);
CellularNetwork* cellular2 = new CellularNetwork("/cellular2");
cellular2->set_name("Fake Cellular 2");
cellular2->set_device_path(cellular->device_path());
cellular2->set_strength(50);
cellular2->set_activation_state(ACTIVATION_STATE_NOT_ACTIVATED);
cellular2->set_network_technology(NETWORK_TECHNOLOGY_UMTS);
cellular2->set_roaming_state(ROAMING_STATE_ROAMING);
cellular2->set_payment_url(std::string("http://www.google.com"));
cellular2->set_usage_url(std::string("http://www.google.com"));
AddStubNetwork(cellular2, PROFILE_NONE);
CellularNetwork* cellular3 = new CellularNetwork("cellular3");
cellular3->set_name("Fake Cellular 3 (policy-managed)");
cellular3->set_device_path(cellular->device_path());
cellular3->set_activation_state(ACTIVATION_STATE_ACTIVATED);
cellular3->set_network_technology(NETWORK_TECHNOLOGY_EVDO);
NetworkUIData cellular3_ui_data;
cellular3_ui_data.set_onc_source(NetworkUIData::ONC_SOURCE_USER_POLICY);
cellular3->set_ui_data(cellular3_ui_data);
AddStubNetwork(cellular3, PROFILE_NONE);
CellularNetwork* cellular4 = new CellularNetwork("cellular4");
cellular4->set_name("Fake Cellular 4 (policy-managed)");
cellular4->set_device_path(cellular_gsm->device_path());
cellular4->set_activation_state(ACTIVATION_STATE_ACTIVATED);
cellular4->set_network_technology(NETWORK_TECHNOLOGY_GSM);
NetworkUIData cellular4_ui_data;
cellular4_ui_data.set_onc_source(NetworkUIData::ONC_SOURCE_USER_POLICY);
cellular4->set_ui_data(cellular4_ui_data);
AddStubNetwork(cellular4, PROFILE_NONE);
CellularNetwork* cellular5 = new CellularNetwork("cellular5");
cellular5->set_name("Fake Cellular Low Data");
cellular5->set_device_path(cellular->device_path());
cellular5->set_strength(100);
cellular5->set_activation_state(ACTIVATION_STATE_ACTIVATED);
cellular5->set_payment_url(std::string("http://www.google.com"));
cellular5->set_usage_url(std::string("http://www.google.com"));
cellular5->set_network_technology(NETWORK_TECHNOLOGY_EVDO);
cellular5->set_data_left(CellularNetwork::DATA_LOW);
AddStubNetwork(cellular5, PROFILE_NONE);
CellularDataPlan* base_plan = new CellularDataPlan();
base_plan->plan_name = "Base plan";
base_plan->plan_type = CELLULAR_DATA_PLAN_METERED_BASE;
base_plan->plan_data_bytes = 100ll * 1024 * 1024;
base_plan->data_bytes_used = base_plan->plan_data_bytes / 4;
CellularDataPlan* paid_plan = new CellularDataPlan();
paid_plan->plan_name = "Paid plan";
paid_plan->plan_type = CELLULAR_DATA_PLAN_METERED_PAID;
paid_plan->plan_data_bytes = 5ll * 1024 * 1024 * 1024;
paid_plan->data_bytes_used = paid_plan->plan_data_bytes / 2;
CellularDataPlanVector* data_plan_vector1 = new CellularDataPlanVector;
data_plan_vector1->push_back(base_plan);
data_plan_vector1->push_back(paid_plan);
UpdateCellularDataPlan(cellular1->service_path(), data_plan_vector1);
CellularDataPlan* low_data_plan = new CellularDataPlan();
low_data_plan->plan_name = "Low Data plan";
low_data_plan->plan_type = CELLULAR_DATA_PLAN_METERED_PAID;
low_data_plan->plan_data_bytes = 5ll * 1024 * 1024 * 1024;
low_data_plan->data_bytes_used =
low_data_plan->plan_data_bytes - kCellularDataVeryLowBytes;
CellularDataPlanVector* data_plan_vector2 = new CellularDataPlanVector;
data_plan_vector2->push_back(low_data_plan);
UpdateCellularDataPlan(cellular5->service_path(), data_plan_vector2);
WimaxNetwork* wimax1 = new WimaxNetwork("wimax1");
wimax1->set_name("Fake WiMAX Protected");
wimax1->set_strength(75);
wimax1->set_connectable(true);
wimax1->set_eap_identity("WiMAX User 1");
wimax1->set_passphrase_required(true);
AddStubNetwork(wimax1, PROFILE_NONE);
WimaxNetwork* wimax2 = new WimaxNetwork("wimax2");
wimax2->set_name("Fake WiMAX Open");
wimax2->set_strength(50);
wimax2->set_connected();
wimax2->set_passphrase_required(false);
AddStubNetwork(wimax2, PROFILE_NONE);
VirtualNetwork* vpn1 = new VirtualNetwork("vpn1");
vpn1->set_name("Fake VPN1");
vpn1->set_server_hostname("vpn1server.fake.com");
vpn1->set_provider_type(PROVIDER_TYPE_L2TP_IPSEC_PSK);
vpn1->set_username("VPN User 1");
AddStubNetwork(vpn1, PROFILE_USER);
VirtualNetwork* vpn2 = new VirtualNetwork("vpn2");
vpn2->set_name("Fake VPN2");
vpn2->set_server_hostname("vpn2server.fake.com");
vpn2->set_provider_type(PROVIDER_TYPE_L2TP_IPSEC_USER_CERT);
vpn2->set_username("VPN User 2");
AddStubNetwork(vpn2, PROFILE_USER);
VirtualNetwork* vpn3 = new VirtualNetwork("vpn3");
vpn3->set_name("Fake VPN3");
vpn3->set_server_hostname("vpn3server.fake.com");
vpn3->set_provider_type(PROVIDER_TYPE_OPEN_VPN);
AddStubNetwork(vpn3, PROFILE_USER);
VirtualNetwork* vpn4 = new VirtualNetwork("vpn4");
vpn4->set_name("Fake VPN4 (policy-managed)");
vpn4->set_server_hostname("vpn4server.fake.com");
vpn4->set_provider_type(PROVIDER_TYPE_OPEN_VPN);
NetworkUIData vpn4_ui_data;
vpn4_ui_data.set_onc_source(NetworkUIData::ONC_SOURCE_DEVICE_POLICY);
vpn4->set_ui_data(vpn4_ui_data);
AddStubNetwork(vpn4, PROFILE_USER);
wifi_scanning_ = false;
offline_mode_ = false;
// Ensure our active network is connected and vice versa, otherwise our
// autotest browser_tests sometimes conclude the device is offline.
CHECK(active_network()->connected())
<< "Active: " << active_network()->name();
CHECK(connected_network()->is_active());
std::string test_blob(
"{"
" \"NetworkConfigurations\": ["
" {"
" \"GUID\": \"guid\","
" \"Type\": \"VPN\","
" \"Name\": \"VPNtest\","
" \"VPN\": {"
" \"Host\": \"172.22.12.98\","
" \"Type\": \"L2TP-IPsec\","
" \"IPsec\": {"
" \"AuthenticationType\": \"PSK\","
" \"IKEVersion\": 2,"
" \"PSK\": \"chromeos\","
" },"
" \"L2TP\": {"
" \"Username\": \"vpntest\","
" }"
" }"
" }"
" ],"
" \"Certificates\": []"
"}");
// LoadOncNetworks(test_blob, "", NetworkUIData::ONC_SOURCE_USER_IMPORT, NULL);
}
bool NetworkLibraryImplStub::IsCros() const {
return false;
}
////////////////////////////////////////////////////////////////////////////
// NetworkLibraryImplStub private methods.
void NetworkLibraryImplStub::AddStubNetwork(
Network* network, NetworkProfileType profile_type) {
// Currently we don't prioritize networks in Shill so don't do so in the stub.
// network->priority_order_ = network_priority_order_++;
network->CalculateUniqueId();
if (!network->unique_id().empty())
network_unique_id_map_[network->unique_id()] = network;
AddNetwork(network);
UpdateActiveNetwork(network);
SetProfileType(network, profile_type);
AddStubRememberedNetwork(network);
}
// Add a remembered network to the appropriate profile if specified.
void NetworkLibraryImplStub::AddStubRememberedNetwork(Network* network) {
if (network->profile_type() == PROFILE_NONE)
return;
Network* remembered = FindRememberedFromNetwork(network);
if (remembered) {
// This network is already in the rememebred list. Check to see if the
// type has changed.
if (remembered->profile_type() == network->profile_type())
return; // Same type, nothing to do.
// Delete the existing remembered network from the previous profile.
DeleteRememberedNetwork(remembered->service_path());
remembered = NULL;
}
NetworkProfile* profile = GetProfileForType(network->profile_type());
if (profile) {
profile->services.insert(network->service_path());
} else {
LOG(ERROR) << "No profile type: " << network->profile_type();
return;
}
if (network->type() == TYPE_WIFI) {
WifiNetwork* remembered_wifi = new WifiNetwork(network->service_path());
remembered_wifi->set_encryption(remembered_wifi->encryption());
NetworkUIData wifi_ui_data;
wifi_ui_data.set_onc_source(network->ui_data().onc_source());
remembered_wifi->set_ui_data(wifi_ui_data);
remembered = remembered_wifi;
} else if (network->type() == TYPE_VPN) {
VirtualNetwork* remembered_vpn =
new VirtualNetwork(network->service_path());
remembered_vpn->set_server_hostname("vpnserver.fake.com");
remembered_vpn->set_provider_type(PROVIDER_TYPE_L2TP_IPSEC_USER_CERT);
NetworkUIData vpn_ui_data;
vpn_ui_data.set_onc_source(network->ui_data().onc_source());
remembered_vpn->set_ui_data(vpn_ui_data);
remembered = remembered_vpn;
}
if (remembered) {
remembered->set_name(network->name());
remembered->set_unique_id(network->unique_id());
// ValidateAndAddRememberedNetwork will insert the network into the matching
// profile and set the profile type + path.
if (!ValidateAndAddRememberedNetwork(remembered))
NOTREACHED();
}
}
void NetworkLibraryImplStub::ConnectToNetwork(Network* network) {
std::string passphrase;
if (network->type() == TYPE_WIFI) {
WifiNetwork* wifi = static_cast<WifiNetwork*>(network);
if (wifi->passphrase_required())
passphrase = wifi->passphrase();
} else if (network->type() == TYPE_WIMAX) {
WimaxNetwork* wimax = static_cast<WimaxNetwork*>(network);
if (wimax->passphrase_required())
passphrase = wimax->eap_passphrase();
}
if (!passphrase.empty()) {
if (passphrase.find("bad") == 0) {
NetworkConnectCompleted(network, CONNECT_BAD_PASSPHRASE);
return;
} else if (passphrase.find("error") == 0) {
NetworkConnectCompleted(network, CONNECT_FAILED);
return;
}
}
// Disconnect ethernet when connecting to a new network (for UI testing).
if (network->type() != TYPE_VPN) {
ethernet_->set_is_active(false);
ethernet_->set_disconnected();
}
// Set connected state.
network->set_connected();
network->set_connection_started(false);
// Make the connected network the highest priority network.
// Set all other networks of the same type to disconnected + inactive;
int old_priority_order = network->priority_order_;
network->priority_order_ = 0;
for (NetworkMap::iterator iter = network_map_.begin();
iter != network_map_.end(); ++iter) {
Network* other = iter->second;
if (other == network)
continue;
if (other->priority_order_ < old_priority_order)
other->priority_order_++;
if (other->type() == network->type()) {
other->set_is_active(false);
other->set_disconnected();
}
}
// Cycle data left to trigger notifications.
if (network->type() == TYPE_CELLULAR) {
if (network->name().find("Low Data") != std::string::npos) {
CellularNetwork* cellular = static_cast<CellularNetwork*>(network);
// Simulate a transition to very low data.
cellular->set_data_left(CellularNetwork::DATA_LOW);
NotifyCellularDataPlanChanged();
cellular->set_data_left(CellularNetwork::DATA_VERY_LOW);
active_cellular_ = cellular;
NotifyCellularDataPlanChanged();
}
}
// Remember connected network.
if (network->profile_type() == PROFILE_NONE) {
NetworkProfileType profile_type = PROFILE_USER;
if (network->type() == TYPE_WIFI) {
WifiNetwork* wifi = static_cast<WifiNetwork*>(network);
if (!wifi->encrypted())
profile_type = PROFILE_SHARED;
}
SetProfileType(network, profile_type);
}
AddStubRememberedNetwork(network);
// Call Completed and signal observers.
NetworkConnectCompleted(network, CONNECT_SUCCESS);
}
//////////////////////////////////////////////////////////////////////////////
// NetworkLibraryImplBase implementation.
void NetworkLibraryImplStub::MonitorNetworkStart(
const std::string& service_path) {}
void NetworkLibraryImplStub::MonitorNetworkStop(
const std::string& service_path) {}
void NetworkLibraryImplStub::MonitorNetworkDeviceStart(
const std::string& device_path) {}
void NetworkLibraryImplStub::MonitorNetworkDeviceStop(
const std::string& device_path) {}
void NetworkLibraryImplStub::CallConfigureService(
const std::string& identifier,
const DictionaryValue* info) {}
void NetworkLibraryImplStub::CallConnectToNetwork(Network* network) {
// Immediately set the network to active to mimic shill's behavior.
SetActiveNetwork(network->type(), network->service_path());
// If a delay has been set (i.e. we are interactive), delay the call to
// ConnectToNetwork (but signal observers since we changed connecting state).
if (connect_delay_ms_) {
// This class is a Singleton and won't be deleted until this callbacks has
// run.
BrowserThread::PostDelayedTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&NetworkLibraryImplStub::ConnectToNetwork,
base::Unretained(this), network),
base::TimeDelta::FromMilliseconds(connect_delay_ms_));
SignalNetworkManagerObservers();
NotifyNetworkChanged(network);
} else {
ConnectToNetwork(network);
}
}
void NetworkLibraryImplStub::CallRequestWifiNetworkAndConnect(
const std::string& ssid, ConnectionSecurity security) {
WifiNetwork* wifi = new WifiNetwork(ssid);
wifi->set_name(ssid);
wifi->set_encryption(security);
AddNetwork(wifi);
ConnectToWifiNetworkUsingConnectData(wifi);
SignalNetworkManagerObservers();
}
void NetworkLibraryImplStub::CallRequestVirtualNetworkAndConnect(
const std::string& service_name,
const std::string& server_hostname,
ProviderType provider_type) {
VirtualNetwork* vpn = new VirtualNetwork(service_name);
vpn->set_name(service_name);
vpn->set_server_hostname(server_hostname);
vpn->set_provider_type(provider_type);
AddNetwork(vpn);
ConnectToVirtualNetworkUsingConnectData(vpn);
SignalNetworkManagerObservers();
}
void NetworkLibraryImplStub::CallDeleteRememberedNetwork(
const std::string& profile_path,
const std::string& service_path) {}
void NetworkLibraryImplStub::CallEnableNetworkDeviceType(
ConnectionType device, bool enable) {
if (enable) {
if (device == TYPE_WIFI && !wifi_enabled()) {
wifi_networks_.swap(disabled_wifi_networks_);
disabled_wifi_networks_.clear();
} else if (device == TYPE_WIMAX && !wimax_enabled()) {
wimax_networks_.swap(disabled_wimax_networks_);
disabled_wimax_networks_.clear();
} else if (device == TYPE_CELLULAR && !cellular_enabled()) {
cellular_networks_.swap(disabled_cellular_networks_);
disabled_cellular_networks_.clear();
}
enabled_devices_ |= (1 << device);
} else {
if (device == TYPE_WIFI && wifi_enabled()) {
wifi_networks_.swap(disabled_wifi_networks_);
wifi_networks_.clear();
if (active_wifi_)
DisconnectFromNetwork(active_wifi_);
} else if (device == TYPE_WIMAX && wimax_enabled()) {
wimax_networks_.swap(disabled_wimax_networks_);
wimax_networks_.clear();
if (active_wimax_)
DisconnectFromNetwork(active_wimax_);
} else if (device == TYPE_CELLULAR && cellular_enabled()) {
cellular_networks_.swap(disabled_cellular_networks_);
cellular_networks_.clear();
if (active_cellular_)
DisconnectFromNetwork(active_cellular_);
}
enabled_devices_ &= ~(1 << device);
}
SignalNetworkManagerObservers();
}
void NetworkLibraryImplStub::CallRemoveNetwork(const Network* network) {}
/////////////////////////////////////////////////////////////////////////////
// NetworkLibrary implementation.
void NetworkLibraryImplStub::SetCheckPortalList(const
std::string& check_portal_list) {
check_portal_list_ = check_portal_list;
}
void NetworkLibraryImplStub::SetDefaultCheckPortalList() {
SetCheckPortalList("ethernet,wifi,cellular");
}
void NetworkLibraryImplStub::ChangePin(const std::string& old_pin,
const std::string& new_pin) {
sim_operation_ = SIM_OPERATION_CHANGE_PIN;
if (!pin_required_ || old_pin == pin_) {
pin_ = new_pin;
NotifyPinOperationCompleted(PIN_ERROR_NONE);
} else {
NotifyPinOperationCompleted(PIN_ERROR_INCORRECT_CODE);
}
}
void NetworkLibraryImplStub::ChangeRequirePin(bool require_pin,
const std::string& pin) {
sim_operation_ = SIM_OPERATION_CHANGE_REQUIRE_PIN;
if (!pin_required_ || pin == pin_) {
pin_required_ = require_pin;
NotifyPinOperationCompleted(PIN_ERROR_NONE);
} else {
NotifyPinOperationCompleted(PIN_ERROR_INCORRECT_CODE);
}
}
void NetworkLibraryImplStub::EnterPin(const std::string& pin) {
sim_operation_ = SIM_OPERATION_ENTER_PIN;
if (!pin_required_ || pin == pin_) {
pin_entered_ = true;
NotifyPinOperationCompleted(PIN_ERROR_NONE);
} else {
NotifyPinOperationCompleted(PIN_ERROR_INCORRECT_CODE);
}
}
void NetworkLibraryImplStub::UnblockPin(const std::string& puk,
const std::string& new_pin) {
sim_operation_ = SIM_OPERATION_UNBLOCK_PIN;
// TODO(stevenjb): something?
NotifyPinOperationCompleted(PIN_ERROR_NONE);
}
void NetworkLibraryImplStub::RequestCellularScan() {}
void NetworkLibraryImplStub::RequestCellularRegister(
const std::string& network_id) {}
void NetworkLibraryImplStub::SetCellularDataRoamingAllowed(bool new_value) {}
void NetworkLibraryImplStub::SetCarrier(
const std::string& carrier,
const NetworkOperationCallback& completed) {
// Call the completed callback with a 10s delay.
BrowserThread::PostDelayedTask(
BrowserThread::UI,
FROM_HERE,
base::Bind(completed, "", NETWORK_METHOD_ERROR_NONE,""),
base::TimeDelta::FromMilliseconds(10000));
}
bool NetworkLibraryImplStub::IsCellularAlwaysInRoaming() {
return false;
}
void NetworkLibraryImplStub::RequestNetworkScan() {
// This is triggered by user interaction, so set a network connect delay.
const int kConnectDelayMs = 4 * 1000;
connect_delay_ms_ = kConnectDelayMs;
SignalNetworkManagerObservers();
}
bool NetworkLibraryImplStub::GetWifiAccessPoints(
WifiAccessPointVector* result) {
*result = WifiAccessPointVector();
return true;
}
void NetworkLibraryImplStub::RefreshIPConfig(Network* network) {
}
void NetworkLibraryImplStub::DisconnectFromNetwork(const Network* network) {
// Update the network state here since no network manager in stub impl.
Network* modify_network = const_cast<Network*>(network);
modify_network->set_is_active(false);
modify_network->set_disconnected();
if (network == active_wifi_)
active_wifi_ = NULL;
else if (network == active_cellular_)
active_cellular_ = NULL;
else if (network == active_virtual_)
active_virtual_ = NULL;
SignalNetworkManagerObservers();
NotifyNetworkChanged(network);
}
void NetworkLibraryImplStub::EnableOfflineMode(bool enable) {
if (enable != offline_mode_) {
offline_mode_ = enable;
CallEnableNetworkDeviceType(TYPE_WIFI, !enable);
CallEnableNetworkDeviceType(TYPE_CELLULAR, !enable);
}
}
NetworkIPConfigVector NetworkLibraryImplStub::GetIPConfigs(
const std::string& device_path,
std::string* hardware_address,
HardwareAddressFormat format) {
*hardware_address = hardware_address_;
return ip_configs_;
}
void NetworkLibraryImplStub::SetIPParameters(const std::string& service_path,
const std::string& address,
const std::string& netmask,
const std::string& gateway,
const std::string& name_servers,
int dhcp_usage_mask) {
VLOG(1) << "Setting IP parameters:"
<< "\n address: " << address
<< (dhcp_usage_mask & USE_DHCP_ADDRESS ?
" (ignored)" : " (in use)")
<< "\n netmask: " << netmask
<< (dhcp_usage_mask & USE_DHCP_NETMASK ?
" (ignored)" : " (in use)")
<< "\n gateway: " << gateway
<< (dhcp_usage_mask & USE_DHCP_GATEWAY ?
" (ignored)" : " (in use)")
<< "\n name_servers: " << name_servers
<< (dhcp_usage_mask & USE_DHCP_NAME_SERVERS ?
" (ignored)" : " (in use)");
Network* network = FindNetworkByPath(service_path);
if (network)
ip_configs_.push_back(NetworkIPConfig(network->device_path(),
IPCONFIG_TYPE_IPV4,
address,
netmask,
gateway,
name_servers));
}
} // namespace chromeos