| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/child/child_thread_impl.h" | 5 #include "content/child/child_thread_impl.h" |
| 6 | 6 |
| 7 #include <signal.h> | 7 #include <signal.h> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 channel_->Init( | 407 channel_->Init( |
| 408 IPC::ChannelMojo::CreateClientFactory( | 408 IPC::ChannelMojo::CreateClientFactory( |
| 409 std::move(handle), ChildProcess::current()->io_task_runner()), | 409 std::move(handle), ChildProcess::current()->io_task_runner()), |
| 410 true /* create_pipe_now */); | 410 true /* create_pipe_now */); |
| 411 } | 411 } |
| 412 | 412 |
| 413 void ChildThreadImpl::Init(const Options& options) { | 413 void ChildThreadImpl::Init(const Options& options) { |
| 414 g_lazy_tls.Pointer()->Set(this); | 414 g_lazy_tls.Pointer()->Set(this); |
| 415 on_channel_error_called_ = false; | 415 on_channel_error_called_ = false; |
| 416 message_loop_ = base::MessageLoop::current(); | 416 message_loop_ = base::MessageLoop::current(); |
| 417 #ifdef IPC_MESSAGE_LOG_ENABLED | 417 #if BUILDFLAG(IPC_MESSAGE_LOG_ENABLED) |
| 418 // We must make sure to instantiate the IPC Logger *before* we create the | 418 // We must make sure to instantiate the IPC Logger *before* we create the |
| 419 // channel, otherwise we can get a callback on the IO thread which creates | 419 // channel, otherwise we can get a callback on the IO thread which creates |
| 420 // the logger, and the logger does not like being created on the IO thread. | 420 // the logger, and the logger does not like being created on the IO thread. |
| 421 IPC::Logging::GetInstance(); | 421 IPC::Logging::GetInstance(); |
| 422 #endif | 422 #endif |
| 423 | 423 |
| 424 channel_ = | 424 channel_ = |
| 425 IPC::SyncChannel::Create(this, ChildProcess::current()->io_task_runner(), | 425 IPC::SyncChannel::Create(this, ChildProcess::current()->io_task_runner(), |
| 426 ChildProcess::current()->GetShutDownEvent()); | 426 ChildProcess::current()->GetShutDownEvent()); |
| 427 #ifdef IPC_MESSAGE_LOG_ENABLED | 427 #if BUILDFLAG(IPC_MESSAGE_LOG_ENABLED) |
| 428 if (!IsInBrowserProcess()) | 428 if (!IsInBrowserProcess()) |
| 429 IPC::Logging::GetInstance()->SetIPCSender(this); | 429 IPC::Logging::GetInstance()->SetIPCSender(this); |
| 430 #endif | 430 #endif |
| 431 | 431 |
| 432 if (!IsInBrowserProcess()) { | 432 if (!IsInBrowserProcess()) { |
| 433 // Don't double-initialize IPC support in single-process mode. | 433 // Don't double-initialize IPC support in single-process mode. |
| 434 mojo_ipc_support_.reset(new mojo::edk::ScopedIPCSupport( | 434 mojo_ipc_support_.reset(new mojo::edk::ScopedIPCSupport( |
| 435 GetIOTaskRunner(), mojo::edk::ScopedIPCSupport::ShutdownPolicy::FAST)); | 435 GetIOTaskRunner(), mojo::edk::ScopedIPCSupport::ShutdownPolicy::FAST)); |
| 436 InitializeMojoIPCChannel(); | 436 InitializeMojoIPCChannel(); |
| 437 } | 437 } |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 563 FROM_HERE, base::Bind(&ChildThreadImpl::EnsureConnected, | 563 FROM_HERE, base::Bind(&ChildThreadImpl::EnsureConnected, |
| 564 channel_connected_factory_->GetWeakPtr()), | 564 channel_connected_factory_->GetWeakPtr()), |
| 565 base::TimeDelta::FromSeconds(connection_timeout)); | 565 base::TimeDelta::FromSeconds(connection_timeout)); |
| 566 | 566 |
| 567 #if defined(OS_ANDROID) | 567 #if defined(OS_ANDROID) |
| 568 g_quit_closure.Get().BindToMainThread(); | 568 g_quit_closure.Get().BindToMainThread(); |
| 569 #endif | 569 #endif |
| 570 } | 570 } |
| 571 | 571 |
| 572 ChildThreadImpl::~ChildThreadImpl() { | 572 ChildThreadImpl::~ChildThreadImpl() { |
| 573 #ifdef IPC_MESSAGE_LOG_ENABLED | 573 #if BUILDFLAG(IPC_MESSAGE_LOG_ENABLED) |
| 574 IPC::Logging::GetInstance()->SetIPCSender(NULL); | 574 IPC::Logging::GetInstance()->SetIPCSender(NULL); |
| 575 #endif | 575 #endif |
| 576 | 576 |
| 577 channel_->RemoveFilter(histogram_message_filter_.get()); | 577 channel_->RemoveFilter(histogram_message_filter_.get()); |
| 578 channel_->RemoveFilter(sync_message_filter_.get()); | 578 channel_->RemoveFilter(sync_message_filter_.get()); |
| 579 | 579 |
| 580 // The ChannelProxy object caches a pointer to the IPC thread, so need to | 580 // The ChannelProxy object caches a pointer to the IPC thread, so need to |
| 581 // reset it as it's not guaranteed to outlive this object. | 581 // reset it as it's not guaranteed to outlive this object. |
| 582 // NOTE: this also has the side-effect of not closing the main IPC channel to | 582 // NOTE: this also has the side-effect of not closing the main IPC channel to |
| 583 // the browser process. This is needed because this is the signal that the | 583 // the browser process. This is needed because this is the signal that the |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 bool ChildThreadImpl::OnMessageReceived(const IPC::Message& msg) { | 713 bool ChildThreadImpl::OnMessageReceived(const IPC::Message& msg) { |
| 714 // Resource responses are sent to the resource dispatcher. | 714 // Resource responses are sent to the resource dispatcher. |
| 715 if (resource_dispatcher_->OnMessageReceived(msg)) | 715 if (resource_dispatcher_->OnMessageReceived(msg)) |
| 716 return true; | 716 return true; |
| 717 if (file_system_dispatcher_->OnMessageReceived(msg)) | 717 if (file_system_dispatcher_->OnMessageReceived(msg)) |
| 718 return true; | 718 return true; |
| 719 | 719 |
| 720 bool handled = true; | 720 bool handled = true; |
| 721 IPC_BEGIN_MESSAGE_MAP(ChildThreadImpl, msg) | 721 IPC_BEGIN_MESSAGE_MAP(ChildThreadImpl, msg) |
| 722 IPC_MESSAGE_HANDLER(ChildProcessMsg_Shutdown, OnShutdown) | 722 IPC_MESSAGE_HANDLER(ChildProcessMsg_Shutdown, OnShutdown) |
| 723 #if defined(IPC_MESSAGE_LOG_ENABLED) | 723 #if BUILDFLAG(IPC_MESSAGE_LOG_ENABLED) |
| 724 IPC_MESSAGE_HANDLER(ChildProcessMsg_SetIPCLoggingEnabled, | 724 IPC_MESSAGE_HANDLER(ChildProcessMsg_SetIPCLoggingEnabled, |
| 725 OnSetIPCLoggingEnabled) | 725 OnSetIPCLoggingEnabled) |
| 726 #endif | 726 #endif |
| 727 IPC_MESSAGE_HANDLER(ChildProcessMsg_SetProfilerStatus, | 727 IPC_MESSAGE_HANDLER(ChildProcessMsg_SetProfilerStatus, |
| 728 OnSetProfilerStatus) | 728 OnSetProfilerStatus) |
| 729 IPC_MESSAGE_HANDLER(ChildProcessMsg_GetChildProfilerData, | 729 IPC_MESSAGE_HANDLER(ChildProcessMsg_GetChildProfilerData, |
| 730 OnGetChildProfilerData) | 730 OnGetChildProfilerData) |
| 731 IPC_MESSAGE_HANDLER(ChildProcessMsg_ProfilingPhaseCompleted, | 731 IPC_MESSAGE_HANDLER(ChildProcessMsg_ProfilingPhaseCompleted, |
| 732 OnProfilingPhaseCompleted) | 732 OnProfilingPhaseCompleted) |
| 733 IPC_MESSAGE_HANDLER(ChildProcessMsg_SetProcessBackgrounded, | 733 IPC_MESSAGE_HANDLER(ChildProcessMsg_SetProcessBackgrounded, |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 784 | 784 |
| 785 void ChildThreadImpl::OnProcessPurgeAndSuspend() { | 785 void ChildThreadImpl::OnProcessPurgeAndSuspend() { |
| 786 } | 786 } |
| 787 | 787 |
| 788 void ChildThreadImpl::OnProcessResume() {} | 788 void ChildThreadImpl::OnProcessResume() {} |
| 789 | 789 |
| 790 void ChildThreadImpl::OnShutdown() { | 790 void ChildThreadImpl::OnShutdown() { |
| 791 base::MessageLoop::current()->QuitWhenIdle(); | 791 base::MessageLoop::current()->QuitWhenIdle(); |
| 792 } | 792 } |
| 793 | 793 |
| 794 #if defined(IPC_MESSAGE_LOG_ENABLED) | 794 #if BUILDFLAG(IPC_MESSAGE_LOG_ENABLED) |
| 795 void ChildThreadImpl::OnSetIPCLoggingEnabled(bool enable) { | 795 void ChildThreadImpl::OnSetIPCLoggingEnabled(bool enable) { |
| 796 if (enable) | 796 if (enable) |
| 797 IPC::Logging::GetInstance()->Enable(); | 797 IPC::Logging::GetInstance()->Enable(); |
| 798 else | 798 else |
| 799 IPC::Logging::GetInstance()->Disable(); | 799 IPC::Logging::GetInstance()->Disable(); |
| 800 } | 800 } |
| 801 #endif // IPC_MESSAGE_LOG_ENABLED | 801 #endif // IPC_MESSAGE_LOG_ENABLED |
| 802 | 802 |
| 803 void ChildThreadImpl::OnSetProfilerStatus(ThreadData::Status status) { | 803 void ChildThreadImpl::OnSetProfilerStatus(ThreadData::Status status) { |
| 804 ThreadData::InitializeAndSetTrackingStatus(status); | 804 ThreadData::InitializeAndSetTrackingStatus(status); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 875 connected_to_browser_ = true; | 875 connected_to_browser_ = true; |
| 876 child_info_ = local_info; | 876 child_info_ = local_info; |
| 877 browser_info_ = remote_info; | 877 browser_info_ = remote_info; |
| 878 } | 878 } |
| 879 | 879 |
| 880 bool ChildThreadImpl::IsInBrowserProcess() const { | 880 bool ChildThreadImpl::IsInBrowserProcess() const { |
| 881 return static_cast<bool>(browser_process_io_runner_); | 881 return static_cast<bool>(browser_process_io_runner_); |
| 882 } | 882 } |
| 883 | 883 |
| 884 } // namespace content | 884 } // namespace content |
| OLD | NEW |