| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "headless/lib/headless_content_main_delegate.h" | 5 #include "headless/lib/headless_content_main_delegate.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/base_switches.h" | 9 #include "base/base_switches.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 #include "ui/ozone/public/ozone_switches.h" | 29 #include "ui/ozone/public/ozone_switches.h" |
| 30 | 30 |
| 31 #ifdef HEADLESS_USE_EMBEDDED_RESOURCES | 31 #ifdef HEADLESS_USE_EMBEDDED_RESOURCES |
| 32 #include "headless/embedded_resource_pak.h" | 32 #include "headless/embedded_resource_pak.h" |
| 33 #endif | 33 #endif |
| 34 | 34 |
| 35 #if !defined(CHROME_MULTIPLE_DLL_BROWSER) | 35 #if !defined(CHROME_MULTIPLE_DLL_BROWSER) |
| 36 #include "headless/lib/renderer/headless_content_renderer_client.h" | 36 #include "headless/lib/renderer/headless_content_renderer_client.h" |
| 37 #endif | 37 #endif |
| 38 | 38 |
| 39 #if defined(OS_MACOSX) |
| 40 #include "components/crash/content/app/crashpad.h" |
| 41 #endif |
| 42 |
| 39 namespace headless { | 43 namespace headless { |
| 40 namespace { | 44 namespace { |
| 41 // Keep in sync with content/common/content_constants_internal.h. | 45 // Keep in sync with content/common/content_constants_internal.h. |
| 42 // TODO(skyostil): Add a tracing test for this. | 46 // TODO(skyostil): Add a tracing test for this. |
| 43 const int kTraceEventBrowserProcessSortIndex = -6; | 47 const int kTraceEventBrowserProcessSortIndex = -6; |
| 44 | 48 |
| 45 HeadlessContentMainDelegate* g_current_headless_content_main_delegate = nullptr; | 49 HeadlessContentMainDelegate* g_current_headless_content_main_delegate = nullptr; |
| 46 | 50 |
| 47 base::LazyInstance<HeadlessCrashReporterClient>::Leaky g_headless_crash_client = | 51 base::LazyInstance<HeadlessCrashReporterClient>::Leaky g_headless_crash_client = |
| 48 LAZY_INSTANCE_INITIALIZER; | 52 LAZY_INSTANCE_INITIALIZER; |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 } | 159 } |
| 156 | 160 |
| 157 void HeadlessContentMainDelegate::InitCrashReporter( | 161 void HeadlessContentMainDelegate::InitCrashReporter( |
| 158 const base::CommandLine& command_line) { | 162 const base::CommandLine& command_line) { |
| 159 const std::string process_type = | 163 const std::string process_type = |
| 160 command_line.GetSwitchValueASCII(switches::kProcessType); | 164 command_line.GetSwitchValueASCII(switches::kProcessType); |
| 161 crash_reporter::SetCrashReporterClient(g_headless_crash_client.Pointer()); | 165 crash_reporter::SetCrashReporterClient(g_headless_crash_client.Pointer()); |
| 162 g_headless_crash_client.Pointer()->set_crash_dumps_dir( | 166 g_headless_crash_client.Pointer()->set_crash_dumps_dir( |
| 163 browser_->options()->crash_dumps_dir); | 167 browser_->options()->crash_dumps_dir); |
| 164 | 168 |
| 165 #if defined(OS_LINUX) | 169 #if defined(HEADLESS_USE_BREAKPAD) |
| 166 if (!browser_->options()->enable_crash_reporter) { | 170 if (!browser_->options()->enable_crash_reporter) { |
| 167 DCHECK(!breakpad::IsCrashReporterEnabled()); | 171 DCHECK(!breakpad::IsCrashReporterEnabled()); |
| 168 return; | 172 return; |
| 169 } | 173 } |
| 170 #if defined(HEADLESS_USE_BREAKPAD) | |
| 171 if (process_type != switches::kZygoteProcess) | 174 if (process_type != switches::kZygoteProcess) |
| 172 breakpad::InitCrashReporter(process_type); | 175 breakpad::InitCrashReporter(process_type); |
| 176 #elif defined(OS_MACOSX) |
| 177 const bool browser_process = process_type.empty(); |
| 178 crash_reporter::InitializeCrashpad(browser_process, process_type); |
| 173 #endif // defined(HEADLESS_USE_BREAKPAD) | 179 #endif // defined(HEADLESS_USE_BREAKPAD) |
| 174 #endif // !defined(OS_LINUX) | |
| 175 } | 180 } |
| 176 | 181 |
| 177 void HeadlessContentMainDelegate::PreSandboxStartup() { | 182 void HeadlessContentMainDelegate::PreSandboxStartup() { |
| 178 const base::CommandLine& command_line( | 183 const base::CommandLine& command_line( |
| 179 *base::CommandLine::ForCurrentProcess()); | 184 *base::CommandLine::ForCurrentProcess()); |
| 180 #if defined(OS_WIN) | 185 #if defined(OS_WIN) |
| 181 // Windows always needs to initialize logging, otherwise you get a renderer | 186 // Windows always needs to initialize logging, otherwise you get a renderer |
| 182 // crash. | 187 // crash. |
| 183 InitLogging(command_line); | 188 InitLogging(command_line); |
| 184 #else | 189 #else |
| 185 if (command_line.HasSwitch(switches::kEnableLogging)) | 190 if (command_line.HasSwitch(switches::kEnableLogging)) |
| 186 InitLogging(command_line); | 191 InitLogging(command_line); |
| 187 #endif | 192 #endif // defined(OS_WIN) |
| 188 #if !defined(OS_MACOSX) | |
| 189 InitCrashReporter(command_line); | 193 InitCrashReporter(command_line); |
| 190 #endif | |
| 191 InitializeResourceBundle(); | 194 InitializeResourceBundle(); |
| 192 } | 195 } |
| 193 | 196 |
| 194 int HeadlessContentMainDelegate::RunProcess( | 197 int HeadlessContentMainDelegate::RunProcess( |
| 195 const std::string& process_type, | 198 const std::string& process_type, |
| 196 const content::MainFunctionParams& main_function_params) { | 199 const content::MainFunctionParams& main_function_params) { |
| 197 if (!process_type.empty()) | 200 if (!process_type.empty()) |
| 198 return -1; | 201 return -1; |
| 199 | 202 |
| 200 base::trace_event::TraceLog::GetInstance()->SetProcessName("HeadlessBrowser"); | 203 base::trace_event::TraceLog::GetInstance()->SetProcessName("HeadlessBrowser"); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 HeadlessContentMainDelegate::CreateContentRendererClient() { | 291 HeadlessContentMainDelegate::CreateContentRendererClient() { |
| 289 #if defined(CHROME_MULTIPLE_DLL_BROWSER) | 292 #if defined(CHROME_MULTIPLE_DLL_BROWSER) |
| 290 return nullptr; | 293 return nullptr; |
| 291 #else | 294 #else |
| 292 renderer_client_ = base::MakeUnique<HeadlessContentRendererClient>(); | 295 renderer_client_ = base::MakeUnique<HeadlessContentRendererClient>(); |
| 293 return renderer_client_.get(); | 296 return renderer_client_.get(); |
| 294 #endif | 297 #endif |
| 295 } | 298 } |
| 296 | 299 |
| 297 } // namespace headless | 300 } // namespace headless |
| OLD | NEW |