| // 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_TEST_ASH_CROSAPI_TESTS_ENV_H_ |
| #define CHROME_BROWSER_ASH_CROSAPI_TEST_ASH_CROSAPI_TESTS_ENV_H_ |
| |
| #include <memory> |
| |
| #include "base/files/scoped_temp_dir.h" |
| #include "base/process/process.h" |
| #include "chromeos/crosapi/mojom/crosapi.mojom.h" |
| #include "mojo/public/cpp/bindings/remote.h" |
| |
| namespace base { |
| class CommandLine; |
| class FilePath; |
| } |
| |
| namespace crosapi { |
| |
| // Delegate class to modify command line used for setting up ash process. |
| // To introduce ash env with customized command line, inherit this class to |
| // implement `AddExtraCommandLine`, and construct AshCrosapiTestEnv with |
| // passing the delegate class. |
| class AshCrosapiTestCommandLineModifierDelegate { |
| public: |
| AshCrosapiTestCommandLineModifierDelegate(); |
| AshCrosapiTestCommandLineModifierDelegate( |
| const AshCrosapiTestCommandLineModifierDelegate&) = delete; |
| AshCrosapiTestCommandLineModifierDelegate& operator=( |
| const AshCrosapiTestCommandLineModifierDelegate&) = delete; |
| virtual ~AshCrosapiTestCommandLineModifierDelegate(); |
| |
| // Adds extra command line to `command_line`. |
| // This is called before launching ash process, and the modified |
| // `command_line` will be passed to ash process on launch. |
| virtual void AddExtraCommandLine(base::CommandLine* command_line) = 0; |
| }; |
| |
| // AshCrosapiTestEnv is a test envirotnemtn for CrosapiTestBase. |
| // It's responsible for creating ash process and set up mojo connection. |
| class AshCrosapiTestEnv { |
| public: |
| AshCrosapiTestEnv(); |
| explicit AshCrosapiTestEnv( |
| std::unique_ptr<AshCrosapiTestCommandLineModifierDelegate> delegate); |
| AshCrosapiTestEnv(const AshCrosapiTestEnv&) = delete; |
| AshCrosapiTestEnv& operator=(const AshCrosapiTestEnv&) = delete; |
| ~AshCrosapiTestEnv(); |
| |
| // Initializes Ash environment. |
| void Initialize(); |
| |
| // Returns true if process and crosapi are valid. |
| bool IsValid(); |
| |
| mojo::Remote<mojom::Crosapi>& GetCrosapiRemote() { return crosapi_remote_; } |
| const base::FilePath& GetUserDataDir() { return user_data_dir_.GetPath(); } |
| |
| private: |
| std::unique_ptr<AshCrosapiTestCommandLineModifierDelegate> delegate_; |
| |
| base::ScopedTempDir user_data_dir_; |
| base::Process process_; |
| mojo::Remote<mojom::Crosapi> crosapi_remote_; |
| }; |
| |
| } // namespace crosapi |
| |
| #endif // CHROME_BROWSER_ASH_CROSAPI_TEST_ASH_CROSAPI_TESTS_ENV_H_ |