Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Unified Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 2023453003: Make RenderFrameHostImpl::GetRenderWidgetHost() always return an object (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing creis' comments Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/frame_host/render_frame_host_impl.cc
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 6bb8df43f18c52bd7d062cfe36f7465a7172d4f8..34d487c211371f7e7422ca07bd816d93a3d2e327 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -457,17 +457,24 @@ ServiceRegistry* RenderFrameHostImpl::GetServiceRegistry() {
blink::WebPageVisibilityState RenderFrameHostImpl::GetVisibilityState() {
// Works around the crashes seen in https://crbug.com/501863, where the
// active WebContents from a browser iterator may contain a render frame
- // detached from the frame tree.
- RenderWidgetHostView* view = RenderFrameHostImpl::GetView();
- if (!view || !view->GetRenderWidgetHost())
+ // detached from the frame tree. This tries to find a RenderWidgetHost
+ // attached to an ancestor frame, and defaults to visibility hidden if
+ // it fails.
+ // TODO(yfriedman, peter): Ideally this would never be called on an
+ // unattached frame and we could omit this check. See
+ // https://crbug.com/615867.
+ RenderFrameHostImpl* frame = this;
+ while (frame) {
+ if (frame->render_widget_host_)
+ break;
+ frame = frame->GetParent();
+ }
+ if (!frame)
return blink::WebPageVisibilityStateHidden;
- // TODO(mlamouri,kenrb): call GetRenderWidgetHost() directly when it stops
- // returning nullptr in some cases. See https://crbug.com/455245.
blink::WebPageVisibilityState visibility_state =
- RenderWidgetHostImpl::From(view->GetRenderWidgetHost())->is_hidden()
- ? blink::WebPageVisibilityStateHidden
- : blink::WebPageVisibilityStateVisible;
+ GetRenderWidgetHost()->is_hidden() ? blink::WebPageVisibilityStateHidden
+ : blink::WebPageVisibilityStateVisible;
GetContentClient()->browser()->OverridePageVisibilityState(this,
&visibility_state);
return visibility_state;
@@ -1177,21 +1184,21 @@ void RenderFrameHostImpl::OnUpdateState(const PageState& state) {
}
RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() {
- return render_widget_host_;
-}
-
-RenderWidgetHostView* RenderFrameHostImpl::GetView() {
RenderFrameHostImpl* frame = this;
while (frame) {
if (frame->render_widget_host_)
- return frame->render_widget_host_->GetView();
- frame = static_cast<RenderFrameHostImpl*>(frame->GetParent());
+ return frame->render_widget_host_;
+ frame = frame->GetParent();
}
NOTREACHED();
return nullptr;
}
+RenderWidgetHostView* RenderFrameHostImpl::GetView() {
+ return GetRenderWidgetHost()->GetView();
+}
+
GlobalFrameRoutingId RenderFrameHostImpl::GetGlobalFrameRoutingId() {
return GlobalFrameRoutingId(GetProcess()->GetID(), GetRoutingID());
}
@@ -2379,10 +2386,7 @@ void RenderFrameHostImpl::InvalidateMojoConnection() {
}
bool RenderFrameHostImpl::IsFocused() {
- // TODO(mlamouri,kenrb): call GetRenderWidgetHost() directly when it stops
- // returning nullptr in some cases. See https://crbug.com/455245.
- return RenderWidgetHostImpl::From(
- GetView()->GetRenderWidgetHost())->is_focused() &&
+ return GetRenderWidgetHost()->is_focused() &&
frame_tree_->GetFocusedFrame() &&
(frame_tree_->GetFocusedFrame() == frame_tree_node() ||
frame_tree_->GetFocusedFrame()->IsDescendantOf(frame_tree_node()));
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | content/browser/web_contents/web_contents_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698