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

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: Add NativeMessagePort::Core 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" 13 #include "base/memory/weak_ptr.h"
Sergey Ulanov 2014/10/01 23:23:59 No longer need this.
kelvinp 2014/10/02 03:12:17 Done.
14 #include "base/message_loop/message_loop.h" 14 #include "base/message_loop/message_loop.h"
15 #include "base/process/process.h" 15 #include "base/process/process.h"
16 #include "chrome/browser/extensions/api/messaging/native_process_launcher.h" 16 #include "chrome/browser/extensions/api/messaging/native_process_launcher.h"
17 #include "extensions/browser/api/messaging/native_message_host.h"
17 #include "ui/gfx/native_widget_types.h" 18 #include "ui/gfx/native_widget_types.h"
18 19
19 class PrefService;
20
21 namespace net { 20 namespace net {
22 21
23 class DrainableIOBuffer; 22 class DrainableIOBuffer;
24 class FileStream; 23 class FileStream;
25 class IOBuffer; 24 class IOBuffer;
26 class IOBufferWithSize; 25 class IOBufferWithSize;
27 26
28 } // namespace net 27 } // namespace net
29 28
30 namespace extensions { 29 namespace extensions {
31 30
32 // Manages the native side of a connection between an extension and a native 31 // Manages the native side of a connection between an extension and a native
33 // process. 32 // process.
34 // 33 //
35 // This class must only be created, called, and deleted on the IO thread. 34 // 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 35 // Public methods typically accept callbacks which will be invoked on the UI
37 // thread. 36 // thread.
38 class NativeMessageProcessHost 37 class NativeMessageProcessHost :
39 #if defined(OS_POSIX) 38 #if defined(OS_POSIX)
40 : public base::MessageLoopForIO::Watcher 39 public base::MessageLoopForIO::Watcher,
41 #endif // !defined(OS_POSIX) 40 #endif // !defined(OS_POSIX)
42 { 41 public NativeMessageHost {
43 public: 42 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(); 43 virtual ~NativeMessageProcessHost();
63 44
64 // Returns policy permissions for the host with the specified name. 45 // Create using specified |launcher|. Used in tests.
65 static PolicyPermission IsHostAllowed(const PrefService* pref_service, 46 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, 47 const std::string& source_extension_id,
72 const std::string& native_host_name, 48 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); 49 scoped_ptr<NativeProcessLauncher> launcher);
83 50
84 // Send a message with the specified payload. 51 // extensions::NativeMessageHost implementation.
85 void Send(const std::string& json); 52 virtual void OnMessage(const std::string& message) OVERRIDE;
53 virtual void set_client(Client* client) OVERRIDE;
54 virtual scoped_refptr<base::SingleThreadTaskRunner> task_runner()
55 const OVERRIDE;
86 56
87 #if defined(OS_POSIX) 57 #if defined(OS_POSIX)
88 // MessageLoopForIO::Watcher interface 58 // MessageLoopForIO::Watcher interface
89 virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE; 59 virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE;
90 virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE; 60 virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE;
91 #endif // !defined(OS_POSIX) 61 #endif // !defined(OS_POSIX)
92 62
93 // Try and read a single message from |read_file_|. This should only be called 63 // 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. 64 // in unittests when you know there is data in the file.
95 void ReadNowForTesting(); 65 void ReadNowForTesting();
96 66
97 private: 67 private:
98 NativeMessageProcessHost(base::WeakPtr<Client> weak_client_ui, 68 NativeMessageProcessHost(const std::string& source_extension_id,
99 const std::string& source_extension_id,
100 const std::string& native_host_name, 69 const std::string& native_host_name,
101 int destination_port,
102 scoped_ptr<NativeProcessLauncher> launcher); 70 scoped_ptr<NativeProcessLauncher> launcher);
103 71
104 // Starts the host process. 72 // Starts the host process.
105 void LaunchHostProcess(); 73 void LaunchHostProcess();
106 74
107 // Callback for NativeProcessLauncher::Launch(). 75 // Callback for NativeProcessLauncher::Launch().
108 void OnHostProcessLaunched(NativeProcessLauncher::LaunchResult result, 76 void OnHostProcessLaunched(NativeProcessLauncher::LaunchResult result,
109 base::ProcessHandle process_handle, 77 base::ProcessHandle process_handle,
110 base::File read_file, 78 base::File read_file,
111 base::File write_file); 79 base::File write_file);
112 80
113 // Helper methods to read incoming messages. 81 // Helper methods to read incoming messages.
114 void WaitRead(); 82 void WaitRead();
115 void DoRead(); 83 void DoRead();
116 void OnRead(int result); 84 void OnRead(int result);
117 void HandleReadResult(int result); 85 void HandleReadResult(int result);
118 void ProcessIncomingData(const char* data, int data_size); 86 void ProcessIncomingData(const char* data, int data_size);
119 87
120 // Helper methods to write outgoing messages. 88 // Helper methods to write outgoing messages.
121 void DoWrite(); 89 void DoWrite();
122 void HandleWriteResult(int result); 90 void HandleWriteResult(int result);
123 void OnWritten(int result); 91 void OnWritten(int result);
124 92
125 // Closes the connection. Called from OnError() and destructor. 93 // Closes the connection. Called from OnError() and destructor.
126 void Close(const std::string& error_message); 94 void Close(const std::string& error_message);
127 95
128 // The Client messages will be posted to. Should only be accessed from the 96 // The Client messages will be posted to. Should only be accessed from the
129 // UI thread. 97 // UI thread.
130 base::WeakPtr<Client> weak_client_ui_; 98 Client* client_;
131 99
132 // ID of the calling extension. 100 // ID of the calling extension.
133 std::string source_extension_id_; 101 std::string source_extension_id_;
134 102
135 // Name of the native messaging host. 103 // Name of the native messaging host.
136 std::string native_host_name_; 104 std::string native_host_name_;
137 105
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. 106 // Launcher used to launch the native process.
143 scoped_ptr<NativeProcessLauncher> launcher_; 107 scoped_ptr<NativeProcessLauncher> launcher_;
144 108
145 // Set to true after the native messaging connection has been stopped, e.g. 109 // Set to true after the native messaging connection has been stopped, e.g.
146 // due to an error. 110 // due to an error.
147 bool closed_; 111 bool closed_;
148 112
149 base::ProcessHandle process_handle_; 113 base::ProcessHandle process_handle_;
150 114
151 // Input stream reader. 115 // Input stream reader.
(...skipping 18 matching lines...) Expand all
170 134
171 // Queue for outgoing messages. 135 // Queue for outgoing messages.
172 std::queue<scoped_refptr<net::IOBufferWithSize> > write_queue_; 136 std::queue<scoped_refptr<net::IOBufferWithSize> > write_queue_;
173 137
174 // The message that's currently being sent. 138 // The message that's currently being sent.
175 scoped_refptr<net::DrainableIOBuffer> current_write_buffer_; 139 scoped_refptr<net::DrainableIOBuffer> current_write_buffer_;
176 140
177 // Set to true when a write is pending. 141 // Set to true when a write is pending.
178 bool write_pending_; 142 bool write_pending_;
179 143
144 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
145
180 DISALLOW_COPY_AND_ASSIGN(NativeMessageProcessHost); 146 DISALLOW_COPY_AND_ASSIGN(NativeMessageProcessHost);
181 }; 147 };
182 148
183 } // namespace extensions 149 } // namespace extensions
184 150
185 #endif // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_NATIVE_MESSAGE_PROCESS_HOST_H _ 151 #endif // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_NATIVE_MESSAGE_PROCESS_HOST_H _
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698