Index: remoting/host/native_messaging/native_messaging_channel.h |
diff --git a/remoting/host/native_messaging/native_messaging_channel.h b/remoting/host/native_messaging/native_messaging_channel.h |
index dbf144d310a0bb4fbe1d5d402f0962a5833ab811..472cc0613f9c289288eff331ee86b08650b349a1 100644 |
--- a/remoting/host/native_messaging/native_messaging_channel.h |
+++ b/remoting/host/native_messaging/native_messaging_channel.h |
@@ -22,48 +22,29 @@ class Value; |
namespace remoting { |
// Implements reading messages and sending responses across the native messaging |
-// host pipe. Delegates processing of received messages to Delegate. |
-// |
-// TODO(alexeypa): Add ability to switch between different |delegate_| pointers |
-// on the fly. This is useful for implementing UAC-style elevation on Windows - |
-// an unprivileged delegate could be replaced with another delegate that |
-// forwards messages to the elevated instance of the native messaging host. |
+// host pipe. |
class NativeMessagingChannel : public base::NonThreadSafe { |
public: |
// Used to send a message to the client app. |
typedef base::Callback<void(scoped_ptr<base::DictionaryValue> message)> |
SendMessageCallback; |
- class Delegate { |
- public: |
- virtual ~Delegate() {} |
- |
- // Sets the callback the delegate can use to send a message to the client. |
- virtual void SetSendMessageCallback( |
- const SendMessageCallback& send_message) = 0; |
- |
- // Processes a message received from the client app. |
- virtual void ProcessMessage(scoped_ptr<base::DictionaryValue> message) = 0; |
- }; |
- |
// Constructs an object taking the ownership of |input| and |output|. Closes |
// |input| and |output| to prevent the caller from using them. |
- NativeMessagingChannel( |
- scoped_ptr<Delegate> delegate, |
- base::PlatformFile input, |
- base::PlatformFile output); |
+ NativeMessagingChannel(base::PlatformFile input, base::PlatformFile output); |
~NativeMessagingChannel(); |
// Starts reading and processing messages. |
- void Start(const base::Closure& quit_closure); |
+ void Start(const SendMessageCallback& received_message, |
+ const base::Closure& quit_closure); |
+ |
+ // Sends a message to the client app. |
+ void SendMessage(scoped_ptr<base::DictionaryValue> message); |
private: |
// Processes a message received from the client app. |
void ProcessMessage(scoped_ptr<base::Value> message); |
- // Sends a message to the client app. |
- void SendMessage(scoped_ptr<base::DictionaryValue> message); |
- |
// Initiates shutdown and runs |quit_closure| if there are no pending requests |
// left. |
void Shutdown(); |
@@ -73,10 +54,8 @@ class NativeMessagingChannel : public base::NonThreadSafe { |
NativeMessagingReader native_messaging_reader_; |
scoped_ptr<NativeMessagingWriter> native_messaging_writer_; |
- // |delegate_| may post tasks to this object during destruction (but not |
- // afterwards), so it needs to be destroyed before other members of this class |
- // (except for |weak_factory_|). |
- scoped_ptr<Delegate> delegate_; |
+ // The callback to invoke when a message is received. |
+ SendMessageCallback received_message_; |
base::WeakPtr<NativeMessagingChannel> weak_ptr_; |
base::WeakPtrFactory<NativeMessagingChannel> weak_factory_; |