blob: 61f9a641f63ba5f308fd68f50984c345207f6db9 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/apps/intent_helper/preferred_apps_test_util.h"
#include "base/run_loop.h"
#include "base/scoped_observation.h"
#include "chrome/browser/apps/app_service/app_service_proxy.h"
#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
namespace apps_util {
PreferredAppUpdateWaiter::PreferredAppUpdateWaiter(
apps::PreferredAppsListHandle& handle,
std::string app_id,
bool is_preferred_app)
: waiting_app_id_(std::move(app_id)),
waiting_is_preferred_app_(is_preferred_app),
preferred_apps_(handle) {
observation_.Observe(&handle);
}
PreferredAppUpdateWaiter::~PreferredAppUpdateWaiter() = default;
void PreferredAppUpdateWaiter::Wait() {
if (preferred_apps_->IsPreferredAppForSupportedLinks(waiting_app_id_) !=
waiting_is_preferred_app_) {
run_loop_.Run();
}
}
void PreferredAppUpdateWaiter::OnPreferredAppChanged(const std::string& app_id,
bool is_preferred_app) {
if (app_id == waiting_app_id_ &&
is_preferred_app == waiting_is_preferred_app_) {
run_loop_.Quit();
}
}
void PreferredAppUpdateWaiter::OnPreferredAppsListWillBeDestroyed(
apps::PreferredAppsListHandle* handle) {
observation_.Reset();
}
void SetSupportedLinksPreferenceAndWait(Profile* profile,
const std::string& app_id) {
auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile);
PreferredAppUpdateWaiter update_waiter(proxy->PreferredAppsList(), app_id);
proxy->SetSupportedLinksPreference(app_id);
update_waiter.Wait();
}
void RemoveSupportedLinksPreferenceAndWait(Profile* profile,
const std::string& app_id) {
auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile);
PreferredAppUpdateWaiter update_waiter(proxy->PreferredAppsList(), app_id,
/*is_preferred_app=*/false);
proxy->RemoveSupportedLinksPreference(app_id);
update_waiter.Wait();
}
} // namespace apps_util