| Index: chrome/browser/extensions/api/messaging/native_message_process_host.h
|
| diff --git a/chrome/browser/extensions/api/messaging/native_message_process_host.h b/chrome/browser/extensions/api/messaging/native_message_process_host.h
|
| index d629b089220de77641eca3596ad40710e73c5564..59e3ecc430e82dc93f6c367e95978937c9f97ba5 100644
|
| --- a/chrome/browser/extensions/api/messaging/native_message_process_host.h
|
| +++ b/chrome/browser/extensions/api/messaging/native_message_process_host.h
|
| @@ -28,8 +28,6 @@ class NativeMessageProcessHost
|
| : public MessageLoopForIO::Watcher {
|
| #endif // defined(OS_WIN)
|
| public:
|
| - class ScopedNativeProcessClose;
|
| -
|
| #if defined(OS_WIN)
|
| typedef HANDLE FileHandle;
|
| typedef base::win::ScopedHandle ScopedFileHandle;
|
| @@ -38,25 +36,6 @@ class NativeMessageProcessHost
|
| typedef file_util::ScopedFD ScopedFileHandle;
|
| #endif // defined(OS_WIN)
|
|
|
| - typedef scoped_ptr_malloc<NativeMessageProcessHost, ScopedNativeProcessClose>
|
| - ScopedHost;
|
| -
|
| - typedef base::Callback<void(ScopedHost host)> CreateCallback;
|
| -
|
| - // Append any new types to the end. Changing the ordering will break native
|
| - // apps.
|
| - enum MessageType {
|
| - TYPE_SEND_MESSAGE_REQUEST, // Used when an extension is sending a one-off
|
| - // message to a native app.
|
| - TYPE_SEND_MESSAGE_RESPONSE, // Used by a native app to respond to a one-off
|
| - // message.
|
| - TYPE_CONNECT, // Used when an extension wants to establish a persistent
|
| - // connection with a native app.
|
| - TYPE_CONNECT_MESSAGE, // Used for messages after a connection has already
|
| - // been established.
|
| - NUM_MESSAGE_TYPES // The number of types of messages.
|
| - };
|
| -
|
| // Interface for classes that which to recieve messages from the native
|
| // process.
|
| class Client {
|
| @@ -68,43 +47,22 @@ class NativeMessageProcessHost
|
| virtual void CloseChannel(int port_id, bool error) = 0;
|
| };
|
|
|
| - // Desctruction functor that ensures a NativeMessageProcessHost is destroyed
|
| - // on the FILE thread.
|
| - class ScopedNativeProcessClose {
|
| - public:
|
| - inline void operator()(extensions::NativeMessageProcessHost* x) const {
|
| - content::BrowserThread::DeleteSoon(content::BrowserThread::FILE,
|
| - FROM_HERE, x);
|
| - }
|
| - };
|
| + virtual ~NativeMessageProcessHost();
|
|
|
| + static scoped_ptr<NativeMessageProcessHost> Create(
|
| + base::WeakPtr<Client> weak_client_ui,
|
| + const std::string& native_host_name,
|
| + int destination_port);
|
|
|
| - virtual ~NativeMessageProcessHost();
|
| + // Create using specified |launcher|. Used in tests.
|
| + static scoped_ptr<NativeMessageProcessHost> CreateWithLauncher(
|
| + base::WeakPtr<Client> weak_client_ui,
|
| + const std::string& native_host_name,
|
| + int destination_port,
|
| + scoped_ptr<NativeProcessLauncher> launcher);
|
|
|
| - // |type| must be TYPE_CONNECT or TYPE_SEND_MESSAGE_REQUEST. |callback| will
|
| - // be called with an empty ScopedHost on error.
|
| - static void Create(base::WeakPtr<Client> weak_client_ui,
|
| - const std::string& native_app_name,
|
| - const std::string& connection_message,
|
| - int destination_port,
|
| - MessageType type,
|
| - CreateCallback callback);
|
| -
|
| - // Create a NativeMessageProcessHost using the specified launcher. This allows
|
| - // for easy testing.
|
| - static void CreateWithLauncher(base::WeakPtr<Client> weak_client_ui,
|
| - const std::string& native_app_name,
|
| - const std::string& connection_message,
|
| - int destination_port,
|
| - MessageType type,
|
| - CreateCallback callback,
|
| - const NativeProcessLauncher& launcher);
|
| -
|
| - // TYPE_SEND_MESSAGE_REQUEST will be sent via the connection message in
|
| - // NativeMessageProcessHost::Create, so only TYPE_CONNECT_MESSAGE is expected.
|
| - void Send(const std::string& json) {
|
| - SendImpl(TYPE_CONNECT_MESSAGE, json);
|
| - }
|
| + // Send a message with the specified payload.
|
| + void Send(const std::string& json);
|
|
|
| // Try and read a single message from |read_file_|. This should only be called
|
| // in unittests when you know there is data in the file.
|
| @@ -112,24 +70,22 @@ class NativeMessageProcessHost
|
|
|
| private:
|
| NativeMessageProcessHost(base::WeakPtr<Client> weak_client_ui,
|
| + const std::string& native_host_name,
|
| int destination_port,
|
| - base::ProcessHandle native_process_handle,
|
| - FileHandle read_fd,
|
| - FileHandle write_fd,
|
| - bool is_send_message);
|
| + scoped_ptr<NativeProcessLauncher> launcher);
|
| +
|
| + // Starts the host process.
|
| + void LaunchHostProcess(scoped_ptr<NativeProcessLauncher> launcher);
|
|
|
| // Initialize any IO watching that needs to occur between the native process.
|
| void InitIO();
|
|
|
| - // Send a message to the native process with the specified type and payload.
|
| - void SendImpl(MessageType type, const std::string& json);
|
| -
|
| // Write a message/data to the native process.
|
| - bool WriteMessage(MessageType type, const std::string& message);
|
| + bool WriteMessage(const std::string& message);
|
| bool WriteData(FileHandle file, const char* data, size_t bytes_to_write);
|
|
|
| // Read a message/data from the native process.
|
| - bool ReadMessage(MessageType* type, std::string* messgae);
|
| + bool ReadMessage(std::string* message);
|
| bool ReadData(FileHandle file, char* data, size_t bytes_to_write);
|
|
|
| #if defined(OS_POSIX)
|
| @@ -156,6 +112,9 @@ class NativeMessageProcessHost
|
| // UI thread.
|
| base::WeakPtr<Client> weak_client_ui_;
|
|
|
| + // Name of the native messaging host.
|
| + std::string native_host_name_;
|
| +
|
| // The id of the port on the other side of this connection. This is passed to
|
| // |weak_client_ui_| when posting messages.
|
| int destination_port_;
|
| @@ -167,9 +126,6 @@ class NativeMessageProcessHost
|
| ScopedFileHandle scoped_read_file_;
|
| ScopedFileHandle scoped_write_file_;
|
|
|
| - // Only looking for one response.
|
| - bool is_send_message_;
|
| -
|
| DISALLOW_COPY_AND_ASSIGN(NativeMessageProcessHost);
|
| };
|
|
|
|
|