// 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.
#ifndef CHROME_BROWSER_ASH_CROSAPI_ASH_REQUIRES_LACROS_BROWSERTESTBASE_H_
#define CHROME_BROWSER_ASH_CROSAPI_ASH_REQUIRES_LACROS_BROWSERTESTBASE_H_
#include "chrome/test/base/in_process_browser_test.h"
#include "base/test/scoped_feature_list.h"
#include "chrome/test/base/chromeos/ash_browser_test_starter.h"
#include "chromeos/crosapi/mojom/test_controller.mojom.h"
class Profile;
namespace crosapi {
// Base class for Ash browser tests that depend on Lacros and use
// StandaloneBrowserTestController.
class AshRequiresLacrosBrowserTestBase : public InProcessBrowserTest {
public:
AshRequiresLacrosBrowserTestBase();
~AshRequiresLacrosBrowserTestBase() override;
// Gets user profile in ash.
Profile* GetAshProfile() const;
protected:
void SetUpInProcessBrowserTestFixture() override;
// Waits for Lacros to start, and for the StandaloneBrowserTestController to
// connect.
void SetUpOnMainThread() override;
// Adds features as command line flags for the Lacros Chrome instance.
// Must be called after `SetUpInProcessBrowserTestFixture()` and before
// `SetUpOnMainThread()`, has no effect otherwise.
// Does not handle duplicate `--enable-features` flags.
void EnableFeaturesInLacros(
const std::vector<base::test::FeatureRef>& features);
// Returns whether the --lacros-chrome-path is provided.
// If returns false, we should not do any Lacros related testing
// because the Lacros instance is not provided.
bool HasLacrosArgument() const { return ash_starter_.HasLacrosArgument(); }
// Controller to send commands to the connected Lacros crosapi client.
mojom::StandaloneBrowserTestController* GetStandaloneBrowserTestController();
private:
test::AshBrowserTestStarter ash_starter_;
};
} // namespace crosapi
#endif // CHROME_BROWSER_ASH_CROSAPI_ASH_REQUIRES_LACROS_BROWSERTESTBASE_H_