Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index 26c7ef258201a7ca9bb1c6f5842996d3027052a3..77e806a9bb1bde152811f4e9f1ee90f000b7e4d1 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -1343,6 +1343,9 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) { |
IPC_MESSAGE_HANDLER(PageMsg_UpdateWindowScreenRect, |
OnUpdateWindowScreenRect) |
IPC_MESSAGE_HANDLER(PageMsg_SetZoomLevel, OnSetZoomLevel) |
+ IPC_MESSAGE_HANDLER(PageMsg_WasHidden, OnPageWasHidden) |
+ IPC_MESSAGE_HANDLER(PageMsg_WasShown, OnPageWasShown) |
+ |
#if defined(OS_ANDROID) |
IPC_MESSAGE_HANDLER(ViewMsg_UpdateTopControlsState, |
OnUpdateTopControlsState) |
@@ -2315,10 +2318,6 @@ bool RenderViewImpl::GetContentStateImmediately() const { |
return send_content_state_immediately_; |
} |
-blink::WebPageVisibilityState RenderViewImpl::GetVisibilityState() const { |
- return visibilityState(); |
-} |
- |
void RenderViewImpl::DidStartLoading() { |
main_render_frame_->didStartLoading(true); |
} |
@@ -2782,9 +2781,7 @@ void RenderViewImpl::Close() { |
RenderThread::Get()->Send(new ViewHostMsg_Close_ACK(GetRoutingID())); |
} |
-void RenderViewImpl::OnWasHidden() { |
- RenderWidget::OnWasHidden(); |
- |
+void RenderViewImpl::OnPageWasHidden() { |
#if defined(OS_ANDROID) && defined(ENABLE_WEBRTC) |
RenderThreadImpl::current()->video_capture_impl_manager()-> |
SuspendDevices(true); |
@@ -2792,21 +2789,30 @@ void RenderViewImpl::OnWasHidden() { |
speech_recognition_dispatcher_->AbortAllRecognitions(); |
#endif |
- if (webview()) |
- webview()->setVisibilityState(visibilityState(), false); |
+ if (webview()) { |
+ // TODO(lfg): It's not correct to defer the page visibility to the main |
+ // frame. Currently, this is done because the main frame may override the |
+ // visibility of the page when prerendering. In order to fix this, |
+ // prerendering must be made aware of OOPIFs. https://crbug.com/440544 |
+ blink::WebPageVisibilityState visibilityState = |
+ GetMainRenderFrame() ? GetMainRenderFrame()->visibilityState() |
+ : blink::WebPageVisibilityStateHidden; |
+ webview()->setVisibilityState(visibilityState, false); |
+ } |
} |
-void RenderViewImpl::OnWasShown(bool needs_repainting, |
- const ui::LatencyInfo& latency_info) { |
- RenderWidget::OnWasShown(needs_repainting, latency_info); |
- |
+void RenderViewImpl::OnPageWasShown() { |
#if defined(OS_ANDROID) && defined(ENABLE_WEBRTC) |
RenderThreadImpl::current()->video_capture_impl_manager()-> |
SuspendDevices(false); |
#endif |
- if (webview()) |
- webview()->setVisibilityState(visibilityState(), false); |
+ if (webview()) { |
+ blink::WebPageVisibilityState visibilityState = |
+ GetMainRenderFrame() ? GetMainRenderFrame()->visibilityState() |
+ : blink::WebPageVisibilityStateVisible; |
+ webview()->setVisibilityState(visibilityState, false); |
+ } |
} |
GURL RenderViewImpl::GetURLForGraphicsContext3D() { |
@@ -3083,16 +3089,10 @@ double RenderViewImpl::zoomFactorToZoomLevel(double factor) const { |
} |
blink::WebPageVisibilityState RenderViewImpl::visibilityState() const { |
- blink::WebPageVisibilityState current_state = is_hidden() ? |
- blink::WebPageVisibilityStateHidden : |
- blink::WebPageVisibilityStateVisible; |
- blink::WebPageVisibilityState override_state = current_state; |
- // TODO(jam): move this method to WebFrameClient. |
- if (GetContentClient()->renderer()-> |
- ShouldOverridePageVisibilityState(main_render_frame_, |
- &override_state)) |
- return override_state; |
- return current_state; |
+ // This method should only be used to determine initial visibility. |
+ DCHECK(!main_render_frame_); |
+ return is_hidden() ? blink::WebPageVisibilityStateHidden |
+ : blink::WebPageVisibilityStateVisible; |
} |
void RenderViewImpl::draggableRegionsChanged() { |