OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "chrome/common/child_thread.h" | 5 #include "chrome/common/child_thread.h" |
6 | 6 |
7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "chrome/common/child_process.h" | 10 #include "chrome/common/child_process.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 webkit_glue::SetUserAgent( | 40 webkit_glue::SetUserAgent( |
41 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( | 41 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
42 switches::kUserAgent)); | 42 switches::kUserAgent)); |
43 } | 43 } |
44 | 44 |
45 channel_.reset(new IPC::SyncChannel(channel_name_, | 45 channel_.reset(new IPC::SyncChannel(channel_name_, |
46 IPC::Channel::MODE_CLIENT, this, | 46 IPC::Channel::MODE_CLIENT, this, |
47 ChildProcess::current()->io_message_loop(), true, | 47 ChildProcess::current()->io_message_loop(), true, |
48 ChildProcess::current()->GetShutDownEvent())); | 48 ChildProcess::current()->GetShutDownEvent())); |
49 #ifdef IPC_MESSAGE_LOG_ENABLED | 49 #ifdef IPC_MESSAGE_LOG_ENABLED |
50 IPC::Logging::current()->SetIPCSender(this); | 50 IPC::Logging::GetInstance()->SetIPCSender(this); |
51 #endif | 51 #endif |
52 | 52 |
53 resource_dispatcher_.reset(new ResourceDispatcher(this)); | 53 resource_dispatcher_.reset(new ResourceDispatcher(this)); |
54 socket_stream_dispatcher_.reset(new SocketStreamDispatcher()); | 54 socket_stream_dispatcher_.reset(new SocketStreamDispatcher()); |
55 file_system_dispatcher_.reset(new FileSystemDispatcher()); | 55 file_system_dispatcher_.reset(new FileSystemDispatcher()); |
56 | 56 |
57 sync_message_filter_ = | 57 sync_message_filter_ = |
58 new IPC::SyncMessageFilter(ChildProcess::current()->GetShutDownEvent()); | 58 new IPC::SyncMessageFilter(ChildProcess::current()->GetShutDownEvent()); |
59 channel_->AddFilter(sync_message_filter_.get()); | 59 channel_->AddFilter(sync_message_filter_.get()); |
60 | 60 |
61 // When running in unit tests, there is already a NotificationService object. | 61 // When running in unit tests, there is already a NotificationService object. |
62 // Since only one can exist at a time per thread, check first. | 62 // Since only one can exist at a time per thread, check first. |
63 if (!NotificationService::current()) | 63 if (!NotificationService::current()) |
64 notification_service_.reset(new NotificationService); | 64 notification_service_.reset(new NotificationService); |
65 } | 65 } |
66 | 66 |
67 ChildThread::~ChildThread() { | 67 ChildThread::~ChildThread() { |
68 #ifdef IPC_MESSAGE_LOG_ENABLED | 68 #ifdef IPC_MESSAGE_LOG_ENABLED |
69 IPC::Logging::current()->SetIPCSender(NULL); | 69 IPC::Logging::GetInstance()->SetIPCSender(NULL); |
70 #endif | 70 #endif |
71 | 71 |
72 channel_->RemoveFilter(sync_message_filter_.get()); | 72 channel_->RemoveFilter(sync_message_filter_.get()); |
73 | 73 |
74 // Close this channel before resetting the message loop attached to it so | 74 // Close this channel before resetting the message loop attached to it so |
75 // the message loop can call ChannelProxy::Context::OnChannelClosed(), which | 75 // the message loop can call ChannelProxy::Context::OnChannelClosed(), which |
76 // releases the reference count to this channel. | 76 // releases the reference count to this channel. |
77 channel_->Close(); | 77 channel_->Close(); |
78 | 78 |
79 // The ChannelProxy object caches a pointer to the IPC thread, so need to | 79 // The ChannelProxy object caches a pointer to the IPC thread, so need to |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 check_with_browser_before_shutdown_ = true; | 173 check_with_browser_before_shutdown_ = true; |
174 } | 174 } |
175 | 175 |
176 void ChildThread::OnShutdown() { | 176 void ChildThread::OnShutdown() { |
177 MessageLoop::current()->Quit(); | 177 MessageLoop::current()->Quit(); |
178 } | 178 } |
179 | 179 |
180 #if defined(IPC_MESSAGE_LOG_ENABLED) | 180 #if defined(IPC_MESSAGE_LOG_ENABLED) |
181 void ChildThread::OnSetIPCLoggingEnabled(bool enable) { | 181 void ChildThread::OnSetIPCLoggingEnabled(bool enable) { |
182 if (enable) | 182 if (enable) |
183 IPC::Logging::current()->Enable(); | 183 IPC::Logging::GetInstance()->Enable(); |
184 else | 184 else |
185 IPC::Logging::current()->Disable(); | 185 IPC::Logging::GetInstance()->Disable(); |
186 } | 186 } |
187 #endif // IPC_MESSAGE_LOG_ENABLED | 187 #endif // IPC_MESSAGE_LOG_ENABLED |
188 | 188 |
189 ChildThread* ChildThread::current() { | 189 ChildThread* ChildThread::current() { |
190 return ChildProcess::current()->main_thread(); | 190 return ChildProcess::current()->main_thread(); |
191 } | 191 } |
192 | 192 |
193 void ChildThread::OnProcessFinalRelease() { | 193 void ChildThread::OnProcessFinalRelease() { |
194 if (on_channel_error_called_ || !check_with_browser_before_shutdown_) { | 194 if (on_channel_error_called_ || !check_with_browser_before_shutdown_) { |
195 MessageLoop::current()->Quit(); | 195 MessageLoop::current()->Quit(); |
196 return; | 196 return; |
197 } | 197 } |
198 | 198 |
199 // The child process shutdown sequence is a request response based mechanism, | 199 // The child process shutdown sequence is a request response based mechanism, |
200 // where we send out an initial feeler request to the child process host | 200 // where we send out an initial feeler request to the child process host |
201 // instance in the browser to verify if it's ok to shutdown the child process. | 201 // instance in the browser to verify if it's ok to shutdown the child process. |
202 // The browser then sends back a response if it's ok to shutdown. | 202 // The browser then sends back a response if it's ok to shutdown. |
203 Send(new PluginProcessHostMsg_ShutdownRequest); | 203 Send(new PluginProcessHostMsg_ShutdownRequest); |
204 } | 204 } |
OLD | NEW |