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

Side by Side 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: addressing 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_view_impl.h" 5 #include "content/renderer/render_view_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <memory> 9 #include <memory>
10 10
(...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 WebFrame* opener_frame = RenderFrameImpl::ResolveOpener( 678 WebFrame* opener_frame = RenderFrameImpl::ResolveOpener(
679 params.opener_frame_route_id, &opener_view_routing_id); 679 params.opener_frame_route_id, &opener_view_routing_id);
680 if (opener_view_routing_id != MSG_ROUTING_NONE && was_created_by_renderer) 680 if (opener_view_routing_id != MSG_ROUTING_NONE && was_created_by_renderer)
681 opener_id_ = opener_view_routing_id; 681 opener_id_ = opener_view_routing_id;
682 682
683 display_mode_ = params.initial_size.display_mode; 683 display_mode_ = params.initial_size.display_mode;
684 684
685 // Ensure we start with a valid next_page_id_ from the browser. 685 // Ensure we start with a valid next_page_id_ from the browser.
686 DCHECK_GE(next_page_id_, 0); 686 DCHECK_GE(next_page_id_, 0);
687 687
688 webview_ = WebView::create(this); 688 webview_ =
689 WebView::create(this, is_hidden() ? blink::WebPageVisibilityStateHidden
690 : blink::WebPageVisibilityStateVisible);
689 webwidget_ = webview_->widget(); 691 webwidget_ = webview_->widget();
690 webwidget_mouse_lock_target_.reset(new WebWidgetLockTarget(webwidget_)); 692 webwidget_mouse_lock_target_.reset(new WebWidgetLockTarget(webwidget_));
691 693
692 g_view_map.Get().insert(std::make_pair(webview(), this)); 694 g_view_map.Get().insert(std::make_pair(webview(), this));
693 g_routing_id_view_map.Get().insert(std::make_pair(GetRoutingID(), this)); 695 g_routing_id_view_map.Get().insert(std::make_pair(GetRoutingID(), this));
694 696
695 const base::CommandLine& command_line = 697 const base::CommandLine& command_line =
696 *base::CommandLine::ForCurrentProcess(); 698 *base::CommandLine::ForCurrentProcess();
697 699
698 if (command_line.HasSwitch(switches::kStatsCollectionController)) 700 if (command_line.HasSwitch(switches::kStatsCollectionController))
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after
1340 OnSetHistoryOffsetAndLength) 1342 OnSetHistoryOffsetAndLength)
1341 IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupBitmap, 1343 IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupBitmap,
1342 OnReleaseDisambiguationPopupBitmap) 1344 OnReleaseDisambiguationPopupBitmap)
1343 IPC_MESSAGE_HANDLER(ViewMsg_ForceRedraw, OnForceRedraw) 1345 IPC_MESSAGE_HANDLER(ViewMsg_ForceRedraw, OnForceRedraw)
1344 IPC_MESSAGE_HANDLER(ViewMsg_SelectWordAroundCaret, OnSelectWordAroundCaret) 1346 IPC_MESSAGE_HANDLER(ViewMsg_SelectWordAroundCaret, OnSelectWordAroundCaret)
1345 1347
1346 // Page messages. 1348 // Page messages.
1347 IPC_MESSAGE_HANDLER(PageMsg_UpdateWindowScreenRect, 1349 IPC_MESSAGE_HANDLER(PageMsg_UpdateWindowScreenRect,
1348 OnUpdateWindowScreenRect) 1350 OnUpdateWindowScreenRect)
1349 IPC_MESSAGE_HANDLER(PageMsg_SetZoomLevel, OnSetZoomLevel) 1351 IPC_MESSAGE_HANDLER(PageMsg_SetZoomLevel, OnSetZoomLevel)
1352 IPC_MESSAGE_HANDLER(PageMsg_WasHidden, OnPageWasHidden)
1353 IPC_MESSAGE_HANDLER(PageMsg_WasShown, OnPageWasShown)
1354
1350 #if defined(OS_ANDROID) 1355 #if defined(OS_ANDROID)
1351 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTopControlsState, 1356 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTopControlsState,
1352 OnUpdateTopControlsState) 1357 OnUpdateTopControlsState)
1353 IPC_MESSAGE_HANDLER(ViewMsg_ExtractSmartClipData, OnExtractSmartClipData) 1358 IPC_MESSAGE_HANDLER(ViewMsg_ExtractSmartClipData, OnExtractSmartClipData)
1354 #elif defined(OS_MACOSX) 1359 #elif defined(OS_MACOSX)
1355 IPC_MESSAGE_HANDLER(ViewMsg_GetRenderedText, 1360 IPC_MESSAGE_HANDLER(ViewMsg_GetRenderedText,
1356 OnGetRenderedText) 1361 OnGetRenderedText)
1357 IPC_MESSAGE_HANDLER(ViewMsg_Close, OnClose) 1362 IPC_MESSAGE_HANDLER(ViewMsg_Close, OnClose)
1358 #endif 1363 #endif
1359 // Adding a new message? Add platform independent ones first, then put the 1364 // Adding a new message? Add platform independent ones first, then put the
(...skipping 952 matching lines...) Expand 10 before | Expand all | Expand 10 after
2312 } 2317 }
2313 2318
2314 int RenderViewImpl::GetEnabledBindings() const { 2319 int RenderViewImpl::GetEnabledBindings() const {
2315 return enabled_bindings_; 2320 return enabled_bindings_;
2316 } 2321 }
2317 2322
2318 bool RenderViewImpl::GetContentStateImmediately() const { 2323 bool RenderViewImpl::GetContentStateImmediately() const {
2319 return send_content_state_immediately_; 2324 return send_content_state_immediately_;
2320 } 2325 }
2321 2326
2322 blink::WebPageVisibilityState RenderViewImpl::GetVisibilityState() const {
2323 return visibilityState();
2324 }
2325
2326 void RenderViewImpl::DidStartLoading() { 2327 void RenderViewImpl::DidStartLoading() {
2327 main_render_frame_->didStartLoading(true); 2328 main_render_frame_->didStartLoading(true);
2328 } 2329 }
2329 2330
2330 void RenderViewImpl::DidStopLoading() { 2331 void RenderViewImpl::DidStopLoading() {
2331 main_render_frame_->didStopLoading(); 2332 main_render_frame_->didStopLoading();
2332 } 2333 }
2333 2334
2334 void RenderViewImpl::OnSetPageScale(float page_scale_factor) { 2335 void RenderViewImpl::OnSetPageScale(float page_scale_factor) {
2335 if (!webview()) 2336 if (!webview())
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
2779 void RenderViewImpl::Close() { 2780 void RenderViewImpl::Close() {
2780 // We need to grab a pointer to the doomed WebView before we destroy it. 2781 // We need to grab a pointer to the doomed WebView before we destroy it.
2781 WebView* doomed = webview_; 2782 WebView* doomed = webview_;
2782 RenderWidget::Close(); 2783 RenderWidget::Close();
2783 webview_ = nullptr; 2784 webview_ = nullptr;
2784 g_view_map.Get().erase(doomed); 2785 g_view_map.Get().erase(doomed);
2785 g_routing_id_view_map.Get().erase(GetRoutingID()); 2786 g_routing_id_view_map.Get().erase(GetRoutingID());
2786 RenderThread::Get()->Send(new ViewHostMsg_Close_ACK(GetRoutingID())); 2787 RenderThread::Get()->Send(new ViewHostMsg_Close_ACK(GetRoutingID()));
2787 } 2788 }
2788 2789
2789 void RenderViewImpl::OnWasHidden() { 2790 void RenderViewImpl::OnPageWasHidden() {
2790 RenderWidget::OnWasHidden();
2791
2792 #if defined(OS_ANDROID) && defined(ENABLE_WEBRTC) 2791 #if defined(OS_ANDROID) && defined(ENABLE_WEBRTC)
2793 RenderThreadImpl::current()->video_capture_impl_manager()-> 2792 RenderThreadImpl::current()->video_capture_impl_manager()->
2794 SuspendDevices(true); 2793 SuspendDevices(true);
2795 if (speech_recognition_dispatcher_) 2794 if (speech_recognition_dispatcher_)
2796 speech_recognition_dispatcher_->AbortAllRecognitions(); 2795 speech_recognition_dispatcher_->AbortAllRecognitions();
2797 #endif 2796 #endif
2798 2797
2799 if (webview()) 2798 if (webview()) {
2800 webview()->setVisibilityState(visibilityState(), false); 2799 // TODO(lfg): It's not correct to defer the page visibility to the main
2800 // frame. Currently, this is done because the main frame may override the
2801 // visibility of the page when prerendering. In order to fix this,
2802 // prerendering must be made aware of OOPIFs. https://crbug.com/440544
2803 blink::WebPageVisibilityState visibilityState =
2804 GetMainRenderFrame() ? GetMainRenderFrame()->visibilityState()
2805 : blink::WebPageVisibilityStateHidden;
2806 webview()->setVisibilityState(visibilityState, false);
2807 }
2801 } 2808 }
2802 2809
2803 void RenderViewImpl::OnWasShown(bool needs_repainting, 2810 void RenderViewImpl::OnPageWasShown() {
2804 const ui::LatencyInfo& latency_info) {
2805 RenderWidget::OnWasShown(needs_repainting, latency_info);
2806
2807 #if defined(OS_ANDROID) && defined(ENABLE_WEBRTC) 2811 #if defined(OS_ANDROID) && defined(ENABLE_WEBRTC)
2808 RenderThreadImpl::current()->video_capture_impl_manager()-> 2812 RenderThreadImpl::current()->video_capture_impl_manager()->
2809 SuspendDevices(false); 2813 SuspendDevices(false);
2810 #endif 2814 #endif
2811 2815
2812 if (webview()) 2816 if (webview()) {
2813 webview()->setVisibilityState(visibilityState(), false); 2817 blink::WebPageVisibilityState visibilityState =
2818 GetMainRenderFrame() ? GetMainRenderFrame()->visibilityState()
2819 : blink::WebPageVisibilityStateVisible;
2820 webview()->setVisibilityState(visibilityState, false);
2821 }
2814 } 2822 }
2815 2823
2816 GURL RenderViewImpl::GetURLForGraphicsContext3D() { 2824 GURL RenderViewImpl::GetURLForGraphicsContext3D() {
2817 DCHECK(webview()); 2825 DCHECK(webview());
2818 if (webview()->mainFrame()->isWebLocalFrame()) 2826 if (webview()->mainFrame()->isWebLocalFrame())
2819 return GURL(webview()->mainFrame()->document().url()); 2827 return GURL(webview()->mainFrame()->document().url());
2820 else 2828 else
2821 return GURL("chrome://gpu/RenderViewImpl::CreateGraphicsContext3D"); 2829 return GURL("chrome://gpu/RenderViewImpl::CreateGraphicsContext3D");
2822 } 2830 }
2823 2831
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
3079 } 3087 }
3080 3088
3081 double RenderViewImpl::zoomLevelToZoomFactor(double zoom_level) const { 3089 double RenderViewImpl::zoomLevelToZoomFactor(double zoom_level) const {
3082 return ZoomLevelToZoomFactor(zoom_level); 3090 return ZoomLevelToZoomFactor(zoom_level);
3083 } 3091 }
3084 3092
3085 double RenderViewImpl::zoomFactorToZoomLevel(double factor) const { 3093 double RenderViewImpl::zoomFactorToZoomLevel(double factor) const {
3086 return ZoomFactorToZoomLevel(factor); 3094 return ZoomFactorToZoomLevel(factor);
3087 } 3095 }
3088 3096
3089 blink::WebPageVisibilityState RenderViewImpl::visibilityState() const {
3090 blink::WebPageVisibilityState current_state = is_hidden() ?
3091 blink::WebPageVisibilityStateHidden :
3092 blink::WebPageVisibilityStateVisible;
3093 blink::WebPageVisibilityState override_state = current_state;
3094 // TODO(jam): move this method to WebFrameClient.
3095 if (GetContentClient()->renderer()->
3096 ShouldOverridePageVisibilityState(main_render_frame_,
3097 &override_state))
3098 return override_state;
3099 return current_state;
3100 }
3101
3102 void RenderViewImpl::draggableRegionsChanged() { 3097 void RenderViewImpl::draggableRegionsChanged() {
3103 FOR_EACH_OBSERVER( 3098 FOR_EACH_OBSERVER(
3104 RenderViewObserver, 3099 RenderViewObserver,
3105 observers_, 3100 observers_,
3106 DraggableRegionsChanged(webview()->mainFrame())); 3101 DraggableRegionsChanged(webview()->mainFrame()));
3107 } 3102 }
3108 3103
3109 void RenderViewImpl::pageImportanceSignalsChanged() { 3104 void RenderViewImpl::pageImportanceSignalsChanged() {
3110 if (!webview() || !main_render_frame_) 3105 if (!webview() || !main_render_frame_)
3111 return; 3106 return;
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
3395 return render_frame->focused_pepper_plugin(); 3390 return render_frame->focused_pepper_plugin();
3396 } 3391 }
3397 frame = frame->traverseNext(false); 3392 frame = frame->traverseNext(false);
3398 } 3393 }
3399 3394
3400 return nullptr; 3395 return nullptr;
3401 } 3396 }
3402 #endif 3397 #endif
3403 3398
3404 } // namespace content 3399 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698