Adds associated interface support between RenderFrameHost and RenderFrame.
Introduces a new content::AssociatedInterfaceRegistry and
content::AssociatedInterfaceProvider to serve as Channel-associated
interface counterparts to their shell namesakes.
RenderFrameHost and RenderFrame each have both of these things on them,
and they're routed to the other side using a new RouteProvider interface
buried in RenderProcessHostImpl / ChildThreadImpl on either end.
Also adds a WebContentsInterfaceRegistry to every WebContents,
and a helper WebContentsFrameBindingSet<T> to allow consumers to
very easily manage the lifetime of associated interface bindings
for each frame in a WebContents.
See the follow-up patch for example usage.
Part a series of CLs to enable and demonstrate WebContents associated
interfaces:
1. https://codereview.chromium.org/2309513002
2. https://codereview.chromium.org/2316963005
3. This CL
4. https://codereview.chromium.org/2310583002
BUG=612500
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_site_isolation
Review-Url: https://codereview.chromium.org/2310563002
Cr-Commit-Position: refs/heads/master@{#418717}
diff --git a/ipc/ipc_channel_proxy.h b/ipc/ipc_channel_proxy.h
index 06b32671..14b5fe0 100644
--- a/ipc/ipc_channel_proxy.h
+++ b/ipc/ipc_channel_proxy.h
@@ -281,6 +281,9 @@
bool OnMessageReceived(const Message& message) override;
void OnChannelConnected(int32_t peer_pid) override;
void OnChannelError() override;
+ void OnAssociatedInterfaceRequest(
+ const std::string& interface_name,
+ mojo::ScopedInterfaceEndpointHandle handle) override;
// Like OnMessageReceived but doesn't try the filters.
bool OnMessageReceivedNoFilter(const Message& message);
@@ -325,6 +328,9 @@
void OnDispatchConnected();
void OnDispatchError();
void OnDispatchBadMessage(const Message& message);
+ void OnDispatchAssociatedInterfaceRequest(
+ const std::string& interface_name,
+ mojo::ScopedInterfaceEndpointHandle handle);
void SendFromThisThread(Message* message);
void ClearChannel();