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; |
+} |