#ifndef CONTENT_PUBLIC_TEST_BROWSER_FUZZTEST_SUPPORT_H_
#define CONTENT_PUBLIC_TEST_BROWSER_FUZZTEST_SUPPORT_H_
#include <concepts>
#include "base/test/scoped_run_loop_timeout.h"
#include "content/public/test/browser_test_base.h"
#include "third_party/fuzztest/src/fuzztest/fuzztest.h"
template <typename T>
requires(std::derived_from<T, content::BrowserTestBase>)
class BrowserFuzzTest : public T, public fuzztest::FuzzTestRunnerFixture {
using Base = T;
public:
BrowserFuzzTest() = default;
void RunTestOnMainThread() override { std::move(run_fuzz_test_)(); }
void FuzzTestRunner(absl::AnyInvocable<void() &&> run_test) override {
run_fuzz_test_ = std::move(run_test);
SetUp();
TearDown();
}
void SetUp() override {
base::test::ScopedRunLoopTimeout scoped_timeout(FROM_HERE,
base::TimeDelta::Max());
Base::SetUp();
}
void TearDown() override { Base::TearDown(); }
void TestBody() override {}
private:
absl::AnyInvocable<void() &&> run_fuzz_test_;
};
#endif