blob: 67486700162240f1035ceddee5575ccd75f42190 [file] [log] [blame]
// Copyright 2020 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/net/network_health.h"
#include <vector>
#include "chrome/browser/chromeos/net/mojom/network_health.mojom.h"
#include "chromeos/network/network_event_log.h"
#include "chromeos/services/network_config/in_process_instance.h"
#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h"
namespace chromeos {
namespace network_health {
NetworkHealth::NetworkHealthState::NetworkHealthState() {}
NetworkHealth::NetworkHealthState::~NetworkHealthState() {}
NetworkHealth::NetworkHealth() {
network_config::BindToInProcessInstance(
remote_cros_network_config_.BindNewPipeAndPassReceiver());
remote_cros_network_config_->AddObserver(
cros_network_config_observer_receiver_.BindNewPipeAndPassRemote());
RefreshNetworkHealthState();
}
NetworkHealth::~NetworkHealth() {}
const NetworkHealth::NetworkHealthState&
NetworkHealth::GetNetworkHealthState() {
NET_LOG(EVENT) << "Network Health State Requested";
return network_health_state_;
}
void NetworkHealth::RefreshNetworkHealthState() {
RequestActiveNetworks();
RequestDeviceStateList();
}
void NetworkHealth::GetDeviceList(GetDeviceListCallback callback) {
std::move(callback).Run(mojo::Clone(network_health_state_.devices));
}
void NetworkHealth::GetActiveNetworkList(
GetActiveNetworkListCallback callback) {
std::move(callback).Run(mojo::Clone(network_health_state_.active_networks));
}
void NetworkHealth::OnActiveNetworksReceived(
std::vector<network_config::mojom::NetworkStatePropertiesPtr>
network_props) {
std::vector<mojom::NetworkPtr> active_networks;
for (const auto& prop : network_props) {
active_networks.push_back(
mojom::Network::New(prop->connection_state, prop->name, prop->type));
}
network_health_state_.active_networks.swap(active_networks);
}
void NetworkHealth::OnDeviceStateListReceived(
std::vector<network_config::mojom::DeviceStatePropertiesPtr> device_props) {
std::vector<mojom::DevicePtr> devices;
for (const auto& prop : device_props) {
devices.push_back(mojom::Device::New(
prop->device_state, prop->mac_address.value_or(""), prop->type));
}
network_health_state_.devices.swap(devices);
}
void NetworkHealth::OnActiveNetworksChanged(
std::vector<network_config::mojom::NetworkStatePropertiesPtr>
network_props) {
OnActiveNetworksReceived(std::move(network_props));
}
void NetworkHealth::OnDeviceStateListChanged() {
RequestDeviceStateList();
}
void NetworkHealth::RequestActiveNetworks() {
remote_cros_network_config_->GetNetworkStateList(
network_config::mojom::NetworkFilter::New(
network_config::mojom::FilterType::kActive,
network_config::mojom::NetworkType::kAll,
network_config::mojom::kNoLimit),
base::BindOnce(&NetworkHealth::OnActiveNetworksReceived,
base::Unretained(this)));
}
void NetworkHealth::RequestDeviceStateList() {
remote_cros_network_config_->GetDeviceStateList(base::BindOnce(
&NetworkHealth::OnDeviceStateListReceived, base::Unretained(this)));
}
} // namespace network_health
} // namespace chromeos