blob: 3b02c735eb17f924adbbaeb795097ae22de3756a [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "build/build_config.h"
#include "content/public/app/content_main.h"
#include "content/shell/app/shell_main_delegate.h"
#if BUILDFLAG(IS_WIN)
#include "base/win/dark_mode_support.h"
#include "base/win/win_util.h"
#include "content/public/app/sandbox_helper_win.h"
#include "sandbox/win/src/sandbox_types.h"
#endif
#if BUILDFLAG(IS_IOS)
#include "base/at_exit.h" // nogncheck
#include "base/command_line.h" // nogncheck
#include "build/ios_buildflags.h" // nogncheck
#include "content/public/common/content_switches.h" // nogncheck
#include "content/shell/app/ios/shell_application_ios.h"
#include "content/shell/app/ios/web_tests_support_ios.h"
#include "content/shell/common/shell_switches.h"
#endif
#if BUILDFLAG(IS_WIN)
#if !defined(WIN_CONSOLE_APP)
int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t*, int) {
#else
int main() {
HINSTANCE instance = GetModuleHandle(NULL);
#endif
// Load and pin user32.dll and uxtheme.dll to avoid having to load them once
// tests start while on the main thread loop where blocking calls are
// disallowed. This will also ensure the Windows dark mode support is enabled
// for the app if available.
base::win::PinUser32();
base::win::AllowDarkModeForApp(true);
sandbox::SandboxInterfaceInfo sandbox_info = {nullptr};
content::InitializeSandboxInfo(&sandbox_info);
content::ShellMainDelegate delegate;
content::ContentMainParams params(&delegate);
params.instance = instance;
params.sandbox_info = &sandbox_info;
return content::ContentMain(std::move(params));
}
#elif BUILDFLAG(IS_IOS)
#define IOS_INIT_EXPORT __attribute__((visibility("default")))
extern "C" IOS_INIT_EXPORT int ChildProcessMain(int argc, const char** argv) {
// Create this here since it's needed to start the crash handler.
base::AtExitManager at_exit;
base::CommandLine::Init(argc, argv);
content::ShellMainDelegate delegate;
content::ContentMainParams params(&delegate);
params.argc = argc;
params.argv = argv;
return content::ContentMain(std::move(params));
}
extern "C" IOS_INIT_EXPORT int ContentAppMain(int argc, const char** argv) {
// Create this here since it's needed to start the crash handler.
base::AtExitManager at_exit;
// Check if this is the browser process or a subprocess. Only the browser
// browser should run UIApplicationMain.
base::CommandLine::Init(argc, argv);
auto type = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
switches::kProcessType);
// The browser process has no --process-type argument.
if (type.empty()) {
if (switches::IsRunWebTestsSwitchPresent()) {
// We create a simple UIApplication to run the web tests.
return RunWebTestsFromIOSApp(argc, argv);
} else {
// We will create the ContentMainRunner once the UIApplication is ready.
return RunShellApplication(argc, argv);
}
} else {
content::ShellMainDelegate delegate;
content::ContentMainParams params(&delegate);
params.argc = argc;
params.argv = argv;
return content::ContentMain(std::move(params));
}
}
#else
int main(int argc, const char** argv) {
content::ShellMainDelegate delegate;
content::ContentMainParams params(&delegate);
params.argc = argc;
params.argv = argv;
return content::ContentMain(std::move(params));
}
#endif // BUILDFLAG(IS_WIN)