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

Unified Diff: content/renderer/render_view_impl.cc

Issue 1991273003: Fire visibilityChange event on out-of-process iframes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments Created 4 years, 6 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
« no previous file with comments | « content/renderer/render_view_impl.h ('k') | extensions/renderer/scoped_web_frame.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/render_view_impl.cc
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index fadb7038758b35967c7dd1e88c74a52e10b15390..0b175e1fc25f77ed4ad7f9c868e4a1afc80d4c46 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -694,7 +694,9 @@ void RenderViewImpl::Initialize(const ViewMsg_New_Params& params,
// Ensure we start with a valid next_page_id_ from the browser.
DCHECK_GE(next_page_id_, 0);
- webview_ = WebView::create(this);
+ webview_ =
+ WebView::create(this, is_hidden() ? blink::WebPageVisibilityStateHidden
+ : blink::WebPageVisibilityStateVisible);
RenderWidget::DoInit(MSG_ROUTING_NONE, webview_->widget(), nullptr);
g_view_map.Get().insert(std::make_pair(webview(), this));
@@ -1329,6 +1331,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)
@@ -2247,10 +2252,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);
}
@@ -2678,9 +2679,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);
@@ -2688,21 +2687,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() {
@@ -2953,19 +2961,6 @@ double RenderViewImpl::zoomFactorToZoomLevel(double factor) const {
return ZoomFactorToZoomLevel(factor);
}
-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;
-}
-
void RenderViewImpl::draggableRegionsChanged() {
FOR_EACH_OBSERVER(
RenderViewObserver,
« no previous file with comments | « content/renderer/render_view_impl.h ('k') | extensions/renderer/scoped_web_frame.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698