// 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.
#ifndef SANDBOX_MAC_SANDBOX_TEST_H_
#define SANDBOX_MAC_SANDBOX_TEST_H_
#include <optional>
#include <string>
#include "base/command_line.h"
#include "base/functional/callback.h"
#include "base/process/process.h"
#include "base/test/multiprocess_test.h"
namespace sandbox {
// Base class for multiprocess sandbox tests. This exists to override some
// command line preparation behavior for spawned child processes.
class SandboxTest : public base::MultiProcessTest {
public:
using CommandLineModifier =
std::optional<base::RepeatingCallback<void(base::CommandLine&)>>;
SandboxTest();
~SandboxTest() override;
// Launches a new test child process to run `procname`. If
// `command_line_modifier` is not null, it will be run to modify the child
// command line immediately before launch. Returns a handle to the launched
// process.
base::Process SpawnChildWithOptions(
const std::string& procname,
const base::LaunchOptions& options,
CommandLineModifier command_line_modifier = std::nullopt);
// Same as SpawnChildWithOptions, but uses a default LaunchOptions value.
base::Process SpawnChild(
const std::string& procname,
CommandLineModifier command_line_modifier = std::nullopt);
};
} // namespace sandbox
#endif // SANDBOX_MAC_SANDBOX_TEST_H_