Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1100)

Unified Diff: remoting/protocol/message_reader.h

Issue 10870021: Make MessageReader class not ref-counted. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | remoting/protocol/message_reader.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_;
};
« no previous file with comments | « no previous file | remoting/protocol/message_reader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698