OLD | NEW |
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_MESSAGE_SERVICE_H_ | 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_MESSAGING_MESSAGE_SERVICE_H_ |
6 #define CHROME_BROWSER_EXTENSIONS_API_MESSAGING_MESSAGE_SERVICE_H_ | 6 #define CHROME_BROWSER_EXTENSIONS_API_MESSAGING_MESSAGE_SERVICE_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <set> | 9 #include <set> |
10 #include <string> | 10 #include <string> |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 MessagePort() {} | 102 MessagePort() {} |
103 | 103 |
104 private: | 104 private: |
105 DISALLOW_COPY_AND_ASSIGN(MessagePort); | 105 DISALLOW_COPY_AND_ASSIGN(MessagePort); |
106 }; | 106 }; |
107 | 107 |
108 // Allocates a pair of port ids. | 108 // Allocates a pair of port ids. |
109 // NOTE: this can be called from any thread. | 109 // NOTE: this can be called from any thread. |
110 static void AllocatePortIdPair(int* port1, int* port2); | 110 static void AllocatePortIdPair(int* port1, int* port2); |
111 | 111 |
112 explicit MessageService(Profile* profile); | 112 explicit MessageService(content::BrowserContext* context); |
113 virtual ~MessageService(); | 113 virtual ~MessageService(); |
114 | 114 |
115 // ProfileKeyedAPI implementation. | 115 // ProfileKeyedAPI implementation. |
116 static ProfileKeyedAPIFactory<MessageService>* GetFactoryInstance(); | 116 static ProfileKeyedAPIFactory<MessageService>* GetFactoryInstance(); |
117 | 117 |
118 // Convenience method to get the MessageService for a browser context. | 118 // Convenience method to get the MessageService for a browser context. |
119 static MessageService* Get(content::BrowserContext* profile); | 119 static MessageService* Get(content::BrowserContext* context); |
120 | 120 |
121 // Given an extension's ID, opens a channel between the given renderer "port" | 121 // Given an extension's ID, opens a channel between the given renderer "port" |
122 // and every listening context owned by that extension. |channel_name| is | 122 // and every listening context owned by that extension. |channel_name| is |
123 // an optional identifier for use by extension developers. | 123 // an optional identifier for use by extension developers. |
124 void OpenChannelToExtension( | 124 void OpenChannelToExtension( |
125 int source_process_id, int source_routing_id, int receiver_port_id, | 125 int source_process_id, int source_routing_id, int receiver_port_id, |
126 const std::string& source_extension_id, | 126 const std::string& source_extension_id, |
127 const std::string& target_extension_id, | 127 const std::string& target_extension_id, |
128 const GURL& source_url, | 128 const GURL& source_url, |
129 const std::string& channel_name, | 129 const std::string& channel_name, |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 | 168 |
169 typedef std::pair<int, Message> PendingMessage; | 169 typedef std::pair<int, Message> PendingMessage; |
170 typedef std::vector<PendingMessage> PendingMessagesQueue; | 170 typedef std::vector<PendingMessage> PendingMessagesQueue; |
171 // A set of channel IDs waiting for TLS channel IDs to complete opening, | 171 // A set of channel IDs waiting for TLS channel IDs to complete opening, |
172 // and any pending messages queued to be sent on those channels. | 172 // and any pending messages queued to be sent on those channels. |
173 typedef std::map<int, PendingMessagesQueue> PendingTlsChannelIdMap; | 173 typedef std::map<int, PendingMessagesQueue> PendingTlsChannelIdMap; |
174 | 174 |
175 // A map of channel ID to information about the extension that is waiting | 175 // A map of channel ID to information about the extension that is waiting |
176 // for that channel to open. Used for lazy background pages. | 176 // for that channel to open. Used for lazy background pages. |
177 typedef std::string ExtensionID; | 177 typedef std::string ExtensionID; |
178 typedef std::pair<Profile*, ExtensionID> PendingLazyBackgroundPageChannel; | 178 typedef std::pair<content::BrowserContext*, ExtensionID> |
| 179 PendingLazyBackgroundPageChannel; |
179 typedef std::map<int, PendingLazyBackgroundPageChannel> | 180 typedef std::map<int, PendingLazyBackgroundPageChannel> |
180 PendingLazyBackgroundPageChannelMap; | 181 PendingLazyBackgroundPageChannelMap; |
181 | 182 |
182 // Common among OpenChannel* variants. | 183 // Common among OpenChannel* variants. |
183 bool OpenChannelImpl(scoped_ptr<OpenChannelParams> params); | 184 bool OpenChannelImpl(scoped_ptr<OpenChannelParams> params); |
184 | 185 |
185 void CloseChannelImpl(MessageChannelMap::iterator channel_iter, | 186 void CloseChannelImpl(MessageChannelMap::iterator channel_iter, |
186 int port_id, | 187 int port_id, |
187 const std::string& error_message, | 188 const std::string& error_message, |
188 bool notify_other_port); | 189 bool notify_other_port); |
(...skipping 23 matching lines...) Expand all Loading... |
212 const Message& message); | 213 const Message& message); |
213 | 214 |
214 // Immediately sends a message to the given port. | 215 // Immediately sends a message to the given port. |
215 void DispatchMessage(int port_id, MessageChannel* channel, | 216 void DispatchMessage(int port_id, MessageChannel* channel, |
216 const Message& message); | 217 const Message& message); |
217 | 218 |
218 // Potentially registers a pending task with the LazyBackgroundTaskQueue | 219 // Potentially registers a pending task with the LazyBackgroundTaskQueue |
219 // to open a channel. Returns true if a task was queued. | 220 // to open a channel. Returns true if a task was queued. |
220 // Takes ownership of |params| if true is returned. | 221 // Takes ownership of |params| if true is returned. |
221 bool MaybeAddPendingLazyBackgroundPageOpenChannelTask( | 222 bool MaybeAddPendingLazyBackgroundPageOpenChannelTask( |
222 Profile* profile, | 223 content::BrowserContext* context, |
223 const Extension* extension, | 224 const Extension* extension, |
224 OpenChannelParams* params); | 225 OpenChannelParams* params); |
225 | 226 |
226 // Callbacks for LazyBackgroundTaskQueue tasks. The queue passes in an | 227 // Callbacks for LazyBackgroundTaskQueue tasks. The queue passes in an |
227 // ExtensionHost to its task callbacks, though some of our callbacks don't | 228 // ExtensionHost to its task callbacks, though some of our callbacks don't |
228 // use that argument. | 229 // use that argument. |
229 void PendingLazyBackgroundPageOpenChannel( | 230 void PendingLazyBackgroundPageOpenChannel( |
230 scoped_ptr<OpenChannelParams> params, | 231 scoped_ptr<OpenChannelParams> params, |
231 int source_process_id, | 232 int source_process_id, |
232 extensions::ExtensionHost* host); | 233 extensions::ExtensionHost* host); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 LazyBackgroundTaskQueue* lazy_background_task_queue_; | 268 LazyBackgroundTaskQueue* lazy_background_task_queue_; |
268 | 269 |
269 base::WeakPtrFactory<MessageService> weak_factory_; | 270 base::WeakPtrFactory<MessageService> weak_factory_; |
270 | 271 |
271 DISALLOW_COPY_AND_ASSIGN(MessageService); | 272 DISALLOW_COPY_AND_ASSIGN(MessageService); |
272 }; | 273 }; |
273 | 274 |
274 } // namespace extensions | 275 } // namespace extensions |
275 | 276 |
276 #endif // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_MESSAGE_SERVICE_H_ | 277 #endif // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_MESSAGE_SERVICE_H_ |
OLD | NEW |