1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "content/public/app/content_main.h"
6#include "content/shell/app/shell_main_delegate.h"
7
8#if defined(OS_WIN)
9#include "content/public/app/startup_helper_win.h"
10#include "sandbox/win/src/sandbox_types.h"
11#endif
12
13#if defined(OS_MACOSX)
14#include "content/shell/app/shell_content_main.h"
15#endif
16
17#if defined(OS_WIN)
18
19#if !defined(ADDRESS_SANITIZER)
20int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t*, int) {
21#else
22// The AddressSanitizer build should be a console program as it prints out stuff
23// on stderr.
24int main() {
25  HINSTANCE instance = GetModuleHandle(NULL);
26#endif
27  sandbox::SandboxInterfaceInfo sandbox_info = {0};
28  content::InitializeSandboxInfo(&sandbox_info);
29  content::ShellMainDelegate delegate;
30
31  content::ContentMainParams params(&delegate);
32  params.instance = instance;
33  params.sandbox_info = &sandbox_info;
34  return content::ContentMain(params);
35}
36
37#else
38
39int main(int argc, const char** argv) {
40#if defined(OS_MACOSX)
41  // Do the delegate work in shell_content_main to avoid having to export the
42  // delegate types.
43  return ::ContentMain(argc, argv);
44#else
45  content::ShellMainDelegate delegate;
46  content::ContentMainParams params(&delegate);
47  params.argc = argc;
48  params.argv = argv;
49  return content::ContentMain(params);
50#endif  // OS_MACOSX
51}
52
53#endif  // OS_POSIX
54