Index: chrome/browser/extensions/api/messaging/message_service.h |
diff --git a/chrome/browser/extensions/api/messaging/message_service.h b/chrome/browser/extensions/api/messaging/message_service.h |
index bc04a0f5ae0853b33a912603074b208228916e3d..e5d5322ba243835d821d17693f019535ec085826 100644 |
--- a/chrome/browser/extensions/api/messaging/message_service.h |
+++ b/chrome/browser/extensions/api/messaging/message_service.h |
@@ -19,6 +19,7 @@ |
#include "extensions/browser/api/messaging/native_message_host.h" |
#include "extensions/browser/browser_context_keyed_api_factory.h" |
#include "extensions/common/api/messaging/message.h" |
+#include "extensions/common/api/messaging/port_id.h" |
#include "extensions/common/extension_id.h" |
class GURL; |
@@ -122,10 +123,6 @@ class MessageService : public BrowserContextKeyedAPI { |
const PrefService* pref_service, |
const std::string& native_host_name); |
- // Allocates a pair of port ids. |
- // NOTE: this can be called from any thread. |
- static void AllocatePortIdPair(int* port1, int* port2); |
- |
explicit MessageService(content::BrowserContext* context); |
~MessageService() override; |
@@ -138,46 +135,49 @@ class MessageService : public BrowserContextKeyedAPI { |
// Given an extension's ID, opens a channel between the given renderer "port" |
// and every listening context owned by that extension. |channel_name| is |
// an optional identifier for use by extension developers. |
- void OpenChannelToExtension( |
- int source_process_id, int source_routing_id, int receiver_port_id, |
- const std::string& source_extension_id, |
- const std::string& target_extension_id, |
- const GURL& source_url, |
- const std::string& channel_name, |
- bool include_tls_channel_id); |
+ void OpenChannelToExtension(int source_process_id, |
+ int source_routing_id, |
+ const PortId& source_port_id, |
+ const std::string& source_extension_id, |
+ const std::string& target_extension_id, |
+ const GURL& source_url, |
+ const std::string& channel_name, |
+ bool include_tls_channel_id); |
// Same as above, but opens a channel to the tab with the given ID. Messages |
// are restricted to that tab, so if there are multiple tabs in that process, |
// only the targeted tab will receive messages. |
void OpenChannelToTab(int source_process_id, |
int source_routing_id, |
- int receiver_port_id, |
+ const PortId& source_port_id, |
int tab_id, |
int frame_id, |
const std::string& extension_id, |
const std::string& channel_name); |
- void OpenChannelToNativeApp( |
- int source_process_id, |
- int source_routing_id, |
- int receiver_port_id, |
- const std::string& native_app_name); |
+ void OpenChannelToNativeApp(int source_process_id, |
+ int source_routing_id, |
+ const PortId& source_port_id, |
+ const std::string& native_app_name); |
// Mark the given port as opened by the frame identified by |
// (process_id, routing_id). |
- void OpenPort(int port_id, int process_id, int routing_id); |
+ void OpenPort(const PortId& port_id, int process_id, int routing_id); |
// Closes the given port in the given frame. If this was the last frame or if |
// |force_close| is true, then the other side is closed as well. |
- void ClosePort(int port_id, int process_id, int routing_id, bool force_close); |
+ void ClosePort(const PortId& port_id, |
+ int process_id, |
+ int routing_id, |
+ bool force_close); |
// Closes the message channel associated with the given port, and notifies |
// the other side. |
- void CloseChannel(int port_id, const std::string& error_message); |
+ void CloseChannel(const PortId& port_id, const std::string& error_message); |
// Enqueues a message on a pending channel, or sends a message to the given |
// port if the channel isn't pending. |
- void PostMessage(int port_id, const Message& message); |
+ void PostMessage(const PortId& port_id, const Message& message); |
private: |
friend class MockMessageService; |
@@ -185,20 +185,21 @@ class MessageService : public BrowserContextKeyedAPI { |
struct OpenChannelParams; |
// A map of channel ID to its channel object. |
- using MessageChannelMap = std::map<int, std::unique_ptr<MessageChannel>>; |
+ using MessageChannelMap = |
+ std::map<ChannelId, std::unique_ptr<MessageChannel>>; |
- using PendingMessage = std::pair<int, Message>; |
+ using PendingMessage = std::pair<PortId, Message>; |
using PendingMessagesQueue = std::vector<PendingMessage>; |
// A set of channel IDs waiting to complete opening, and any pending messages |
// queued to be sent on those channels. |
- using PendingChannelMap = std::map<int, PendingMessagesQueue>; |
+ using PendingChannelMap = std::map<ChannelId, PendingMessagesQueue>; |
// A map of channel ID to information about the extension that is waiting |
// for that channel to open. Used for lazy background pages. |
using PendingLazyBackgroundPageChannel = |
std::pair<content::BrowserContext*, ExtensionId>; |
using PendingLazyBackgroundPageChannelMap = |
- std::map<int, PendingLazyBackgroundPageChannel>; |
+ std::map<ChannelId, PendingLazyBackgroundPageChannel>; |
// Common implementation for opening a channel configured by |params|. |
// |
@@ -212,21 +213,21 @@ class MessageService : public BrowserContextKeyedAPI { |
const Extension* target_extension, |
bool did_enqueue); |
- void ClosePortImpl(int port_id, |
+ void ClosePortImpl(const PortId& port_id, |
int process_id, |
int routing_id, |
bool force_close, |
const std::string& error_message); |
void CloseChannelImpl(MessageChannelMap::iterator channel_iter, |
- int port_id, |
+ const PortId& port_id, |
const std::string& error_message, |
bool notify_other_port); |
// Have MessageService take ownership of |channel|, and remove any pending |
// channels with the same id. |
void AddChannel(std::unique_ptr<MessageChannel> channel, |
- int receiver_port_id); |
+ const PortId& receiver_port_id); |
// If the channel is being opened from an incognito tab the user must allow |
// the connection. |
@@ -236,16 +237,18 @@ class MessageService : public BrowserContextKeyedAPI { |
const std::string& tls_channel_id); |
// Enqueues a message on a pending channel. |
- void EnqueuePendingMessage(int port_id, int channel_id, |
+ void EnqueuePendingMessage(const PortId& port_id, |
+ const ChannelId& channel_id, |
const Message& message); |
// Enqueues a message on a channel pending on a lazy background page load. |
- void EnqueuePendingMessageForLazyBackgroundLoad(int port_id, |
- int channel_id, |
+ void EnqueuePendingMessageForLazyBackgroundLoad(const PortId& port_id, |
+ const ChannelId& channel_id, |
const Message& message); |
// Immediately sends a message to the given port. |
- void DispatchMessage(int port_id, MessageChannel* channel, |
+ void DispatchMessage(const PortId& port_id, |
+ MessageChannel* channel, |
const Message& message); |
// Potentially registers a pending task with the LazyBackgroundTaskQueue |
@@ -264,7 +267,7 @@ class MessageService : public BrowserContextKeyedAPI { |
std::unique_ptr<OpenChannelParams> params, |
int source_process_id, |
extensions::ExtensionHost* host); |
- void PendingLazyBackgroundPageClosePort(int port_id, |
+ void PendingLazyBackgroundPageClosePort(const PortId& port_id, |
int process_id, |
int routing_id, |
bool force_close, |
@@ -274,7 +277,7 @@ class MessageService : public BrowserContextKeyedAPI { |
ClosePortImpl(port_id, process_id, routing_id, force_close, |
error_message); |
} |
- void PendingLazyBackgroundPagePostMessage(int port_id, |
+ void PendingLazyBackgroundPagePostMessage(const PortId& port_id, |
const Message& message, |
extensions::ExtensionHost* host) { |
if (host) |
@@ -284,11 +287,11 @@ class MessageService : public BrowserContextKeyedAPI { |
// Immediate dispatches a disconnect to |source| for |port_id|. Sets source's |
// runtime.lastMessage to |error_message|, if any. |
void DispatchOnDisconnect(content::RenderFrameHost* source, |
- int port_id, |
+ const PortId& port_id, |
const std::string& error_message); |
void DispatchPendingMessages(const PendingMessagesQueue& queue, |
- int channel_id); |
+ const ChannelId& channel_id); |
// BrowserContextKeyedAPI implementation. |
static const char* service_name() { |