diff options
Diffstat (limited to 'ipc/ipc_channel_proxy.cc')
-rw-r--r-- | ipc/ipc_channel_proxy.cc | 34 |
1 files changed, 6 insertions, 28 deletions
diff --git a/ipc/ipc_channel_proxy.cc b/ipc/ipc_channel_proxy.cc index 7eed1bd..f0e9715 100644 --- a/ipc/ipc_channel_proxy.cc +++ b/ipc/ipc_channel_proxy.cc @@ -14,33 +14,10 @@ namespace IPC { -// This helper ensures the message is deleted if the task is deleted without -// having been run. -class SendCallbackHelper - : public base::RefCountedThreadSafe<SendCallbackHelper> { - public: - SendCallbackHelper(ChannelProxy::Context* context, Message* message) - : context_(context), - message_(message) { - } - - void Send() { - context_->OnSendMessage(message_.release()); - } - - private: - scoped_refptr<ChannelProxy::Context> context_; - scoped_ptr<Message> message_; - - DISALLOW_COPY_AND_ASSIGN(SendCallbackHelper); -}; - //------------------------------------------------------------------------------ ChannelProxy::MessageFilter::MessageFilter() {} -ChannelProxy::MessageFilter::~MessageFilter() {} - void ChannelProxy::MessageFilter::OnFilterAdded(Channel* channel) {} void ChannelProxy::MessageFilter::OnFilterRemoved() {} @@ -59,6 +36,8 @@ void ChannelProxy::MessageFilter::OnDestruct() const { delete this; } +ChannelProxy::MessageFilter::~MessageFilter() {} + //------------------------------------------------------------------------------ ChannelProxy::Context::Context(Channel::Listener* listener, @@ -186,13 +165,12 @@ void ChannelProxy::Context::OnChannelClosed() { } // Called on the IPC::Channel thread -void ChannelProxy::Context::OnSendMessage(Message* message) { +void ChannelProxy::Context::OnSendMessage(scoped_ptr<Message> message) { if (!channel_.get()) { - delete message; OnChannelClosed(); return; } - if (!channel_->Send(message)) + if (!channel_->Send(message.release())) OnChannelError(); } @@ -368,8 +346,8 @@ bool ChannelProxy::Send(Message* message) { context_->ipc_message_loop()->PostTask( FROM_HERE, - base::Bind(&SendCallbackHelper::Send, - new SendCallbackHelper(context_.get(), message))); + base::Bind(&ChannelProxy::Context::OnSendMessage, + context_, base::Passed(scoped_ptr<Message>(message)))); return true; } |