// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef EXTENSIONS_BROWSER_API_MESSAGING_MESSAGE_SERVICE_H_ #define EXTENSIONS_BROWSER_API_MESSAGING_MESSAGE_SERVICE_H_ #include <map> #include <memory> #include <set> #include <string> #include <vector> #include "base/compiler_specific.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "extensions/browser/api/messaging/message_port.h" #include "extensions/browser/api/messaging/native_message_host.h" #include "extensions/browser/browser_context_keyed_api_factory.h" #include "extensions/browser/lazy_context_id.h" #include "extensions/browser/lazy_context_task_queue.h" #include "extensions/common/api/messaging/message.h" #include "extensions/common/api/messaging/port_id.h" #include "extensions/common/extension_id.h" class GURL; namespace content { class BrowserContext; } namespace extensions { namespace mojom { enum class ChannelType; } class ChannelEndpoint; class Extension; class ExtensionHost; class MessagingDelegate; struct MessagingEndpoint; struct PortContext; // This class manages message and event passing between renderer processes. // It maintains a list of processes that are listening to events and a set of // open channels. // // Messaging works this way: // - An extension-owned script context (like a background page or a content // script) adds an event listener to the "onConnect" event. // - Another context calls "runtime.connect()" to open a channel to the // extension process, or an extension context calls "tabs.connect(tabId)" to // open a channel to the content scripts for the given tab. The EMS notifies // the target process/tab, which then calls the onConnect event in every // context owned by the connecting extension in that process/tab. // - Once the channel is established, either side can call postMessage to send // a message to the opposite side of the channel, which may have multiple // listeners. // // Terminology: // channel: connection between two ports // port: One sender or receiver tied to one or more RenderFrameHost instances. class MessageService : public BrowserContextKeyedAPI, public MessagePort::ChannelDelegate { … }; } // namespace extensions #endif // EXTENSIONS_BROWSER_API_MESSAGING_MESSAGE_SERVICE_H_