| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 // ExtensionsPorts service: wires extension message ports through the | |
| 6 // devtools remote protocol, allowing an external client program to | |
| 7 // exchange messages with Chrome extensions. | |
| 8 | |
| 9 #ifndef CHROME_BROWSER_DEBUGGER_EXTENSION_PORTS_REMOTE_SERVICE_H_ | |
| 10 #define CHROME_BROWSER_DEBUGGER_EXTENSION_PORTS_REMOTE_SERVICE_H_ | |
| 11 #pragma once | |
| 12 | |
| 13 #include <set> | |
| 14 #include <string> | |
| 15 | |
| 16 #include "base/basictypes.h" | |
| 17 #include "base/memory/ref_counted.h" | |
| 18 #include "chrome/browser/extensions/extension_message_service.h" | |
| 19 #include "content/browser/debugger/devtools_remote.h" | |
| 20 #include "ipc/ipc_message.h" | |
| 21 | |
| 22 class DevToolsProtocolHandler; | |
| 23 class DevToolsRemoteMessage; | |
| 24 class DictionaryValue; | |
| 25 class GURL; | |
| 26 class ListValue; | |
| 27 class Value; | |
| 28 | |
| 29 class ExtensionPortsRemoteService : public DevToolsRemoteListener, | |
| 30 public IPC::Message::Sender { | |
| 31 public: | |
| 32 // Specifies a tool name ("ExtensionPorts") handled by this class. | |
| 33 static const std::string kToolName; | |
| 34 | |
| 35 // |delegate| (never NULL) is the protocol handler instance which | |
| 36 // dispatches messages to this service. | |
| 37 // The ownership of |delegate| is NOT transferred to this class. | |
| 38 explicit ExtensionPortsRemoteService(DevToolsProtocolHandler* delegate); | |
| 39 | |
| 40 // DevToolsRemoteListener methods: | |
| 41 | |
| 42 // Processes |message| from the external client (where the tool is | |
| 43 // "ExtensionPorts"). | |
| 44 virtual void HandleMessage(const DevToolsRemoteMessage& message); | |
| 45 | |
| 46 // Gets invoked on the external client socket connection loss. | |
| 47 // Closes open message ports. | |
| 48 virtual void OnConnectionLost(); | |
| 49 | |
| 50 // IPC::Message::Sender methods: | |
| 51 | |
| 52 // This is the callback through which the ExtensionMessageService | |
| 53 // passes us messages from extensions as well as disconnect events. | |
| 54 virtual bool Send(IPC::Message* msg); | |
| 55 | |
| 56 private: | |
| 57 // Operation result returned in the "result" field in messages sent | |
| 58 // to the external client. | |
| 59 typedef enum { | |
| 60 RESULT_OK = 0, | |
| 61 RESULT_UNKNOWN_COMMAND, | |
| 62 RESULT_NO_SERVICE, | |
| 63 RESULT_PARAMETER_ERROR, | |
| 64 RESULT_UNKNOWN_PORT, | |
| 65 RESULT_TAB_NOT_FOUND, | |
| 66 RESULT_CONNECT_FAILED, // probably extension ID not found. | |
| 67 } Result; | |
| 68 | |
| 69 virtual ~ExtensionPortsRemoteService(); | |
| 70 | |
| 71 // Sends a JSON message with the |response| to the external client. | |
| 72 // |tool| and |destination| are used as the respective header values. | |
| 73 void SendResponse(const Value& response, | |
| 74 const std::string& tool, | |
| 75 const std::string& destination); | |
| 76 | |
| 77 // Handles a message from the ExtensionMessageService. | |
| 78 void OnExtensionMessageInvoke(const std::string& extension_id, | |
| 79 const std::string& function_name, | |
| 80 const ListValue& args, | |
| 81 const GURL& event_url); | |
| 82 // Handles a message sent from an extension through the | |
| 83 // ExtensionMessageService, to be passed to the external client. | |
| 84 void OnExtensionMessage(const std::string& message, int port_id); | |
| 85 // Handles a disconnect event sent from the ExtensionMessageService. | |
| 86 void OnExtensionPortDisconnected(int port_id); | |
| 87 | |
| 88 // Implementation for the commands we can receive from the external client. | |
| 89 // Opens a channel to an extension. | |
| 90 void ConnectCommand(DictionaryValue* content, DictionaryValue* response); | |
| 91 // Disconnects a message port. | |
| 92 void DisconnectCommand(int port_id, DictionaryValue* response); | |
| 93 // Sends a message to an extension through an established message port. | |
| 94 void PostMessageCommand(int port_id, DictionaryValue* content, | |
| 95 DictionaryValue* response); | |
| 96 | |
| 97 // The delegate is used to send responses and events back to the | |
| 98 // external client, and to resolve tab IDs. | |
| 99 DevToolsProtocolHandler* delegate_; | |
| 100 | |
| 101 // Set of message port IDs we successfully opened. | |
| 102 typedef std::set<int> PortIdSet; | |
| 103 PortIdSet openPortIds_; | |
| 104 | |
| 105 scoped_refptr<ExtensionMessageService> service_; | |
| 106 | |
| 107 DISALLOW_COPY_AND_ASSIGN(ExtensionPortsRemoteService); | |
| 108 }; | |
| 109 | |
| 110 #endif // CHROME_BROWSER_DEBUGGER_EXTENSION_PORTS_REMOTE_SERVICE_H_ | |
| OLD | NEW |