| Index: components/nacl/loader/nacl_ipc_adapter.cc
|
| diff --git a/components/nacl/loader/nacl_ipc_adapter.cc b/components/nacl/loader/nacl_ipc_adapter.cc
|
| index 8134d3c751a034253b4ac244d5f7df4fed844afb..86d256fb4a29e33d937337c49c5428daaee63d3e 100644
|
| --- a/components/nacl/loader/nacl_ipc_adapter.cc
|
| +++ b/components/nacl/loader/nacl_ipc_adapter.cc
|
| @@ -377,10 +377,8 @@ bool NaClIPCAdapter::OnMessageReceived(const IPC::Message& msg) {
|
|
|
| typedef std::vector<ppapi::proxy::SerializedHandle> Handles;
|
| Handles handles;
|
| - scoped_ptr<IPC::Message> new_msg_ptr;
|
| - bool success = locked_data_.handle_converter_.ConvertNativeHandlesToPosix(
|
| - msg, &handles, &new_msg_ptr);
|
| - if (!success)
|
| + scoped_ptr<IPC::Message> new_msg;
|
| + if (!locked_data_.nacl_msg_scanner_.ScanMessage(msg, &handles, &new_msg))
|
| return false;
|
|
|
| // Now add any descriptors we found to rewritten_msg. |handles| is usually
|
| @@ -459,8 +457,8 @@ bool NaClIPCAdapter::OnMessageReceived(const IPC::Message& msg) {
|
| if (nacl_desc.get())
|
| rewritten_msg->AddDescriptor(nacl_desc.release());
|
| }
|
| - if (new_msg_ptr && !handles.empty())
|
| - SaveMessage(*new_msg_ptr, rewritten_msg.get());
|
| + if (new_msg)
|
| + SaveMessage(*new_msg, rewritten_msg.get());
|
| else
|
| SaveMessage(msg, rewritten_msg.get());
|
| }
|
| @@ -514,8 +512,7 @@ bool NaClIPCAdapter::SendCompleteMessage(const char* buffer,
|
|
|
| // We actually discard the flags and only copy the ones we care about. This
|
| // is just because message doesn't have a constructor that takes raw flags.
|
| - scoped_ptr<IPC::Message> msg(
|
| - new IPC::Message(header->routing, header->type));
|
| + scoped_ptr<IPC::Message> msg(new IPC::Message(header->routing, header->type));
|
| if (header->flags & IPC::Message::SYNC_BIT)
|
| msg->set_sync();
|
| if (header->flags & IPC::Message::REPLY_BIT)
|
| @@ -533,12 +530,15 @@ bool NaClIPCAdapter::SendCompleteMessage(const char* buffer,
|
| // unlock for us. Holding the lock for the message construction, which is
|
| // just some memcpys, shouldn't be a big deal.
|
| lock_.AssertAcquired();
|
| - if (locked_data_.channel_closed_)
|
| - return false; // TODO(brettw) clean up handles here when we add support!
|
| -
|
| - if (msg->is_sync()) {
|
| - locked_data_.handle_converter_.RegisterSyncMessageForReply(*msg);
|
| + if (locked_data_.channel_closed_) {
|
| + // If we ever pass handles from the plugin to the host, we should close them
|
| + // here before we drop the message.
|
| + return false;
|
| }
|
| +
|
| + if (msg->is_sync())
|
| + locked_data_.nacl_msg_scanner_.RegisterSyncMessageForReply(*msg);
|
| +
|
| // Actual send must be done on the I/O thread.
|
| task_runner_->PostTask(FROM_HERE,
|
| base::Bind(&NaClIPCAdapter::SendMessageOnIOThread, this,
|
|
|