Chromium Code Reviews| Index: chrome/browser/extensions/api/messaging/extension_message_port.h |
| diff --git a/chrome/browser/extensions/api/messaging/extension_message_port.h b/chrome/browser/extensions/api/messaging/extension_message_port.h |
| index 79b8003e6e5815b44879def5e06219fee3b5ed71..8659181df638b46eb8479c456ce2c24abaa7db9e 100644 |
| --- a/chrome/browser/extensions/api/messaging/extension_message_port.h |
| +++ b/chrome/browser/extensions/api/messaging/extension_message_port.h |
| @@ -5,46 +5,79 @@ |
| #ifndef CHROME_BROWSER_EXTENSIONS_API_MESSAGING_EXTENSION_MESSAGE_PORT_H_ |
| #define CHROME_BROWSER_EXTENSIONS_API_MESSAGING_EXTENSION_MESSAGE_PORT_H_ |
| +#include "base/macros.h" |
| #include "chrome/browser/extensions/api/messaging/message_service.h" |
| class GURL; |
| namespace content { |
| +class BrowserContext; |
| +class RenderFrameHost; |
| class RenderProcessHost; |
| } // namespace content |
| +namespace IPC { |
| +class Message; |
| +} // namespace IPC |
| + |
| namespace extensions { |
| // A port that manages communication with an extension. |
| +// The port's lifetime will end when either all receivers close the port, or |
| +// when the opener / receiver explicitly closes the channel. |
| class ExtensionMessagePort : public MessageService::MessagePort { |
| public: |
| - ExtensionMessagePort(content::RenderProcessHost* process, |
| - int routing_id, |
| - const std::string& extension_id); |
| - void DispatchOnConnect(int dest_port_id, |
| - const std::string& channel_name, |
| + // Create a port that is tied to frame(s) in a single tab. |
| + ExtensionMessagePort(base::WeakPtr<MessageService> message_service, |
| + int port_id, |
| + const std::string& extension_id, |
| + content::RenderFrameHost* rfh, |
| + bool include_child_frames); |
| + // Create a port that is tied to all frames of an extension, possibly spanning |
| + // multiple tabs, including the invisible background page, popups, etc. |
| + ExtensionMessagePort(base::WeakPtr<MessageService> message_service, |
| + int port_id, |
| + const std::string& extension_id, |
| + content::RenderProcessHost* extension_process); |
| + ~ExtensionMessagePort() override; |
| + |
| + bool IsValidPort() override; |
|
Devlin
2015/12/10 21:53:06
// MessageService::MessagePort:
robwu
2015/12/11 00:53:47
Done.
|
| + void DispatchOnConnect(const std::string& channel_name, |
| scoped_ptr<base::DictionaryValue> source_tab, |
| int source_frame_id, |
| - int target_tab_id, |
| - int target_frame_id, |
| int guest_process_id, |
| int guest_render_frame_routing_id, |
| const std::string& source_extension_id, |
| const std::string& target_extension_id, |
| const GURL& source_url, |
| const std::string& tls_channel_id) override; |
| - void DispatchOnDisconnect(int source_port_id, |
| - const std::string& error_message) override; |
| - void DispatchOnMessage(const Message& message, int target_port_id) override; |
| + void DispatchOnDisconnect(const std::string& error_message) override; |
| + void DispatchOnMessage(const Message& message) override; |
| void IncrementLazyKeepaliveCount() override; |
| void DecrementLazyKeepaliveCount() override; |
| - content::RenderProcessHost* GetRenderProcessHost() override; |
| + void OpenPort(int process_id, int routing_id) override; |
| + void ClosePort(int process_id, int routing_id) override; |
| private: |
| - content::RenderProcessHost* process_; |
| - int routing_id_; |
| + class FrameTracker; |
| + |
| + void RegisterFrame(content::RenderFrameHost* rfh); |
| + void UnregisterFrame(content::RenderFrameHost* rfh); |
| + void CloseChannel(); |
| + void SendToPort(IPC::Message* msg); |
| + |
| + base::WeakPtr<MessageService> weak_message_service_; |
| + int port_id_; |
| std::string extension_id_; |
| - void* background_host_ptr_; // used in IncrementLazyKeepaliveCount |
| + bool did_create_port_; |
| + content::BrowserContext* browser_context_; |
| + std::set<content::RenderFrameHost*> frames_; |
| + // Only for receivers in an extension process. |
| + content::RenderProcessHost* extension_process_; |
| + ExtensionHost* background_host_ptr_; // used in IncrementLazyKeepaliveCount |
| + scoped_ptr<FrameTracker> frame_tracker_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ExtensionMessagePort); |
| }; |
| } // namespace extensions |