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

Side by Side Diff: chrome/browser/extensions/api/messaging/extension_message_port.h

Issue 2547753002: [Extensions] Extension Port Ids and Initialization 2.0 (Closed)
Patch Set: rebase + unguessable token Created 4 years 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_EXTENSION_MESSAGE_PORT_H_ 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_MESSAGING_EXTENSION_MESSAGE_PORT_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_MESSAGING_EXTENSION_MESSAGE_PORT_H_ 6 #define CHROME_BROWSER_EXTENSIONS_API_MESSAGING_EXTENSION_MESSAGE_PORT_H_
7 7
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "chrome/browser/extensions/api/messaging/message_service.h" 9 #include "chrome/browser/extensions/api/messaging/message_service.h"
10 #include "extensions/common/api/messaging/port_id.h"
10 11
11 class GURL; 12 class GURL;
12 13
13 namespace content { 14 namespace content {
14 class BrowserContext; 15 class BrowserContext;
15 class RenderFrameHost; 16 class RenderFrameHost;
16 class RenderProcessHost; 17 class RenderProcessHost;
17 } // namespace content 18 } // namespace content
18 19
19 namespace IPC { 20 namespace IPC {
20 class Message; 21 class Message;
21 } // namespace IPC 22 } // namespace IPC
22 23
23 namespace extensions { 24 namespace extensions {
24 25
25 // A port that manages communication with an extension. 26 // A port that manages communication with an extension.
26 // The port's lifetime will end when either all receivers close the port, or 27 // The port's lifetime will end when either all receivers close the port, or
27 // when the opener / receiver explicitly closes the channel. 28 // when the opener / receiver explicitly closes the channel.
28 class ExtensionMessagePort : public MessageService::MessagePort { 29 class ExtensionMessagePort : public MessageService::MessagePort {
29 public: 30 public:
30 // Create a port that is tied to frame(s) in a single tab. 31 // Create a port that is tied to frame(s) in a single tab.
31 ExtensionMessagePort(base::WeakPtr<MessageService> message_service, 32 ExtensionMessagePort(base::WeakPtr<MessageService> message_service,
32 int port_id, 33 const PortId& port_id,
33 const std::string& extension_id, 34 const std::string& extension_id,
34 content::RenderFrameHost* rfh, 35 content::RenderFrameHost* rfh,
35 bool include_child_frames); 36 bool include_child_frames);
36 // Create a port that is tied to all frames of an extension, possibly spanning 37 // Create a port that is tied to all frames of an extension, possibly spanning
37 // multiple tabs, including the invisible background page, popups, etc. 38 // multiple tabs, including the invisible background page, popups, etc.
38 ExtensionMessagePort(base::WeakPtr<MessageService> message_service, 39 ExtensionMessagePort(base::WeakPtr<MessageService> message_service,
39 int port_id, 40 const PortId& port_id,
40 const std::string& extension_id, 41 const std::string& extension_id,
41 content::RenderProcessHost* extension_process); 42 content::RenderProcessHost* extension_process);
42 ~ExtensionMessagePort() override; 43 ~ExtensionMessagePort() override;
43 44
44 // Checks whether the frames to which this port is tied at its construction 45 // Checks whether the frames to which this port is tied at its construction
45 // are still aware of this port's existence. Frames that don't know about 46 // are still aware of this port's existence. Frames that don't know about
46 // the port are removed from the set of frames. This should be used for opener 47 // the port are removed from the set of frames. This should be used for opener
47 // ports because the frame may be navigated before the port was initialized. 48 // ports because the frame may be navigated before the port was initialized.
48 void RevalidatePort(); 49 void RevalidatePort();
49 50
(...skipping 28 matching lines...) Expand all
78 void UnregisterFrame(content::RenderFrameHost* rfh); 79 void UnregisterFrame(content::RenderFrameHost* rfh);
79 80
80 // Immediately close the port and its associated channel. 81 // Immediately close the port and its associated channel.
81 void CloseChannel(); 82 void CloseChannel();
82 83
83 // Send a IPC message to the renderer for all registered frames. 84 // Send a IPC message to the renderer for all registered frames.
84 void SendToPort(std::unique_ptr<IPC::Message> msg); 85 void SendToPort(std::unique_ptr<IPC::Message> msg);
85 86
86 base::WeakPtr<MessageService> weak_message_service_; 87 base::WeakPtr<MessageService> weak_message_service_;
87 88
88 int port_id_; 89 const PortId port_id_;
89 std::string extension_id_; 90 std::string extension_id_;
90 content::BrowserContext* browser_context_; 91 content::BrowserContext* browser_context_;
91 // Only for receivers in an extension process. 92 // Only for receivers in an extension process.
92 content::RenderProcessHost* extension_process_; 93 content::RenderProcessHost* extension_process_;
93 94
94 // When the port is used as a sender, this set contains only one element. 95 // When the port is used as a sender, this set contains only one element.
95 // If used as a receiver, it may contain any number of frames. 96 // If used as a receiver, it may contain any number of frames.
96 // This set is populated before the first message is sent to the destination, 97 // This set is populated before the first message is sent to the destination,
97 // and shrinks over time when the port is rejected by the recipient frame, or 98 // and shrinks over time when the port is rejected by the recipient frame, or
98 // when the frame is removed or unloaded. 99 // when the frame is removed or unloaded.
99 std::set<content::RenderFrameHost*> frames_; 100 std::set<content::RenderFrameHost*> frames_;
100 101
101 // Whether the renderer acknowledged creation of the port. This is used to 102 // Whether the renderer acknowledged creation of the port. This is used to
102 // distinguish abnormal port closure (e.g. no receivers) from explicit port 103 // distinguish abnormal port closure (e.g. no receivers) from explicit port
103 // closure (e.g. by the port.disconnect() JavaScript method in the renderer). 104 // closure (e.g. by the port.disconnect() JavaScript method in the renderer).
104 bool did_create_port_; 105 bool did_create_port_;
105 106
106 ExtensionHost* background_host_ptr_; // used in IncrementLazyKeepaliveCount 107 ExtensionHost* background_host_ptr_; // used in IncrementLazyKeepaliveCount
107 std::unique_ptr<FrameTracker> frame_tracker_; 108 std::unique_ptr<FrameTracker> frame_tracker_;
108 109
109 DISALLOW_COPY_AND_ASSIGN(ExtensionMessagePort); 110 DISALLOW_COPY_AND_ASSIGN(ExtensionMessagePort);
110 }; 111 };
111 112
112 } // namespace extensions 113 } // namespace extensions
113 114
114 #endif // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_EXTENSION_MESSAGE_PORT_H_ 115 #endif // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_EXTENSION_MESSAGE_PORT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698