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

Side by Side Diff: chrome/browser/extensions/api/messaging/native_message_process_host.h

Issue 591463003: Remote Assistance on Chrome OS Part III - NativeMessageHost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@native_messaging
Patch Set: Fix NativeMessagingBasic test on Release builds Created 6 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_EXTENSIONS_API_MESSAGING_NATIVE_MESSAGE_PROCESS_HOST_H_ 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_MESSAGING_NATIVE_MESSAGE_PROCESS_HOST_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_MESSAGING_NATIVE_MESSAGE_PROCESS_HOST_H_ 6 #define CHROME_BROWSER_EXTENSIONS_API_MESSAGING_NATIVE_MESSAGE_PROCESS_HOST_H_
7 7
8 #include <queue> 8 #include <queue>
9 #include <string> 9 #include <string>
10 10
11 #include "base/files/file.h" 11 #include "base/files/file.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/weak_ptr.h"
14 #include "base/message_loop/message_loop.h" 13 #include "base/message_loop/message_loop.h"
15 #include "base/process/process.h" 14 #include "base/process/process.h"
16 #include "chrome/browser/extensions/api/messaging/native_process_launcher.h" 15 #include "chrome/browser/extensions/api/messaging/native_process_launcher.h"
16 #include "extensions/browser/api/messaging/native_message_host.h"
17 #include "ui/gfx/native_widget_types.h" 17 #include "ui/gfx/native_widget_types.h"
18 18
19 class PrefService;
20
21 namespace net { 19 namespace net {
22 20
23 class DrainableIOBuffer; 21 class DrainableIOBuffer;
24 class FileStream; 22 class FileStream;
25 class IOBuffer; 23 class IOBuffer;
26 class IOBufferWithSize; 24 class IOBufferWithSize;
27 25
28 } // namespace net 26 } // namespace net
29 27
30 namespace extensions { 28 namespace extensions {
31 29
32 // Manages the native side of a connection between an extension and a native 30 // Manages the native side of a connection between an extension and a native
33 // process. 31 // process.
34 // 32 //
35 // This class must only be created, called, and deleted on the IO thread. 33 // This class must only be created, called, and deleted on the IO thread.
36 // Public methods typically accept callbacks which will be invoked on the UI 34 // Public methods typically accept callbacks which will be invoked on the UI
37 // thread. 35 // thread.
38 class NativeMessageProcessHost 36 class NativeMessageProcessHost :
39 #if defined(OS_POSIX) 37 #if defined(OS_POSIX)
40 : public base::MessageLoopForIO::Watcher 38 public base::MessageLoopForIO::Watcher,
41 #endif // !defined(OS_POSIX) 39 #endif // !defined(OS_POSIX)
42 { 40 public NativeMessageHost {
43 public: 41 public:
44 // Interface for the object that receives messages from the native process.
45 class Client {
46 public:
47 virtual ~Client() {}
48 // Called on the UI thread.
49 virtual void PostMessageFromNativeProcess(int port_id,
50 const std::string& message) = 0;
51 virtual void CloseChannel(int port_id,
52 const std::string& error_message) = 0;
53 };
54
55 // Result returned from IsHostAllowed().
56 enum PolicyPermission {
57 DISALLOW, // The host is not allowed.
58 ALLOW_SYSTEM_ONLY, // Allowed only when installed on system level.
59 ALLOW_ALL, // Allowed when installed on system or user level.
60 };
61
62 virtual ~NativeMessageProcessHost(); 42 virtual ~NativeMessageProcessHost();
63 43
64 // Returns policy permissions for the host with the specified name. 44 // Create using specified |launcher|. Used in tests.
65 static PolicyPermission IsHostAllowed(const PrefService* pref_service, 45 static scoped_ptr<NativeMessageHost> CreateWithLauncher(
66 const std::string& native_host_name);
67
68 static scoped_ptr<NativeMessageProcessHost> Create(
69 gfx::NativeView native_view,
70 base::WeakPtr<Client> weak_client_ui,
71 const std::string& source_extension_id, 46 const std::string& source_extension_id,
72 const std::string& native_host_name, 47 const std::string& native_host_name,
73 int destination_port,
74 bool allow_user_level);
75
76 // Create using specified |launcher|. Used in tests.
77 static scoped_ptr<NativeMessageProcessHost> CreateWithLauncher(
78 base::WeakPtr<Client> weak_client_ui,
79 const std::string& source_extension_id,
80 const std::string& native_host_name,
81 int destination_port,
82 scoped_ptr<NativeProcessLauncher> launcher); 48 scoped_ptr<NativeProcessLauncher> launcher);
83 49
84 // Send a message with the specified payload. 50 // extensions::NativeMessageHost implementation.
85 void Send(const std::string& json); 51 virtual void OnMessage(const std::string& message) OVERRIDE;
52 virtual void Start(Client* client) OVERRIDE;
53 virtual scoped_refptr<base::SingleThreadTaskRunner> task_runner()
54 const OVERRIDE;
86 55
87 #if defined(OS_POSIX) 56 #if defined(OS_POSIX)
88 // MessageLoopForIO::Watcher interface 57 // MessageLoopForIO::Watcher interface
89 virtual void OnFileCanReadWithoutBlocking(int fd) override; 58 virtual void OnFileCanReadWithoutBlocking(int fd) override;
90 virtual void OnFileCanWriteWithoutBlocking(int fd) override; 59 virtual void OnFileCanWriteWithoutBlocking(int fd) override;
91 #endif // !defined(OS_POSIX) 60 #endif // !defined(OS_POSIX)
92 61
93 // Try and read a single message from |read_file_|. This should only be called 62 // Try and read a single message from |read_file_|. This should only be called
94 // in unittests when you know there is data in the file. 63 // in unittests when you know there is data in the file.
95 void ReadNowForTesting(); 64 void ReadNowForTesting();
96 65
97 private: 66 private:
98 NativeMessageProcessHost(base::WeakPtr<Client> weak_client_ui, 67 NativeMessageProcessHost(const std::string& source_extension_id,
99 const std::string& source_extension_id,
100 const std::string& native_host_name, 68 const std::string& native_host_name,
101 int destination_port,
102 scoped_ptr<NativeProcessLauncher> launcher); 69 scoped_ptr<NativeProcessLauncher> launcher);
103 70
104 // Starts the host process. 71 // Starts the host process.
105 void LaunchHostProcess(); 72 void LaunchHostProcess();
106 73
107 // Callback for NativeProcessLauncher::Launch(). 74 // Callback for NativeProcessLauncher::Launch().
108 void OnHostProcessLaunched(NativeProcessLauncher::LaunchResult result, 75 void OnHostProcessLaunched(NativeProcessLauncher::LaunchResult result,
109 base::ProcessHandle process_handle, 76 base::ProcessHandle process_handle,
110 base::File read_file, 77 base::File read_file,
111 base::File write_file); 78 base::File write_file);
112 79
113 // Helper methods to read incoming messages. 80 // Helper methods to read incoming messages.
114 void WaitRead(); 81 void WaitRead();
115 void DoRead(); 82 void DoRead();
116 void OnRead(int result); 83 void OnRead(int result);
117 void HandleReadResult(int result); 84 void HandleReadResult(int result);
118 void ProcessIncomingData(const char* data, int data_size); 85 void ProcessIncomingData(const char* data, int data_size);
119 86
120 // Helper methods to write outgoing messages. 87 // Helper methods to write outgoing messages.
121 void DoWrite(); 88 void DoWrite();
122 void HandleWriteResult(int result); 89 void HandleWriteResult(int result);
123 void OnWritten(int result); 90 void OnWritten(int result);
124 91
125 // Closes the connection. Called from OnError() and destructor. 92 // Closes the connection. Called from OnError() and destructor.
126 void Close(const std::string& error_message); 93 void Close(const std::string& error_message);
127 94
128 // The Client messages will be posted to. Should only be accessed from the 95 // The Client messages will be posted to. Should only be accessed from the
129 // UI thread. 96 // UI thread.
130 base::WeakPtr<Client> weak_client_ui_; 97 Client* client_;
131 98
132 // ID of the calling extension. 99 // ID of the calling extension.
133 std::string source_extension_id_; 100 std::string source_extension_id_;
134 101
135 // Name of the native messaging host. 102 // Name of the native messaging host.
136 std::string native_host_name_; 103 std::string native_host_name_;
137 104
138 // The id of the port on the other side of this connection. This is passed to
139 // |weak_client_ui_| when posting messages.
140 int destination_port_;
141
142 // Launcher used to launch the native process. 105 // Launcher used to launch the native process.
143 scoped_ptr<NativeProcessLauncher> launcher_; 106 scoped_ptr<NativeProcessLauncher> launcher_;
144 107
145 // Set to true after the native messaging connection has been stopped, e.g. 108 // Set to true after the native messaging connection has been stopped, e.g.
146 // due to an error. 109 // due to an error.
147 bool closed_; 110 bool closed_;
148 111
149 base::ProcessHandle process_handle_; 112 base::ProcessHandle process_handle_;
150 113
151 // Input stream reader. 114 // Input stream reader.
(...skipping 18 matching lines...) Expand all
170 133
171 // Queue for outgoing messages. 134 // Queue for outgoing messages.
172 std::queue<scoped_refptr<net::IOBufferWithSize> > write_queue_; 135 std::queue<scoped_refptr<net::IOBufferWithSize> > write_queue_;
173 136
174 // The message that's currently being sent. 137 // The message that's currently being sent.
175 scoped_refptr<net::DrainableIOBuffer> current_write_buffer_; 138 scoped_refptr<net::DrainableIOBuffer> current_write_buffer_;
176 139
177 // Set to true when a write is pending. 140 // Set to true when a write is pending.
178 bool write_pending_; 141 bool write_pending_;
179 142
143 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
144
180 DISALLOW_COPY_AND_ASSIGN(NativeMessageProcessHost); 145 DISALLOW_COPY_AND_ASSIGN(NativeMessageProcessHost);
181 }; 146 };
182 147
183 } // namespace extensions 148 } // namespace extensions
184 149
185 #endif // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_NATIVE_MESSAGE_PROCESS_HOST_H _ 150 #endif // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_NATIVE_MESSAGE_PROCESS_HOST_H _
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698