#ifndef CONTENT_UTILITY_UTILITY_THREAD_IMPL_H_
#define CONTENT_UTILITY_UTILITY_THREAD_IMPL_H_
#include <memory>
#include "base/functional/callback.h"
#include "base/process/current_process.h"
#include "base/strings/pattern.h"
#include "build/build_config.h"
#include "content/child/child_thread_impl.h"
#include "content/public/utility/utility_thread.h"
#include "mojo/public/cpp/bindings/generic_pending_receiver.h"
#include "third_party/blink/public/platform/platform.h"
namespace mojo {
class ServiceFactory;
}
namespace content {
class UtilityThreadImpl : public UtilityThread,
public ChildThreadImpl {
public:
explicit UtilityThreadImpl(base::RepeatingClosure quit_closure);
explicit UtilityThreadImpl(const InProcessChildThreadParams& params);
UtilityThreadImpl(const UtilityThreadImpl&) = delete;
UtilityThreadImpl& operator=(const UtilityThreadImpl&) = delete;
~UtilityThreadImpl() override;
void Shutdown() override;
void ReleaseProcess() override;
void EnsureBlinkInitialized() override;
#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID)
void EnsureBlinkInitializedWithSandboxSupport() override;
#endif
void HandleServiceRequest(mojo::GenericPendingReceiver receiver,
base::OnceClosure termination_callback);
private:
void EnsureBlinkInitializedInternal(bool sandbox_support);
void Init();
std::unique_ptr<blink::Platform> blink_platform_impl_;
std::unique_ptr<mojo::ServiceFactory> main_thread_services_;
};
using CurrentProcessType = base::CurrentProcessType;
struct ServiceCurrentProcessType {
const char* name;
CurrentProcessType type;
};
CurrentProcessType GetCurrentProcessType(const std::string& name);
}
#endif