// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/services/app_service/public/cpp/app_instance_waiter.h"
namespace apps {
AppInstanceWaiter::AppInstanceWaiter(apps::InstanceRegistry& registry,
const std::string& app_id,
apps::InstanceState state)
: registry_(registry), app_id_(app_id), state_(state) {}
AppInstanceWaiter::~AppInstanceWaiter() = default;
void AppInstanceWaiter::Await() {
auto instances = registry_->GetInstances(app_id_);
CHECK_LE(instances.size(), 1u);
if (instances.empty() || (*instances.begin())->State() != state_) {
observation_.Observe(&*registry_);
run_loop_.Run();
}
}
void AppInstanceWaiter::OnInstanceUpdate(const apps::InstanceUpdate& update) {
if (update.AppId() == app_id_ && update.State() == state_) {
CHECK_EQ(registry_->GetInstances(app_id_).size(), 1u);
run_loop_.Quit();
}
}
void AppInstanceWaiter::OnInstanceRegistryWillBeDestroyed(
apps::InstanceRegistry* cache) {
observation_.Reset();
}
} // namespace apps