Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "content/browser/child_process_launcher.h" | 5 #include "content/browser/child_process_launcher.h" |
| 6 | 6 |
| 7 #include <utility> // For std::pair. | 7 #include <utility> // For std::pair. |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
| 12 #include "base/synchronization/lock.h" | 12 #include "base/synchronization/lock.h" |
| 13 #include "base/threading/thread.h" | 13 #include "base/threading/thread.h" |
| 14 #include "build/build_config.h" | |
|
darin (slow to review)
2011/05/27 17:37:46
nit: this header is already included for you by ot
| |
| 14 #include "chrome/common/chrome_switches.h" | 15 #include "chrome/common/chrome_switches.h" |
| 15 #include "content/browser/browser_thread.h" | 16 #include "content/browser/browser_thread.h" |
| 16 #include "content/browser/content_browser_client.h" | 17 #include "content/browser/content_browser_client.h" |
| 17 #include "content/common/chrome_descriptors.h" | 18 #include "content/common/chrome_descriptors.h" |
| 18 #include "content/common/process_watcher.h" | 19 #include "content/common/process_watcher.h" |
| 19 #include "content/common/result_codes.h" | 20 #include "content/common/result_codes.h" |
| 20 | 21 |
| 21 #if defined(OS_WIN) | 22 #if defined(OS_WIN) |
| 22 #include "base/file_path.h" | 23 #include "base/file_path.h" |
| 23 #include "chrome/common/sandbox_policy.h" | 24 #include "chrome/common/sandbox_policy.h" |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 229 #endif | 230 #endif |
| 230 process_.handle())); | 231 process_.handle())); |
| 231 process_.set_handle(base::kNullProcessHandle); | 232 process_.set_handle(base::kNullProcessHandle); |
| 232 } | 233 } |
| 233 | 234 |
| 234 void SetProcessBackgrounded(bool background) { | 235 void SetProcessBackgrounded(bool background) { |
| 235 DCHECK(!starting_); | 236 DCHECK(!starting_); |
| 236 process_.SetProcessBackgrounded(background); | 237 process_.SetProcessBackgrounded(background); |
| 237 } | 238 } |
| 238 | 239 |
| 240 // TODO(apatrick): Remove this ASAP. http://crbog.com/81449 shows that this is | |
| 241 // called before later calling null. Disable optimization to try and get more | |
| 242 // information about what happened here. | |
| 243 #if defined(OS_WIN) | |
| 244 #pragma optimize("", off) | |
| 245 #endif | |
| 246 | |
| 239 static void TerminateInternal( | 247 static void TerminateInternal( |
| 240 #if defined(OS_LINUX) | 248 #if defined(OS_LINUX) |
| 241 bool zygote, | 249 bool zygote, |
| 242 #endif | 250 #endif |
| 243 base::ProcessHandle handle) { | 251 base::ProcessHandle handle) { |
| 244 base::Process process(handle); | 252 base::Process process(handle); |
| 245 // Client has gone away, so just kill the process. Using exit code 0 | 253 // Client has gone away, so just kill the process. Using exit code 0 |
| 246 // means that UMA won't treat this as a crash. | 254 // means that UMA won't treat this as a crash. |
| 247 process.Terminate(ResultCodes::NORMAL_EXIT); | 255 process.Terminate(ResultCodes::NORMAL_EXIT); |
| 248 // On POSIX, we must additionally reap the child. | 256 // On POSIX, we must additionally reap the child. |
| 249 #if defined(OS_POSIX) | 257 #if defined(OS_POSIX) |
| 250 #if defined(OS_LINUX) | 258 #if defined(OS_LINUX) |
| 251 if (zygote) { | 259 if (zygote) { |
| 252 // If the renderer was created via a zygote, we have to proxy the reaping | 260 // If the renderer was created via a zygote, we have to proxy the reaping |
| 253 // through the zygote process. | 261 // through the zygote process. |
| 254 ZygoteHost::GetInstance()->EnsureProcessTerminated(handle); | 262 ZygoteHost::GetInstance()->EnsureProcessTerminated(handle); |
| 255 } else | 263 } else |
| 256 #endif // OS_LINUX | 264 #endif // OS_LINUX |
| 257 { | 265 { |
| 258 ProcessWatcher::EnsureProcessTerminated(handle); | 266 ProcessWatcher::EnsureProcessTerminated(handle); |
| 259 } | 267 } |
| 260 #endif // OS_POSIX | 268 #endif // OS_POSIX |
| 261 process.Close(); | 269 process.Close(); |
| 262 } | 270 } |
| 263 | 271 |
| 272 #if defined(OS_WIN) | |
| 273 #pragma optimize("", on) | |
| 274 #endif | |
| 275 | |
| 264 Client* client_; | 276 Client* client_; |
| 265 BrowserThread::ID client_thread_id_; | 277 BrowserThread::ID client_thread_id_; |
| 266 base::Process process_; | 278 base::Process process_; |
| 267 bool starting_; | 279 bool starting_; |
| 268 // Controls whether the child process should be terminated on browser | 280 // Controls whether the child process should be terminated on browser |
| 269 // shutdown. Default behavior is to terminate the child. | 281 // shutdown. Default behavior is to terminate the child. |
| 270 bool terminate_child_on_shutdown_; | 282 bool terminate_child_on_shutdown_; |
| 271 | 283 |
| 272 #if defined(OS_LINUX) | 284 #if defined(OS_LINUX) |
| 273 bool zygote_; | 285 bool zygote_; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 344 &ChildProcessLauncher::Context::SetProcessBackgrounded, | 356 &ChildProcessLauncher::Context::SetProcessBackgrounded, |
| 345 background)); | 357 background)); |
| 346 } | 358 } |
| 347 | 359 |
| 348 void ChildProcessLauncher::SetTerminateChildOnShutdown( | 360 void ChildProcessLauncher::SetTerminateChildOnShutdown( |
| 349 bool terminate_on_shutdown) { | 361 bool terminate_on_shutdown) { |
| 350 if (context_) | 362 if (context_) |
| 351 context_->set_terminate_child_on_shutdown(terminate_on_shutdown); | 363 context_->set_terminate_child_on_shutdown(terminate_on_shutdown); |
| 352 } | 364 } |
| 353 | 365 |
| OLD | NEW |