// 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 "components/wifi/fake_wifi_service.h" #include #include #include "base/bind.h" #include "base/values.h" #include "components/onc/onc_constants.h" namespace wifi { FakeWiFiService::FakeWiFiService() { // Populate data expected by unit test. { NetworkProperties network_properties; network_properties.connection_state = onc::connection_state::kConnected; network_properties.guid = "stub_wifi1_guid"; network_properties.name = "wifi1"; network_properties.type = onc::network_type::kWiFi; network_properties.frequency = 0; network_properties.ssid = "wifi1"; network_properties.security = onc::wifi::kWEP_PSK; network_properties.signal_strength = 40; networks_.push_back(network_properties); } { NetworkProperties network_properties; network_properties.connection_state = onc::connection_state::kNotConnected; network_properties.guid = "stub_wifi2_guid"; network_properties.name = "wifi2_PSK"; network_properties.type = onc::network_type::kWiFi; network_properties.frequency = 5000; network_properties.frequency_set.insert(2400); network_properties.frequency_set.insert(5000); network_properties.ssid = "wifi2_PSK"; network_properties.security = onc::wifi::kWPA_PSK; network_properties.signal_strength = 80; networks_.push_back(network_properties); } } FakeWiFiService::~FakeWiFiService() { } void FakeWiFiService::Initialize( scoped_refptr task_runner) { } void FakeWiFiService::UnInitialize() { } void FakeWiFiService::GetProperties(const std::string& network_guid, base::Value::Dict* properties, std::string* error) { NetworkList::iterator network_properties = FindNetwork(network_guid); if (network_properties == networks_.end()) { *error = "Error.InvalidNetworkGuid"; return; } *properties = network_properties->ToValue(/*network_list=*/false); } void FakeWiFiService::GetManagedProperties( const std::string& network_guid, base::Value::Dict* managed_properties, std::string* error) { // Not implemented *error = kErrorWiFiService; } void FakeWiFiService::GetState(const std::string& network_guid, base::Value::Dict* properties, std::string* error) { NetworkList::iterator network_properties = FindNetwork(network_guid); if (network_properties == networks_.end()) { *error = "Error.InvalidNetworkGuid"; return; } *properties = network_properties->ToValue(/*network_list=*/true); } void FakeWiFiService::SetProperties(const std::string& network_guid, base::Value::Dict properties, std::string* error) { NetworkList::iterator network_properties = FindNetwork(network_guid); if (network_properties == networks_.end() || !network_properties->UpdateFromValue(properties)) { *error = "Error.DBusFailed"; } } void FakeWiFiService::CreateNetwork(bool shared, base::Value::Dict properties, std::string* network_guid, std::string* error) { NetworkProperties network_properties; if (network_properties.UpdateFromValue(properties)) { network_properties.guid = network_properties.ssid; networks_.push_back(network_properties); *network_guid = network_properties.guid; } else { *error = "Error.DBusFailed"; } } void FakeWiFiService::GetVisibleNetworks(const std::string& network_type, bool include_details, base::Value::List* network_list) { for (NetworkList::const_iterator it = networks_.begin(); it != networks_.end(); ++it) { if (network_type.empty() || network_type == onc::network_type::kAllTypes || it->type == network_type) { network_list->Append(it->ToValue(/*network_list=*/!include_details)); } } } void FakeWiFiService::RequestNetworkScan() { NotifyNetworkListChanged(networks_); } void FakeWiFiService::StartConnect(const std::string& network_guid, std::string* error) { NetworkList::iterator network_properties = FindNetwork(network_guid); if (network_properties == networks_.end()) { *error = "Error.InvalidNetworkGuid"; return; } DisconnectAllNetworksOfType(network_properties->type); network_properties->connection_state = onc::connection_state::kConnected; SortNetworks(); NotifyNetworkListChanged(networks_); NotifyNetworkChanged(network_guid); } void FakeWiFiService::StartDisconnect(const std::string& network_guid, std::string* error) { NetworkList::iterator network_properties = FindNetwork(network_guid); if (network_properties == networks_.end()) { *error = "Error.InvalidNetworkGuid"; return; } network_properties->connection_state = onc::connection_state::kNotConnected; SortNetworks(); NotifyNetworkListChanged(networks_); NotifyNetworkChanged(network_guid); } void FakeWiFiService::GetKeyFromSystem(const std::string& network_guid, std::string* key_data, std::string* error) { *error = "not-found"; } void FakeWiFiService::SetEventObservers( scoped_refptr task_runner, NetworkGuidListCallback networks_changed_observer, NetworkGuidListCallback network_list_changed_observer) { task_runner_.swap(task_runner); networks_changed_observer_ = std::move(networks_changed_observer); network_list_changed_observer_ = std::move(network_list_changed_observer); } void FakeWiFiService::RequestConnectedNetworkUpdate() { } void FakeWiFiService::GetConnectedNetworkSSID(std::string* ssid, std::string* error) { *ssid = ""; *error = ""; } NetworkList::iterator FakeWiFiService::FindNetwork( const std::string& network_guid) { for (NetworkList::iterator it = networks_.begin(); it != networks_.end(); ++it) { if (it->guid == network_guid) return it; } return networks_.end(); } void FakeWiFiService::DisconnectAllNetworksOfType(const std::string& type) { for (NetworkList::iterator it = networks_.begin(); it != networks_.end(); ++it) { if (it->type == type) it->connection_state = onc::connection_state::kNotConnected; } } void FakeWiFiService::SortNetworks() { // Sort networks, so connected/connecting is up front, then by type: // Ethernet, WiFi, Cellular, VPN networks_.sort(NetworkProperties::OrderByType); } void FakeWiFiService::NotifyNetworkListChanged(const NetworkList& networks) { WiFiService::NetworkGuidList current_networks; for (NetworkList::const_iterator it = networks.begin(); it != networks.end(); ++it) { current_networks.push_back(it->guid); } task_runner_->PostTask( FROM_HERE, base::BindOnce(network_list_changed_observer_, current_networks)); } void FakeWiFiService::NotifyNetworkChanged(const std::string& network_guid) { WiFiService::NetworkGuidList changed_networks(1, network_guid); task_runner_->PostTask( FROM_HERE, base::BindOnce(networks_changed_observer_, changed_networks)); } } // namespace wifi