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

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: Address Sergey's feedback Created 6 years, 3 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"
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. 43 typedef NativeMessageHost::Client Client;
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 44
62 virtual ~NativeMessageProcessHost(); 45 virtual ~NativeMessageProcessHost();
63 46
64 // Returns policy permissions for the host with the specified name.
65 static PolicyPermission IsHostAllowed(const PrefService* pref_service,
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,
72 const std::string& native_host_name,
73 int destination_port,
74 bool allow_user_level);
75
76 // Create using specified |launcher|. Used in tests. 47 // Create using specified |launcher|. Used in tests.
77 static scoped_ptr<NativeMessageProcessHost> CreateWithLauncher( 48 static scoped_ptr<NativeMessageHost> CreateWithLauncher(
78 base::WeakPtr<Client> weak_client_ui, 49 base::WeakPtr<Client> weak_client,
79 const std::string& source_extension_id, 50 const std::string& source_extension_id,
80 const std::string& native_host_name, 51 const std::string& native_host_name,
81 int destination_port, 52 int destination_port,
82 scoped_ptr<NativeProcessLauncher> launcher); 53 scoped_ptr<NativeProcessLauncher> launcher);
83 54
84 // Send a message with the specified payload. 55 // extensions::NativeMessageHost implementation.
85 void Send(const std::string& json); 56 virtual void Send(const std::string& json) OVERRIDE;
86 57
87 #if defined(OS_POSIX) 58 #if defined(OS_POSIX)
88 // MessageLoopForIO::Watcher interface 59 // MessageLoopForIO::Watcher interface
89 virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE; 60 virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE;
90 virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE; 61 virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE;
91 #endif // !defined(OS_POSIX) 62 #endif // !defined(OS_POSIX)
92 63
93 // Try and read a single message from |read_file_|. This should only be called 64 // 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. 65 // in unittests when you know there is data in the file.
95 void ReadNowForTesting(); 66 void ReadNowForTesting();
96 67
97 private: 68 private:
98 NativeMessageProcessHost(base::WeakPtr<Client> weak_client_ui, 69 NativeMessageProcessHost(base::WeakPtr<Client> weak_client,
99 const std::string& source_extension_id, 70 const std::string& source_extension_id,
100 const std::string& native_host_name, 71 const std::string& native_host_name,
101 int destination_port, 72 int destination_port,
102 scoped_ptr<NativeProcessLauncher> launcher); 73 scoped_ptr<NativeProcessLauncher> launcher);
103 74
104 // Starts the host process. 75 // Starts the host process.
105 void LaunchHostProcess(); 76 void LaunchHostProcess();
106 77
107 // Callback for NativeProcessLauncher::Launch(). 78 // Callback for NativeProcessLauncher::Launch().
108 void OnHostProcessLaunched(NativeProcessLauncher::LaunchResult result, 79 void OnHostProcessLaunched(NativeProcessLauncher::LaunchResult result,
(...skipping 11 matching lines...) Expand all
120 // Helper methods to write outgoing messages. 91 // Helper methods to write outgoing messages.
121 void DoWrite(); 92 void DoWrite();
122 void HandleWriteResult(int result); 93 void HandleWriteResult(int result);
123 void OnWritten(int result); 94 void OnWritten(int result);
124 95
125 // Closes the connection. Called from OnError() and destructor. 96 // Closes the connection. Called from OnError() and destructor.
126 void Close(const std::string& error_message); 97 void Close(const std::string& error_message);
127 98
128 // The Client messages will be posted to. Should only be accessed from the 99 // The Client messages will be posted to. Should only be accessed from the
129 // UI thread. 100 // UI thread.
130 base::WeakPtr<Client> weak_client_ui_; 101 base::WeakPtr<Client> weak_client_;
131 102
132 // ID of the calling extension. 103 // ID of the calling extension.
133 std::string source_extension_id_; 104 std::string source_extension_id_;
134 105
135 // Name of the native messaging host. 106 // Name of the native messaging host.
136 std::string native_host_name_; 107 std::string native_host_name_;
137 108
138 // The id of the port on the other side of this connection. This is passed to 109 // The id of the port on the other side of this connection. This is passed to
139 // |weak_client_ui_| when posting messages. 110 // |weak_client_| when posting messages.
140 int destination_port_; 111 int destination_port_;
141 112
142 // Launcher used to launch the native process. 113 // Launcher used to launch the native process.
143 scoped_ptr<NativeProcessLauncher> launcher_; 114 scoped_ptr<NativeProcessLauncher> launcher_;
144 115
145 // Set to true after the native messaging connection has been stopped, e.g. 116 // Set to true after the native messaging connection has been stopped, e.g.
146 // due to an error. 117 // due to an error.
147 bool closed_; 118 bool closed_;
148 119
149 base::ProcessHandle process_handle_; 120 base::ProcessHandle process_handle_;
(...skipping 26 matching lines...) Expand all
176 147
177 // Set to true when a write is pending. 148 // Set to true when a write is pending.
178 bool write_pending_; 149 bool write_pending_;
179 150
180 DISALLOW_COPY_AND_ASSIGN(NativeMessageProcessHost); 151 DISALLOW_COPY_AND_ASSIGN(NativeMessageProcessHost);
181 }; 152 };
182 153
183 } // namespace extensions 154 } // namespace extensions
184 155
185 #endif // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_NATIVE_MESSAGE_PROCESS_HOST_H _ 156 #endif // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_NATIVE_MESSAGE_PROCESS_HOST_H _
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698