#include "ash/ambient/resources/ambient_dlc_background_installer.h"
#include "ash/ambient/util/time_of_day_utils.h"
#include "ash/public/cpp/network_config_service.h"
#include "base/check.h"
#include "base/functional/bind.h"
#include "base/functional/callback_helpers.h"
#include "base/logging.h"
#include "base/task/task_traits.h"
#include "base/task/thread_pool.h"
namespace ash {
AmbientBackgroundDlcInstaller::AmbientBackgroundDlcInstaller() {
GetNetworkConfigService(cros_network_config_.BindNewPipeAndPassReceiver());
cros_network_config_->AddObserver(
cros_network_config_observer_.BindNewPipeAndPassRemote());
cros_network_config_->GetNetworkStateList(
chromeos::network_config::mojom::NetworkFilter::New(
chromeos::network_config::mojom::FilterType::kActive,
chromeos::network_config::mojom::NetworkType::kAll,
chromeos::network_config::mojom::kNoLimit),
base::BindOnce(
&AmbientBackgroundDlcInstaller::TryExecuteInstallForAllActiveNetworks,
weak_factory_.GetWeakPtr()));
}
AmbientBackgroundDlcInstaller::~AmbientBackgroundDlcInstaller() = default;
void AmbientBackgroundDlcInstaller::OnNetworkStateChanged(
chromeos::network_config::mojom::NetworkStatePropertiesPtr network) {
TryExecuteInstall(std::move(network));
}
void AmbientBackgroundDlcInstaller::TryExecuteInstallForAllActiveNetworks(
std::vector<chromeos::network_config::mojom::NetworkStatePropertiesPtr>
active_networks) {
for (auto& network : active_networks) {
TryExecuteInstall(std::move(network));
}
}
void AmbientBackgroundDlcInstaller::TryExecuteInstall(
chromeos::network_config::mojom::NetworkStatePropertiesPtr network) {
if (has_executed_install_ || !network ||
network->connection_state !=
chromeos::network_config::mojom::ConnectionStateType::kOnline) {
return;
}
has_executed_install_ = true;
cros_network_config_observer_.reset();
base::ThreadPool::PostTaskAndReply(
FROM_HERE, {base::TaskPriority::BEST_EFFORT}, base::DoNothing(),
base::BindOnce(&InstallAmbientVideoDlcInBackground));
}
}