Allow WebContentsObservers to bind InterfaceRequests from frames.
WebContentsObservers will now be called prior to ContentBrowserClient::BindInterfaceRequestForFrame to see if they can bind requests for a particular RFH.
This allows us to wean the last few embedder use cases of RenderFrameHost's interface registry off it, to using their own.
[email protected]
TEST=Contextual search in Clank.
Cq-Include-Trybots: master.tryserver.chromium.linux:linux_site_isolation
Change-Id: I02afe864ead7352d8ef4829300518b9fe2d81e37
Reviewed-on: https://chromium-review.googlesource.com/544215
Commit-Queue: Ben Goodger <[email protected]>
Reviewed-by: Ken Rockot <[email protected]>
Cr-Commit-Position: refs/heads/master@{#488566}
diff --git a/chrome/browser/prerender/prerender_contents.cc b/chrome/browser/prerender/prerender_contents.cc
index 922dd26fe..6227364 100644
--- a/chrome/browser/prerender/prerender_contents.cc
+++ b/chrome/browser/prerender/prerender_contents.cc
@@ -221,6 +221,8 @@
network_bytes_(0),
weak_factory_(this) {
DCHECK(prerender_manager);
+ registry_.AddInterface(base::Bind(
+ &PrerenderContents::OnPrerenderCancelerRequest, base::Unretained(this)));
}
bool PrerenderContents::Init() {
@@ -531,12 +533,15 @@
Destroy(FINAL_STATUS_RENDERER_CRASHED);
}
+void PrerenderContents::OnInterfaceRequestFromFrame(
+ content::RenderFrameHost* render_frame_host,
+ const std::string& interface_name,
+ mojo::ScopedMessagePipeHandle* interface_pipe) {
+ registry_.TryBindInterface(interface_name, interface_pipe);
+}
+
void PrerenderContents::RenderFrameCreated(
content::RenderFrameHost* render_frame_host) {
- render_frame_host->GetInterfaceRegistry()->AddInterface(
- base::Bind(&PrerenderContents::OnPrerenderCancelerRequest,
- weak_factory_.GetWeakPtr()));
-
// When a new RenderFrame is created for a prerendering WebContents, tell the
// new RenderFrame it's being used for prerendering before any navigations
// occur. Note that this is always triggered before the first navigation, so