Index: remoting/protocol/message_reader.h |
diff --git a/remoting/protocol/message_reader.h b/remoting/protocol/message_reader.h |
index 3c33b5ae30bb054ceaaab79555a27be6c1330c77..b2bfffebd2f2bfeafaa8367b6638582f481796ba 100644 |
--- a/remoting/protocol/message_reader.h |
+++ b/remoting/protocol/message_reader.h |
@@ -37,11 +37,7 @@ namespace protocol { |
// e.g. when we the sender sends multiple messages in one TCP packet. |
class MessageReader : public base::RefCountedThreadSafe<MessageReader> { |
public: |
- // The callback is given ownership of the second argument |
- // (|done_task|). The buffer (first argument) is owned by |
- // MessageReader and is freed when the task specified by the second |
- // argument is called. |
- typedef base::Callback<void(CompoundBuffer*, const base::Closure&)> |
+ typedef base::Callback<void(scoped_ptr<CompoundBuffer>, const base::Closure&)> |
MessageReceivedCallback; |
MessageReader(); |
@@ -56,8 +52,7 @@ class MessageReader : public base::RefCountedThreadSafe<MessageReader> { |
void OnRead(int result); |
void HandleReadResult(int result); |
void OnDataReceived(net::IOBuffer* data, int data_size); |
- void OnMessageDone(CompoundBuffer* message, |
- scoped_refptr<base::MessageLoopProxy> message_loop); |
+ void OnMessageDone(scoped_refptr<base::MessageLoopProxy> message_loop); |
void ProcessDoneEvent(); |
net::Socket* socket_; |
@@ -85,7 +80,7 @@ class MessageReader : public base::RefCountedThreadSafe<MessageReader> { |
template <class T> |
class ProtobufMessageReader { |
public: |
- typedef typename base::Callback<void(T*, const base::Closure&)> |
+ typedef typename base::Callback<void(scoped_ptr<T>, const base::Closure&)> |
MessageReceivedCallback; |
ProtobufMessageReader() { }; |
@@ -101,25 +96,19 @@ class ProtobufMessageReader { |
} |
private: |
- void OnNewData(CompoundBuffer* buffer, const base::Closure& done_task) { |
- T* message = new T(); |
- CompoundBufferInputStream stream(buffer); |
+ void OnNewData(scoped_ptr<CompoundBuffer> buffer, |
+ const base::Closure& done_task) { |
+ scoped_ptr<T> message(new T()); |
+ CompoundBufferInputStream stream(buffer.get()); |
bool ret = message->ParseFromZeroCopyStream(&stream); |
if (!ret) { |
LOG(WARNING) << "Received message that is not a valid protocol buffer."; |
- delete message; |
} else { |
DCHECK_EQ(stream.position(), buffer->total_bytes()); |
- message_received_callback_.Run(message, base::Bind( |
- &ProtobufMessageReader<T>::OnDone, message, done_task)); |
+ message_received_callback_.Run(message.Pass(), done_task); |
} |
} |
- static void OnDone(T* message, const base::Closure& done_task) { |
- delete message; |
- done_task.Run(); |
- } |
- |
scoped_refptr<MessageReader> message_reader_; |
MessageReceivedCallback message_received_callback_; |
}; |