#include "content/shell/app/shell_main_delegate.h"
#include <iostream>
#include <tuple>
#include <utility>
#include "base/base_paths.h"
#include "base/base_switches.h"
#include "base/command_line.h"
#include "base/cpu.h"
#include "base/files/file.h"
#include "base/files/file_path.h"
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/path_service.h"
#include "base/process/current_process.h"
#include "base/trace_event/trace_log.h"
#include "build/build_config.h"
#include "components/crash/core/common/crash_key.h"
#include "components/memory_system/initializer.h"
#include "components/memory_system/parameters.h"
#include "content/common/content_constants_internal.h"
#include "content/public/app/initialize_mojo_core.h"
#include "content/public/browser/browser_main_runner.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/main_function_params.h"
#include "content/public/common/url_constants.h"
#include "content/shell/app/shell_crash_reporter_client.h"
#include "content/shell/browser/shell_content_browser_client.h"
#include "content/shell/browser/shell_paths.h"
#include "content/shell/common/shell_content_client.h"
#include "content/shell/common/shell_switches.h"
#include "content/shell/gpu/shell_content_gpu_client.h"
#include "content/shell/renderer/shell_content_renderer_client.h"
#include "content/shell/utility/shell_content_utility_client.h"
#include "ipc/ipc_buildflags.h"
#include "net/cookies/cookie_monster.h"
#include "third_party/abseil-cpp/absl/types/variant.h"
#include "ui/base/resource/resource_bundle.h"
#if BUILDFLAG(IPC_MESSAGE_LOG_ENABLED)
#define IPC_MESSAGE_MACROS_LOG_ENABLED
#include "content/public/common/content_ipc_logging.h"
#define IPC_LOG_TABLE_ADD_ENTRY(msg_id, logger) …
#endif
#if !BUILDFLAG(IS_ANDROID)
#include "content/web_test/browser/web_test_browser_main_runner.h"
#include "content/web_test/browser/web_test_content_browser_client.h"
#include "content/web_test/renderer/web_test_content_renderer_client.h"
#endif
#if BUILDFLAG(IS_ANDROID)
#include "base/android/apk_assets.h"
#include "base/posix/global_descriptors.h"
#include "content/public/browser/android/compositor.h"
#include "content/shell/android/shell_descriptors.h"
#endif
#if !BUILDFLAG(IS_FUCHSIA)
#include "components/crash/core/app/crashpad.h"
#endif
#if BUILDFLAG(IS_APPLE)
#include "content/shell/app/paths_mac.h"
#endif
#if BUILDFLAG(IS_MAC)
#include "content/shell/app/shell_main_delegate_mac.h"
#endif
#if BUILDFLAG(IS_WIN)
#include <initguid.h>
#include <windows.h>
#include "base/logging_win.h"
#include "base/win/scoped_handle.h"
#include "base/win/win_util.h"
#include "content/shell/common/v8_crashpad_support_win.h"
#endif
#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_MAC) && !BUILDFLAG(IS_ANDROID)
#include "v8/include/v8-wasm-trap-handler-posix.h"
#endif
#if BUILDFLAG(IS_IOS)
#include "content/shell/app/ios/shell_application_ios.h"
#endif
namespace {
enum class LoggingDest { … };
#if !BUILDFLAG(IS_FUCHSIA)
base::LazyInstance<content::ShellCrashReporterClient>::Leaky
g_shell_crash_client = LAZY_INSTANCE_INITIALIZER;
#endif
#if BUILDFLAG(IS_WIN)
const GUID kContentShellProviderName = {
0x6a3e50a4, 0x7e15, 0x4099,
{ 0x84, 0x13, 0xec, 0x94, 0xd8, 0xc2, 0xa4, 0xb6 } };
#endif
void InitLogging(const base::CommandLine& command_line) { … }
}
namespace content {
ShellMainDelegate::ShellMainDelegate(bool is_content_browsertests)
: … { … }
ShellMainDelegate::~ShellMainDelegate() { … }
std::optional<int> ShellMainDelegate::BasicStartupComplete() { … }
bool ShellMainDelegate::ShouldCreateFeatureList(InvokedIn invoked_in) { … }
bool ShellMainDelegate::ShouldInitializeMojo(InvokedIn invoked_in) { … }
void ShellMainDelegate::PreSandboxStartup() { … }
absl::variant<int, MainFunctionParams> ShellMainDelegate::RunProcess(
const std::string& process_type,
MainFunctionParams main_function_params) { … }
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
void ShellMainDelegate::ZygoteForked() { … }
#endif
void ShellMainDelegate::InitializeResourceBundle() { … }
std::optional<int> ShellMainDelegate::PreBrowserMain() { … }
std::optional<int> ShellMainDelegate::PostEarlyInitialization(
InvokedIn invoked_in) { … }
ContentClient* ShellMainDelegate::CreateContentClient() { … }
ContentBrowserClient* ShellMainDelegate::CreateContentBrowserClient() { … }
ContentGpuClient* ShellMainDelegate::CreateContentGpuClient() { … }
ContentRendererClient* ShellMainDelegate::CreateContentRendererClient() { … }
ContentUtilityClient* ShellMainDelegate::CreateContentUtilityClient() { … }
}