blob: 1375df279ae710842fde14f90ff46ad77b2d43ad [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/test/bind.h"
#include "base/test/test_future.h"
#include "chrome/browser/ash/crosapi/ash_requires_lacros_browsertestbase.h"
#include "chrome/browser/ash/crosapi/crosapi_manager.h"
#include "chrome/browser/ash/crosapi/web_app_service_ash.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/web_applications/test/app_registry_cache_waiter.h"
#include "chrome/browser/web_applications/web_app_id.h"
#include "chromeos/crosapi/mojom/test_controller.mojom-test-utils.h"
#include "content/public/test/browser_test.h"
namespace crosapi {
namespace {
class WebAppProviderBridgeBrowserTest
: public AshRequiresLacrosBrowserTestBase {
protected:
web_app::AppId InstallWebApp(const std::string& start_url,
apps::WindowMode mode) {
crosapi::mojom::StandaloneBrowserTestControllerAsyncWaiter waiter(
GetStandaloneBrowserTestController());
std::string app_id;
waiter.InstallWebApp(start_url, mode, &app_id);
CHECK(!app_id.empty());
web_app::AppReadinessWaiter(profile(), app_id).Await();
return app_id;
}
web_app::AppId InstallSubApp(const web_app::AppId& parent_app_id,
std::string sub_app_start_url) {
crosapi::mojom::StandaloneBrowserTestControllerAsyncWaiter waiter(
GetStandaloneBrowserTestController());
std::string sub_app_id;
waiter.InstallSubApp(parent_app_id, sub_app_start_url, &sub_app_id);
CHECK(!sub_app_id.empty());
web_app::AppReadinessWaiter(profile(), sub_app_id).Await();
return sub_app_id;
}
Profile* profile() { return browser()->profile(); }
};
IN_PROC_BROWSER_TEST_F(WebAppProviderBridgeBrowserTest, GetSubAppIds) {
if (!HasLacrosArgument()) {
return;
}
web_app::AppId parent_app_id =
InstallWebApp("https://www.parent-app.com", apps::WindowMode::kWindow);
web_app::AppId sub_app_id_1 =
InstallSubApp(parent_app_id, "https://www.parent-app.com/sub-app-1");
web_app::AppId sub_app_id_2 =
InstallSubApp(parent_app_id, "https://www.parent-app.com/sub-app-2");
base::flat_set<web_app::AppId> expected;
expected.emplace(sub_app_id_1);
expected.emplace(sub_app_id_2);
crosapi::mojom::WebAppProviderBridge* web_app_provider_bridge =
crosapi::CrosapiManager::Get()
->crosapi_ash()
->web_app_service_ash()
->GetWebAppProviderBridge();
ASSERT_TRUE(web_app_provider_bridge);
base::test::TestFuture<const std::vector<web_app::AppId>&>
get_sub_apps_future;
web_app_provider_bridge->GetSubAppIds(parent_app_id,
get_sub_apps_future.GetCallback());
base::flat_set<web_app::AppId> results_set{get_sub_apps_future.Get()};
EXPECT_EQ(2u, results_set.size());
EXPECT_EQ(results_set, expected);
}
} // namespace
} // namespace crosapi