Index: chrome/browser/debugger/extension_ports_remote_service.h |
=================================================================== |
--- chrome/browser/debugger/extension_ports_remote_service.h (revision 0) |
+++ chrome/browser/debugger/extension_ports_remote_service.h (revision 0) |
@@ -0,0 +1,105 @@ |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// ExtensionsPorts service: wires extension message ports through the |
+// devtools remote protocol, allowing an external client program to |
+// exchange messages with Chrome extensions. |
+ |
+#ifndef CHROME_BROWSER_DEBUGGER_EXTENSION_PORTS_REMOTE_SERVICE_H_ |
+#define CHROME_BROWSER_DEBUGGER_EXTENSION_PORTS_REMOTE_SERVICE_H_ |
+ |
+#include <set> |
+#include <string> |
+ |
+#include "base/basictypes.h" |
+#include "base/ref_counted.h" |
+#include "chrome/browser/debugger/devtools_remote.h" |
+#include "chrome/browser/extensions/extension_message_service.h" |
+#include "ipc/ipc_message.h" |
+ |
+class DevToolsProtocolHandler; |
+class DevToolsRemoteMessage; |
+class DictionaryValue; |
+class ListValue; |
+class Value; |
+ |
+class ExtensionPortsRemoteService : public DevToolsRemoteListener, |
+ public IPC::Message::Sender { |
+ public: |
+ // Specifies a tool name ("ExtensionPorts") handled by this class. |
+ static const std::string kToolName; |
+ |
+ // |delegate| (never NULL) is the protocol handler instance which |
+ // dispatches messages to this service. |
+ // The ownership of |delegate| is NOT transferred to this class. |
+ explicit ExtensionPortsRemoteService(DevToolsProtocolHandler* delegate); |
+ virtual ~ExtensionPortsRemoteService() {} |
+ |
+ // DevToolsRemoteListener methods: |
+ |
+ // Processes |message| from the external client (where the tool is |
+ // "ExtensionPorts"). |
+ virtual void HandleMessage(const DevToolsRemoteMessage& message); |
+ |
+ // Gets invoked on the external client socket connection loss. |
+ // Closes open message ports. |
+ virtual void OnConnectionLost(); |
+ |
+ // IPC::Message::Sender methods: |
+ |
+ // This is the callback through which the ExtensionMessageService |
+ // passes us messages from extensions as well as disconnect events. |
+ virtual bool Send(IPC::Message* msg); |
+ |
+ private: |
+ // Operation result returned in the "result" field in messages sent |
+ // to the external client. |
+ typedef enum { |
+ RESULT_OK = 0, |
+ RESULT_UNKNOWN_COMMAND, |
+ RESULT_NO_SERVICE, |
+ RESULT_PARAMETER_ERROR, |
+ RESULT_UNKNOWN_PORT, |
+ RESULT_TAB_NOT_FOUND, |
+ RESULT_CONNECT_FAILED, // probably extension ID not found. |
+ } Result; |
+ |
+ // Sends a JSON message with the |response| to the external client. |
+ // |tool| and |destination| are used as the respective header values. |
+ void SendResponse(const Value& response, |
+ const std::string& tool, |
+ const std::string& destination); |
+ |
+ // Handles a message from the ExtensionMessageService. |
+ void OnExtensionMessageInvoke( |
+ const std::string& function_name, const ListValue& args); |
+ // Handles a message sent from an extension through the |
+ // ExtensionMessageService, to be passed to the external client. |
+ void OnExtensionMessage(const std::string& message, int port_id); |
+ // Handles a disconnect event sent from the ExtensionMessageService. |
+ void OnExtensionPortDisconnected(int port_id); |
+ |
+ // Implementation for the commands we can receive from the external client. |
+ // Opens a channel to an extension. |
+ void ConnectCommand(DictionaryValue* content, DictionaryValue* response); |
+ // Disconnects a message port. |
+ void DisconnectCommand(int port_id, DictionaryValue* response); |
+ // Sends a message to an extension through an established message port. |
+ void PostMessageCommand(int port_id, DictionaryValue* content, |
+ DictionaryValue* response); |
+ |
+ // The delegate is used to send responses and events back to the |
+ // external client, and to resolve tab IDs. |
+ DevToolsProtocolHandler* delegate_; |
+ |
+ // Set of message port IDs we successfully opened. |
+ typedef std::set<int> PortIdSet; |
+ PortIdSet openPortIds_; |
+ |
+ scoped_refptr<ExtensionMessageService> service_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ExtensionPortsRemoteService); |
+}; |
+ |
+#endif // CHROME_BROWSER_DEBUGGER_EXTENSION_PORTS_REMOTE_SERVICE_H_ |
Property changes on: chrome/browser/debugger/extension_ports_remote_service.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |