Focusing or hovering over a link in an OOPIF should show a status bubble
Bug: 807776
Change-Id: I6219d7a8bc5a4b2fb608dfde1d0859739a35949f
Reviewed-on: https://chromium-review.googlesource.com/898434
Commit-Queue: Ćukasz Anforowicz <[email protected]>
Reviewed-by: Nasko Oskov <[email protected]>
Cr-Commit-Position: refs/heads/master@{#535104}
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 4d3cc523..8ceb704 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -3783,7 +3783,7 @@
// clicking on a link); see bugs 1184641 and 980803. We don't want to
// clear the bubble when a user navigates to a named anchor in the same
// page.
- UpdateTargetURL(render_frame_host->GetRenderViewHost(), GURL());
+ ClearTargetURL();
RenderWidgetHostViewBase* rwhvb =
static_cast<RenderWidgetHostViewBase*>(GetRenderWidgetHostView());
@@ -4951,16 +4951,29 @@
void WebContentsImpl::UpdateTargetURL(RenderViewHost* render_view_host,
const GURL& url) {
if (fullscreen_widget_routing_id_ != MSG_ROUTING_NONE) {
- // If we're fullscreen only update the url if it's from the fullscreen
- // renderer.
+ // If we're in flash fullscreen (i.e. Pepper plugin fullscreen) only update
+ // the url if it's from the fullscreen renderer.
RenderWidgetHostView* fs = GetFullscreenRenderWidgetHostView();
if (fs && fs->GetRenderWidgetHost() != render_view_host->GetWidget())
return;
}
+
+ // In case of racey updates from multiple RenderViewHosts, the last URL should
+ // be shown - see also some discussion in https://crbug.com/807776.
+ if (!url.is_valid() && render_view_host != view_that_set_last_target_url_)
+ return;
+ view_that_set_last_target_url_ = url.is_valid() ? render_view_host : nullptr;
+
if (delegate_)
delegate_->UpdateTargetURL(this, url);
}
+void WebContentsImpl::ClearTargetURL() {
+ view_that_set_last_target_url_ = nullptr;
+ if (delegate_)
+ delegate_->UpdateTargetURL(this, GURL());
+}
+
void WebContentsImpl::Close(RenderViewHost* rvh) {
#if defined(OS_MACOSX)
// The UI may be in an event-tracking loop, such as between the