// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_PUBLIC_BROWSER_RENDER_FRAME_HOST_RECEIVER_SET_H_ #define CONTENT_PUBLIC_BROWSER_RENDER_FRAME_HOST_RECEIVER_SET_H_ #include <map> #include <vector> #include "base/compiler_specific.h" #include "base/memory/raw_ptr.h" #include "content/common/content_export.h" #include "content/public/browser/active_url_message_filter.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents_observer.h" #include "mojo/public/cpp/bindings/associated_receiver_set.h" #include "mojo/public/cpp/bindings/pending_associated_receiver.h" #include "third_party/abseil-cpp/absl/base/attributes.h" namespace content { class WebContents; // Owns a set of Channel-associated interface receivers with frame context on // message dispatch. // // When messages are dispatched to the implementation, the implementation can // call GetCurrentTargetFrame() on this object (see below) to determine which // frame sent the message. // // In order to expose the interface to all RenderFrames, a binder must be // registered for the interface. Typically this is done in // RegisterAssociatedInterfaceBindersForRenderFrameHost() in a // ContentBrowserClient subclass. Doing that will expose the interface to all // remote RenderFrame objects. If the WebContents is destroyed at any point, the // receivers will automatically reset and will cease to dispatch further // incoming messages. // // Because this object uses Channel-associated interface receivers, all messages // sent via these interfaces are ordered with respect to legacy Chrome IPC // messages on the relevant IPC::Channel (i.e. the Channel between the browser // and whatever render process hosts the sending frame.) // // Because this is a templated class, its complete implementation lives in the // header file. template <typename Interface> class CONTENT_EXPORT RenderFrameHostReceiverSet : public WebContentsObserver { … }; } // namespace content #endif // CONTENT_PUBLIC_BROWSER_RENDER_FRAME_HOST_RECEIVER_SET_H_