Chromium Code Reviews| Index: components/nacl/loader/nacl_trusted_listener.cc |
| diff --git a/components/nacl/loader/nacl_trusted_listener.cc b/components/nacl/loader/nacl_trusted_listener.cc |
| index 5f6410a83f0f14632fe05166d209d17b07ed7a3c..88966b1d56bcf359156fcf48352226b3e4bf38bd 100644 |
| --- a/components/nacl/loader/nacl_trusted_listener.cc |
| +++ b/components/nacl/loader/nacl_trusted_listener.cc |
| @@ -5,18 +5,30 @@ |
| #include "components/nacl/loader/nacl_trusted_listener.h" |
| #include "base/single_thread_task_runner.h" |
| +#include "components/nacl/common/nacl_messages.h" |
| + |
| +namespace { |
| + |
| +NaClTrustedListener* g_trusted_listener; |
| + |
| +} // namespace |
| NaClTrustedListener::NaClTrustedListener( |
| const IPC::ChannelHandle& handle, |
| - base::SingleThreadTaskRunner* ipc_task_runner) { |
| + base::SingleThreadTaskRunner* ipc_task_runner) |
| + : ipc_task_runner_(ipc_task_runner), |
| + waitable_event_(true, false), |
| + send_fatal_crash_log_called_(false) { |
| channel_proxy_ = IPC::ChannelProxy::Create( |
| handle, |
| IPC::Channel::MODE_SERVER, |
| this, |
| ipc_task_runner).Pass(); |
| + g_trusted_listener = this; |
| } |
| NaClTrustedListener::~NaClTrustedListener() { |
| + g_trusted_listener = NULL; |
| } |
| #if defined(OS_POSIX) |
| @@ -34,5 +46,27 @@ void NaClTrustedListener::OnChannelError() { |
| } |
| bool NaClTrustedListener::Send(IPC::Message* msg) { |
| + DCHECK(msg->type() != NaClProcessHostMsg_FatalLogReceived::ID); |
| + |
| return channel_proxy_->Send(msg); |
| } |
| + |
| +bool NaClTrustedListener::SendFatalCrashLog(const std::string& log) { |
| + DCHECK(!send_fatal_crash_log_called_); |
| + send_fatal_crash_log_called_ = true; |
| + |
| + Send(new NaClProcessHostMsg_FatalLogReceived(log)); |
| + ipc_task_runner_->PostTask( |
|
Mark Seaborn
2014/07/30 22:23:26
So ipc_task_runner is io_thread_.message_loop_prox
|
| + FROM_HERE, |
| + base::Bind(&NaClTrustedListener::SignalIpcTaskRunnerFlushed, this)); |
| + // Give the IPC task runner 50ms to try to send the fatal log message. |
| + return waitable_event_.TimedWait(base::TimeDelta::FromMilliseconds(50)); |
|
dmichael (off chromium)
2014/07/30 21:17:48
nit: Might make sense to name waitable_event_ more
|
| +} |
| + |
| +void NaClTrustedListener::SignalIpcTaskRunnerFlushed() { |
| + waitable_event_.Signal(); |
| +} |
| + |
| +NaClTrustedListener* NaClTrustedListener::Get() { |
| + return g_trusted_listener; |
| +} |