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 | 8 |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
538 quota_dispatcher_.reset(); | 538 quota_dispatcher_.reset(); |
539 WebFileSystemImpl::DeleteThreadSpecificInstance(); | 539 WebFileSystemImpl::DeleteThreadSpecificInstance(); |
540 } | 540 } |
541 | 541 |
542 void ChildThreadImpl::OnChannelConnected(int32 peer_pid) { | 542 void ChildThreadImpl::OnChannelConnected(int32 peer_pid) { |
543 channel_connected_factory_.InvalidateWeakPtrs(); | 543 channel_connected_factory_.InvalidateWeakPtrs(); |
544 } | 544 } |
545 | 545 |
546 void ChildThreadImpl::OnChannelError() { | 546 void ChildThreadImpl::OnChannelError() { |
547 set_on_channel_error_called(true); | 547 set_on_channel_error_called(true); |
548 base::MessageLoop::current()->Quit(); | 548 base::MessageLoop::current()->QuitWhenIdle(); |
549 } | 549 } |
550 | 550 |
551 bool ChildThreadImpl::Send(IPC::Message* msg) { | 551 bool ChildThreadImpl::Send(IPC::Message* msg) { |
552 DCHECK(base::MessageLoop::current() == message_loop()); | 552 DCHECK(base::MessageLoop::current() == message_loop()); |
553 if (!channel_) { | 553 if (!channel_) { |
554 delete msg; | 554 delete msg; |
555 return false; | 555 return false; |
556 } | 556 } |
557 | 557 |
558 return channel_->Send(msg); | 558 return channel_->Send(msg); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
658 | 658 |
659 void ChildThreadImpl::OnProcessBackgrounded(bool backgrounded) { | 659 void ChildThreadImpl::OnProcessBackgrounded(bool backgrounded) { |
660 // Set timer slack to maximum on main thread when in background. | 660 // Set timer slack to maximum on main thread when in background. |
661 base::TimerSlack timer_slack = base::TIMER_SLACK_NONE; | 661 base::TimerSlack timer_slack = base::TIMER_SLACK_NONE; |
662 if (backgrounded) | 662 if (backgrounded) |
663 timer_slack = base::TIMER_SLACK_MAXIMUM; | 663 timer_slack = base::TIMER_SLACK_MAXIMUM; |
664 base::MessageLoop::current()->SetTimerSlack(timer_slack); | 664 base::MessageLoop::current()->SetTimerSlack(timer_slack); |
665 } | 665 } |
666 | 666 |
667 void ChildThreadImpl::OnShutdown() { | 667 void ChildThreadImpl::OnShutdown() { |
668 base::MessageLoop::current()->Quit(); | 668 base::MessageLoop::current()->QuitWhenIdle(); |
669 } | 669 } |
670 | 670 |
671 #if defined(IPC_MESSAGE_LOG_ENABLED) | 671 #if defined(IPC_MESSAGE_LOG_ENABLED) |
672 void ChildThreadImpl::OnSetIPCLoggingEnabled(bool enable) { | 672 void ChildThreadImpl::OnSetIPCLoggingEnabled(bool enable) { |
673 if (enable) | 673 if (enable) |
674 IPC::Logging::GetInstance()->Enable(); | 674 IPC::Logging::GetInstance()->Enable(); |
675 else | 675 else |
676 IPC::Logging::GetInstance()->Disable(); | 676 IPC::Logging::GetInstance()->Disable(); |
677 } | 677 } |
678 #endif // IPC_MESSAGE_LOG_ENABLED | 678 #endif // IPC_MESSAGE_LOG_ENABLED |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 // It may block the child thread if so. | 713 // It may block the child thread if so. |
714 void ChildThreadImpl::ShutdownThread() { | 714 void ChildThreadImpl::ShutdownThread() { |
715 DCHECK(!ChildThreadImpl::current()) << | 715 DCHECK(!ChildThreadImpl::current()) << |
716 "this method should NOT be called from child thread itself"; | 716 "this method should NOT be called from child thread itself"; |
717 g_quit_closure.Get().PostQuitFromNonMainThread(); | 717 g_quit_closure.Get().PostQuitFromNonMainThread(); |
718 } | 718 } |
719 #endif | 719 #endif |
720 | 720 |
721 void ChildThreadImpl::OnProcessFinalRelease() { | 721 void ChildThreadImpl::OnProcessFinalRelease() { |
722 if (on_channel_error_called_) { | 722 if (on_channel_error_called_) { |
723 base::MessageLoop::current()->Quit(); | 723 base::MessageLoop::current()->QuitWhenIdle(); |
724 return; | 724 return; |
725 } | 725 } |
726 | 726 |
727 // The child process shutdown sequence is a request response based mechanism, | 727 // The child process shutdown sequence is a request response based mechanism, |
728 // where we send out an initial feeler request to the child process host | 728 // where we send out an initial feeler request to the child process host |
729 // instance in the browser to verify if it's ok to shutdown the child process. | 729 // instance in the browser to verify if it's ok to shutdown the child process. |
730 // The browser then sends back a response if it's ok to shutdown. This avoids | 730 // The browser then sends back a response if it's ok to shutdown. This avoids |
731 // race conditions if the process refcount is 0 but there's an IPC message | 731 // race conditions if the process refcount is 0 but there's an IPC message |
732 // inflight that would addref it. | 732 // inflight that would addref it. |
733 Send(new ChildProcessHostMsg_ShutdownRequest); | 733 Send(new ChildProcessHostMsg_ShutdownRequest); |
734 } | 734 } |
735 | 735 |
736 void ChildThreadImpl::EnsureConnected() { | 736 void ChildThreadImpl::EnsureConnected() { |
737 VLOG(0) << "ChildThreadImpl::EnsureConnected()"; | 737 VLOG(0) << "ChildThreadImpl::EnsureConnected()"; |
738 base::Process::Current().Terminate(0, false); | 738 base::Process::Current().Terminate(0, false); |
739 } | 739 } |
740 | 740 |
741 bool ChildThreadImpl::IsInBrowserProcess() const { | 741 bool ChildThreadImpl::IsInBrowserProcess() const { |
742 return browser_process_io_runner_; | 742 return browser_process_io_runner_; |
743 } | 743 } |
744 | 744 |
745 } // namespace content | 745 } // namespace content |
OLD | NEW |