Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4647)

Unified Diff: chrome/browser/browser_child_process_host.cc

Issue 6538100: Move core pieces of chrome\browser. I've only gone up to "g", will do the re... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: take out extra stuff from content_browser.gypi Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/browser_child_process_host.h ('k') | chrome/browser/browser_message_filter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/browser_child_process_host.cc
===================================================================
--- chrome/browser/browser_child_process_host.cc (revision 75626)
+++ chrome/browser/browser_child_process_host.cc (working copy)
@@ -1,249 +0,0 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/browser_child_process_host.h"
-
-#include "base/command_line.h"
-#include "base/file_path.h"
-#include "base/lazy_instance.h"
-#include "base/logging.h"
-#include "base/metrics/histogram.h"
-#include "base/path_service.h"
-#include "base/process_util.h"
-#include "base/stl_util-inl.h"
-#include "base/string_util.h"
-#include "chrome/app/breakpad_mac.h"
-#include "chrome/browser/browser_thread.h"
-#include "chrome/common/child_process_logging.h"
-#include "chrome/common/chrome_constants.h"
-#include "chrome/common/chrome_paths_internal.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/common/notification_service.h"
-#include "chrome/common/plugin_messages.h"
-#include "chrome/common/process_watcher.h"
-#include "chrome/common/result_codes.h"
-#include "chrome/installer/util/google_update_settings.h"
-
-#if defined(OS_LINUX)
-#include "base/linux_util.h"
-#endif // OS_LINUX
-
-namespace {
-
-typedef std::list<BrowserChildProcessHost*> ChildProcessList;
-static base::LazyInstance<ChildProcessList> g_child_process_list(
- base::LINKER_INITIALIZED);
-
-// The NotificationTask is used to notify about plugin process connection/
-// disconnection. It is needed because the notifications in the
-// NotificationService must happen in the main thread.
-class ChildNotificationTask : public Task {
- public:
- ChildNotificationTask(
- NotificationType notification_type, ChildProcessInfo* info)
- : notification_type_(notification_type), info_(*info) { }
-
- virtual void Run() {
- NotificationService::current()->
- Notify(notification_type_, NotificationService::AllSources(),
- Details<ChildProcessInfo>(&info_));
- }
-
- private:
- NotificationType notification_type_;
- ChildProcessInfo info_;
-};
-
-} // namespace
-
-
-BrowserChildProcessHost::BrowserChildProcessHost(
- ChildProcessInfo::ProcessType type,
- ResourceDispatcherHost* resource_dispatcher_host,
- ResourceMessageFilter::URLRequestContextOverride*
- url_request_context_override)
- : ChildProcessInfo(type, -1),
- ALLOW_THIS_IN_INITIALIZER_LIST(client_(this)),
- resource_dispatcher_host_(resource_dispatcher_host) {
- Initialize(url_request_context_override);
-}
-
-BrowserChildProcessHost::BrowserChildProcessHost(
- ChildProcessInfo::ProcessType type,
- ResourceDispatcherHost* resource_dispatcher_host)
- : ChildProcessInfo(type, -1),
- ALLOW_THIS_IN_INITIALIZER_LIST(client_(this)),
- resource_dispatcher_host_(resource_dispatcher_host) {
- Initialize(NULL);
-}
-
-void BrowserChildProcessHost::Initialize(
- ResourceMessageFilter::URLRequestContextOverride*
- url_request_context_override) {
- if (resource_dispatcher_host_) {
- ResourceMessageFilter* resource_message_filter = new ResourceMessageFilter(
- id(), type(), resource_dispatcher_host_);
- if (url_request_context_override) {
- resource_message_filter->set_url_request_context_override(
- url_request_context_override);
- }
- AddFilter(resource_message_filter);
- }
-
- g_child_process_list.Get().push_back(this);
-}
-
-BrowserChildProcessHost::~BrowserChildProcessHost() {
- g_child_process_list.Get().remove(this);
-}
-
-// static
-void BrowserChildProcessHost::SetCrashReporterCommandLine(
- CommandLine* command_line) {
-#if defined(USE_LINUX_BREAKPAD)
- if (IsCrashReporterEnabled()) {
- command_line->AppendSwitchASCII(switches::kEnableCrashReporter,
- child_process_logging::GetClientId() + "," + base::GetLinuxDistro());
- }
-#elif defined(OS_MACOSX)
- if (IsCrashReporterEnabled()) {
- command_line->AppendSwitchASCII(switches::kEnableCrashReporter,
- child_process_logging::GetClientId());
- }
-#endif // OS_MACOSX
-}
-
-// static
-void BrowserChildProcessHost::TerminateAll() {
- // Make a copy since the ChildProcessHost dtor mutates the original list.
- ChildProcessList copy = g_child_process_list.Get();
- STLDeleteElements(&copy);
-}
-
-void BrowserChildProcessHost::Launch(
-#if defined(OS_WIN)
- const FilePath& exposed_dir,
-#elif defined(OS_POSIX)
- bool use_zygote,
- const base::environment_vector& environ,
-#endif
- CommandLine* cmd_line) {
- child_process_.reset(new ChildProcessLauncher(
-#if defined(OS_WIN)
- exposed_dir,
-#elif defined(OS_POSIX)
- use_zygote,
- environ,
- channel()->GetClientFileDescriptor(),
-#endif
- cmd_line,
- &client_));
-}
-
-base::ProcessHandle BrowserChildProcessHost::GetChildProcessHandle() const {
- DCHECK(child_process_.get())
- << "Requesting a child process handle before launching.";
- DCHECK(child_process_->GetHandle())
- << "Requesting a child process handle before launch has completed OK.";
- return child_process_->GetHandle();
-}
-
-void BrowserChildProcessHost::ForceShutdown() {
- g_child_process_list.Get().remove(this);
- ChildProcessHost::ForceShutdown();
-}
-
-void BrowserChildProcessHost::Notify(NotificationType type) {
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE, new ChildNotificationTask(type, this));
-}
-
-base::TerminationStatus BrowserChildProcessHost::GetChildTerminationStatus(
- int* exit_code) {
- return child_process_->GetChildTerminationStatus(exit_code);
-}
-
-void BrowserChildProcessHost::OnChildDied() {
- if (handle() != base::kNullProcessHandle) {
- int exit_code;
- base::TerminationStatus status = GetChildTerminationStatus(&exit_code);
- switch (status) {
- case base::TERMINATION_STATUS_PROCESS_CRASHED: {
- OnProcessCrashed(exit_code);
-
- // Report that this child process crashed.
- Notify(NotificationType::CHILD_PROCESS_CRASHED);
- UMA_HISTOGRAM_COUNTS("ChildProcess.Crashes", this->type());
- break;
- }
- case base::TERMINATION_STATUS_PROCESS_WAS_KILLED: {
- OnProcessWasKilled(exit_code);
-
- // Report that this child process was killed.
- Notify(NotificationType::CHILD_PROCESS_WAS_KILLED);
- UMA_HISTOGRAM_COUNTS("ChildProcess.Kills", this->type());
- break;
- }
- default:
- break;
- }
- // Notify in the main loop of the disconnection.
- Notify(NotificationType::CHILD_PROCESS_HOST_DISCONNECTED);
- }
- ChildProcessHost::OnChildDied();
-}
-
-void BrowserChildProcessHost::ShutdownStarted() {
- // Must remove the process from the list now, in case it gets used for a
- // new instance before our watcher tells us that the process terminated.
- g_child_process_list.Get().remove(this);
-}
-
-BrowserChildProcessHost::ClientHook::ClientHook(BrowserChildProcessHost* host)
- : host_(host) {
-}
-
-void BrowserChildProcessHost::ClientHook::OnProcessLaunched() {
- if (!host_->child_process_->GetHandle()) {
- host_->OnChildDied();
- return;
- }
- host_->set_handle(host_->child_process_->GetHandle());
- host_->OnProcessLaunched();
-}
-
-BrowserChildProcessHost::Iterator::Iterator()
- : all_(true), type_(UNKNOWN_PROCESS) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)) <<
- "ChildProcessInfo::Iterator must be used on the IO thread.";
- iterator_ = g_child_process_list.Get().begin();
-}
-
-BrowserChildProcessHost::Iterator::Iterator(ChildProcessInfo::ProcessType type)
- : all_(false), type_(type) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)) <<
- "ChildProcessInfo::Iterator must be used on the IO thread.";
- iterator_ = g_child_process_list.Get().begin();
- if (!Done() && (*iterator_)->type() != type_)
- ++(*this);
-}
-
-BrowserChildProcessHost* BrowserChildProcessHost::Iterator::operator++() {
- do {
- ++iterator_;
- if (Done())
- break;
-
- if (!all_ && (*iterator_)->type() != type_)
- continue;
-
- return *iterator_;
- } while (true);
-
- return NULL;
-}
-
-bool BrowserChildProcessHost::Iterator::Done() {
- return iterator_ == g_child_process_list.Get().end();
-}
« no previous file with comments | « chrome/browser/browser_child_process_host.h ('k') | chrome/browser/browser_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698