Index: content/public/browser/render_frame_host.h |
diff --git a/content/public/browser/render_frame_host.h b/content/public/browser/render_frame_host.h |
index a3a88636f2c87e8dda41c233d5f9090288b23c4d..7d99138282fc94ee5d8de5dd71d83f09b4f83ac4 100644 |
--- a/content/public/browser/render_frame_host.h |
+++ b/content/public/browser/render_frame_host.h |
@@ -10,10 +10,13 @@ |
#include "base/callback_forward.h" |
#include "build/build_config.h" |
#include "content/common/content_export.h" |
+#include "content/public/browser/render_process_host.h" |
#include "content/public/common/console_message_level.h" |
#include "content/public/common/file_chooser_params.h" |
#include "ipc/ipc_listener.h" |
#include "ipc/ipc_sender.h" |
+#include "mojo/public/cpp/bindings/associated_interface_ptr.h" |
+#include "mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h" |
#include "third_party/WebKit/public/platform/WebPageVisibilityState.h" |
#include "ui/gfx/geometry/rect.h" |
#include "ui/gfx/native_widget_types.h" |
@@ -30,7 +33,6 @@ class InterfaceProvider; |
} |
namespace content { |
-class RenderProcessHost; |
class RenderViewHost; |
class RenderWidgetHostView; |
class SiteInstance; |
@@ -191,6 +193,22 @@ class CONTENT_EXPORT RenderFrameHost : public IPC::Listener, |
// interfaces exposed to it by the application running in this frame. |
virtual shell::InterfaceProvider* GetRemoteInterfaces() = 0; |
+ using RoutedInterfaceFactory = |
+ base::Callback<void(mojo::ScopedInterfaceEndpointHandle)>; |
+ |
+ // Adds an associated interface factory to this host, allowing the remote |
+ // RenderFrame to acquire a proxy to the interface on this specific host. |
+ virtual void AddRoutedInterface(const base::StringPiece& name, |
+ const RoutedInterfaceFactory& factory) = 0; |
+ |
+ virtual void RemoveRoutedInterface(const base::StringPiece& name) = 0; |
+ |
+ // Binds an interface proxy to be associated with the remote RenderFrame in |
+ // the render process. |
+ virtual void GetRemoteRoutedInterface( |
+ const base::StringPiece& name, |
+ mojo::ScopedInterfaceEndpointHandle handle) = 0; |
+ |
// Returns the visibility state of the frame. The different visibility states |
// of a frame are defined in Blink. |
virtual blink::WebPageVisibilityState GetVisibilityState() = 0; |
@@ -218,6 +236,14 @@ class CONTENT_EXPORT RenderFrameHost : public IPC::Listener, |
const TextSurroundingSelectionCallback& callback, |
int max_length) = 0; |
+ template <typename Interface> |
+ void GetRemoteRoutedInterface( |
+ mojo::AssociatedInterfacePtr<Interface>* proxy) { |
+ mojo::AssociatedInterfaceRequest<Interface> request = |
+ mojo::GetProxy(proxy, GetProcess()->GetRoutedInterfaceGroup()); |
+ GetRemoteRoutedInterface(Interface::Name_, request.PassHandle()); |
+ } |
+ |
private: |
// This interface should only be implemented inside content. |
friend class RenderFrameHostImpl; |