Index: remoting/protocol/message_reader.h |
diff --git a/remoting/protocol/message_reader.h b/remoting/protocol/message_reader.h |
index b9a373b993b4e595cd162df2acdb832cb70058e0..efba5e1be02599670dd4d044cbbc72d3b9db73d6 100644 |
--- a/remoting/protocol/message_reader.h |
+++ b/remoting/protocol/message_reader.h |
@@ -7,15 +7,13 @@ |
#include "base/bind.h" |
#include "base/callback.h" |
-#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
-#include "base/message_loop_proxy.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/threading/non_thread_safe.h" |
#include "net/base/completion_callback.h" |
#include "remoting/base/compound_buffer.h" |
#include "remoting/protocol/message_decoder.h" |
-class MessageLoop; |
- |
namespace net { |
class IOBuffer; |
class Socket; |
@@ -35,27 +33,24 @@ namespace protocol { |
// It is still possible that the MessageReceivedCallback is called |
// twice (so that there is more than one outstanding message), |
// e.g. when we the sender sends multiple messages in one TCP packet. |
-class MessageReader : public base::RefCountedThreadSafe<MessageReader> { |
+class MessageReader : public base::NonThreadSafe { |
public: |
typedef base::Callback<void(scoped_ptr<CompoundBuffer>, const base::Closure&)> |
MessageReceivedCallback; |
MessageReader(); |
+ virtual ~MessageReader(); |
// Initialize the MessageReader with a socket. If a message is received |
// |callback| is called. |
void Init(net::Socket* socket, const MessageReceivedCallback& callback); |
private: |
- friend class base::RefCountedThreadSafe<MessageReader>; |
- virtual ~MessageReader(); |
- |
void DoRead(); |
void OnRead(int result); |
void HandleReadResult(int result); |
void OnDataReceived(net::IOBuffer* data, int data_size); |
- void OnMessageDone(scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
- void ProcessDoneEvent(); |
+ void OnMessageDone(); |
net::Socket* socket_; |
@@ -75,6 +70,10 @@ class MessageReader : public base::RefCountedThreadSafe<MessageReader> { |
// Callback is called when a message is received. |
MessageReceivedCallback message_received_callback_; |
+ |
+ base::WeakPtrFactory<MessageReader> weak_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MessageReader); |
}; |
// Version of MessageReader for protocol buffer messages, that parses |
@@ -82,7 +81,10 @@ class MessageReader : public base::RefCountedThreadSafe<MessageReader> { |
template <class T> |
class ProtobufMessageReader { |
public: |
- typedef typename base::Callback<void(scoped_ptr<T>, const base::Closure&)> |
+ // The callback that is called when a new message is received. |done_task| |
+ // must be called by the callback when it's done processing the |message|. |
+ typedef typename base::Callback<void(scoped_ptr<T> message, |
+ const base::Closure& done_task)> |
MessageReceivedCallback; |
ProtobufMessageReader() { }; |
@@ -91,7 +93,7 @@ class ProtobufMessageReader { |
void Init(net::Socket* socket, const MessageReceivedCallback& callback) { |
DCHECK(!callback.is_null()); |
message_received_callback_ = callback; |
- message_reader_ = new MessageReader(); |
+ message_reader_.reset(new MessageReader()); |
message_reader_->Init( |
socket, base::Bind(&ProtobufMessageReader<T>::OnNewData, |
base::Unretained(this))); |
@@ -111,7 +113,7 @@ class ProtobufMessageReader { |
} |
} |
- scoped_refptr<MessageReader> message_reader_; |
+ scoped_ptr<MessageReader> message_reader_; |
MessageReceivedCallback message_received_callback_; |
}; |