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 <memory> |
9 #include <set> | 10 #include <set> |
10 #include <string> | 11 #include <string> |
11 #include <vector> | 12 #include <vector> |
12 | 13 |
13 #include "base/compiler_specific.h" | 14 #include "base/compiler_specific.h" |
14 #include "base/macros.h" | 15 #include "base/macros.h" |
15 #include "base/memory/scoped_ptr.h" | |
16 #include "base/memory/weak_ptr.h" | 16 #include "base/memory/weak_ptr.h" |
17 #include "base/values.h" | 17 #include "base/values.h" |
18 #include "chrome/browser/extensions/api/messaging/message_property_provider.h" | 18 #include "chrome/browser/extensions/api/messaging/message_property_provider.h" |
19 #include "extensions/browser/api/messaging/native_message_host.h" | 19 #include "extensions/browser/api/messaging/native_message_host.h" |
20 #include "extensions/browser/browser_context_keyed_api_factory.h" | 20 #include "extensions/browser/browser_context_keyed_api_factory.h" |
21 #include "extensions/common/api/messaging/message.h" | 21 #include "extensions/common/api/messaging/message.h" |
22 | 22 |
23 class GURL; | 23 class GURL; |
24 class Profile; | 24 class Profile; |
25 | 25 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 virtual void RemoveCommonFrames(const MessagePort& port); | 69 virtual void RemoveCommonFrames(const MessagePort& port); |
70 | 70 |
71 // Check whether the given RenderFrameHost is associated with this port. | 71 // Check whether the given RenderFrameHost is associated with this port. |
72 virtual bool HasFrame(content::RenderFrameHost* rfh) const; | 72 virtual bool HasFrame(content::RenderFrameHost* rfh) const; |
73 | 73 |
74 // Called right before a port is connected to a channel. If false, the port | 74 // Called right before a port is connected to a channel. If false, the port |
75 // is not used and the channel is closed. | 75 // is not used and the channel is closed. |
76 virtual bool IsValidPort() = 0; | 76 virtual bool IsValidPort() = 0; |
77 | 77 |
78 // Notify the port that the channel has been opened. | 78 // Notify the port that the channel has been opened. |
79 virtual void DispatchOnConnect(const std::string& channel_name, | 79 virtual void DispatchOnConnect( |
80 scoped_ptr<base::DictionaryValue> source_tab, | 80 const std::string& channel_name, |
81 int source_frame_id, | 81 std::unique_ptr<base::DictionaryValue> source_tab, |
82 int guest_process_id, | 82 int source_frame_id, |
83 int guest_render_frame_routing_id, | 83 int guest_process_id, |
84 const std::string& source_extension_id, | 84 int guest_render_frame_routing_id, |
85 const std::string& target_extension_id, | 85 const std::string& source_extension_id, |
86 const GURL& source_url, | 86 const std::string& target_extension_id, |
87 const std::string& tls_channel_id) {} | 87 const GURL& source_url, |
| 88 const std::string& tls_channel_id) {} |
88 | 89 |
89 // Notify the port that the channel has been closed. If |error_message| is | 90 // Notify the port that the channel has been closed. If |error_message| is |
90 // non-empty, it indicates an error occurred while opening the connection. | 91 // non-empty, it indicates an error occurred while opening the connection. |
91 virtual void DispatchOnDisconnect(const std::string& error_message) {} | 92 virtual void DispatchOnDisconnect(const std::string& error_message) {} |
92 | 93 |
93 // Dispatch a message to this end of the communication. | 94 // Dispatch a message to this end of the communication. |
94 virtual void DispatchOnMessage(const Message& message) = 0; | 95 virtual void DispatchOnMessage(const Message& message) = 0; |
95 | 96 |
96 // Mark the port as opened by the specific frame. | 97 // Mark the port as opened by the specific frame. |
97 virtual void OpenPort(int process_id, int routing_id) {} | 98 virtual void OpenPort(int process_id, int routing_id) {} |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 PendingLazyBackgroundPageChannelMap; | 203 PendingLazyBackgroundPageChannelMap; |
203 | 204 |
204 // Common implementation for opening a channel configured by |params|. | 205 // Common implementation for opening a channel configured by |params|. |
205 // | 206 // |
206 // |target_extension| will be non-null if |params->target_extension_id| is | 207 // |target_extension| will be non-null if |params->target_extension_id| is |
207 // non-empty, that is, if the target is an extension, it must exist. | 208 // non-empty, that is, if the target is an extension, it must exist. |
208 // | 209 // |
209 // |did_enqueue| will be true if the channel opening was delayed while | 210 // |did_enqueue| will be true if the channel opening was delayed while |
210 // waiting for an event page to start, false otherwise. | 211 // waiting for an event page to start, false otherwise. |
211 void OpenChannelImpl(content::BrowserContext* browser_context, | 212 void OpenChannelImpl(content::BrowserContext* browser_context, |
212 scoped_ptr<OpenChannelParams> params, | 213 std::unique_ptr<OpenChannelParams> params, |
213 const Extension* target_extension, | 214 const Extension* target_extension, |
214 bool did_enqueue); | 215 bool did_enqueue); |
215 | 216 |
216 void ClosePortImpl(int port_id, | 217 void ClosePortImpl(int port_id, |
217 int process_id, | 218 int process_id, |
218 int routing_id, | 219 int routing_id, |
219 bool force_close, | 220 bool force_close, |
220 const std::string& error_message); | 221 const std::string& error_message); |
221 | 222 |
222 void CloseChannelImpl(MessageChannelMap::iterator channel_iter, | 223 void CloseChannelImpl(MessageChannelMap::iterator channel_iter, |
223 int port_id, | 224 int port_id, |
224 const std::string& error_message, | 225 const std::string& error_message, |
225 bool notify_other_port); | 226 bool notify_other_port); |
226 | 227 |
227 // Have MessageService take ownership of |channel|, and remove any pending | 228 // Have MessageService take ownership of |channel|, and remove any pending |
228 // channels with the same id. | 229 // channels with the same id. |
229 void AddChannel(MessageChannel* channel, int receiver_port_id); | 230 void AddChannel(MessageChannel* channel, int receiver_port_id); |
230 | 231 |
231 // If the channel is being opened from an incognito tab the user must allow | 232 // If the channel is being opened from an incognito tab the user must allow |
232 // the connection. | 233 // the connection. |
233 void OnOpenChannelAllowed(scoped_ptr<OpenChannelParams> params, bool allowed); | 234 void OnOpenChannelAllowed(std::unique_ptr<OpenChannelParams> params, |
234 void GotChannelID(scoped_ptr<OpenChannelParams> params, | 235 bool allowed); |
| 236 void GotChannelID(std::unique_ptr<OpenChannelParams> params, |
235 const std::string& tls_channel_id); | 237 const std::string& tls_channel_id); |
236 | 238 |
237 // Enqueues a message on a pending channel. | 239 // Enqueues a message on a pending channel. |
238 void EnqueuePendingMessage(int port_id, int channel_id, | 240 void EnqueuePendingMessage(int port_id, int channel_id, |
239 const Message& message); | 241 const Message& message); |
240 | 242 |
241 // Enqueues a message on a channel pending on a lazy background page load. | 243 // Enqueues a message on a channel pending on a lazy background page load. |
242 void EnqueuePendingMessageForLazyBackgroundLoad(int port_id, | 244 void EnqueuePendingMessageForLazyBackgroundLoad(int port_id, |
243 int channel_id, | 245 int channel_id, |
244 const Message& message); | 246 const Message& message); |
245 | 247 |
246 // Immediately sends a message to the given port. | 248 // Immediately sends a message to the given port. |
247 void DispatchMessage(int port_id, MessageChannel* channel, | 249 void DispatchMessage(int port_id, MessageChannel* channel, |
248 const Message& message); | 250 const Message& message); |
249 | 251 |
250 // Potentially registers a pending task with the LazyBackgroundTaskQueue | 252 // Potentially registers a pending task with the LazyBackgroundTaskQueue |
251 // to open a channel. Returns true if a task was queued. | 253 // to open a channel. Returns true if a task was queued. |
252 // Takes ownership of |params| if true is returned. | 254 // Takes ownership of |params| if true is returned. |
253 bool MaybeAddPendingLazyBackgroundPageOpenChannelTask( | 255 bool MaybeAddPendingLazyBackgroundPageOpenChannelTask( |
254 content::BrowserContext* context, | 256 content::BrowserContext* context, |
255 const Extension* extension, | 257 const Extension* extension, |
256 scoped_ptr<OpenChannelParams>* params, | 258 std::unique_ptr<OpenChannelParams>* params, |
257 const PendingMessagesQueue& pending_messages); | 259 const PendingMessagesQueue& pending_messages); |
258 | 260 |
259 // Callbacks for LazyBackgroundTaskQueue tasks. The queue passes in an | 261 // Callbacks for LazyBackgroundTaskQueue tasks. The queue passes in an |
260 // ExtensionHost to its task callbacks, though some of our callbacks don't | 262 // ExtensionHost to its task callbacks, though some of our callbacks don't |
261 // use that argument. | 263 // use that argument. |
262 void PendingLazyBackgroundPageOpenChannel( | 264 void PendingLazyBackgroundPageOpenChannel( |
263 scoped_ptr<OpenChannelParams> params, | 265 std::unique_ptr<OpenChannelParams> params, |
264 int source_process_id, | 266 int source_process_id, |
265 extensions::ExtensionHost* host); | 267 extensions::ExtensionHost* host); |
266 void PendingLazyBackgroundPageClosePort(int port_id, | 268 void PendingLazyBackgroundPageClosePort(int port_id, |
267 int process_id, | 269 int process_id, |
268 int routing_id, | 270 int routing_id, |
269 bool force_close, | 271 bool force_close, |
270 const std::string& error_message, | 272 const std::string& error_message, |
271 extensions::ExtensionHost* host) { | 273 extensions::ExtensionHost* host) { |
272 if (host) | 274 if (host) |
273 ClosePortImpl(port_id, process_id, routing_id, force_close, | 275 ClosePortImpl(port_id, process_id, routing_id, force_close, |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 LazyBackgroundTaskQueue* lazy_background_task_queue_; | 316 LazyBackgroundTaskQueue* lazy_background_task_queue_; |
315 | 317 |
316 base::WeakPtrFactory<MessageService> weak_factory_; | 318 base::WeakPtrFactory<MessageService> weak_factory_; |
317 | 319 |
318 DISALLOW_COPY_AND_ASSIGN(MessageService); | 320 DISALLOW_COPY_AND_ASSIGN(MessageService); |
319 }; | 321 }; |
320 | 322 |
321 } // namespace extensions | 323 } // namespace extensions |
322 | 324 |
323 #endif // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_MESSAGE_SERVICE_H_ | 325 #endif // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_MESSAGE_SERVICE_H_ |
OLD | NEW |