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

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: fix android test+naming 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 664 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 WebFrame* opener_frame = RenderFrameImpl::ResolveOpener( 675 WebFrame* opener_frame = RenderFrameImpl::ResolveOpener(
676 params.opener_frame_route_id, &opener_view_routing_id); 676 params.opener_frame_route_id, &opener_view_routing_id);
677 if (opener_view_routing_id != MSG_ROUTING_NONE && was_created_by_renderer) 677 if (opener_view_routing_id != MSG_ROUTING_NONE && was_created_by_renderer)
678 opener_id_ = opener_view_routing_id; 678 opener_id_ = opener_view_routing_id;
679 679
680 display_mode_ = params.initial_size.display_mode; 680 display_mode_ = params.initial_size.display_mode;
681 681
682 // Ensure we start with a valid next_page_id_ from the browser. 682 // Ensure we start with a valid next_page_id_ from the browser.
683 DCHECK_GE(next_page_id_, 0); 683 DCHECK_GE(next_page_id_, 0);
684 684
685 webview_ = WebView::create(this); 685 webview_ = WebView::create(this, !is_hidden());
686 webwidget_ = webview_->widget(); 686 webwidget_ = webview_->widget();
687 webwidget_mouse_lock_target_.reset(new WebWidgetLockTarget(webwidget_)); 687 webwidget_mouse_lock_target_.reset(new WebWidgetLockTarget(webwidget_));
688 688
689 g_view_map.Get().insert(std::make_pair(webview(), this)); 689 g_view_map.Get().insert(std::make_pair(webview(), this));
690 g_routing_id_view_map.Get().insert(std::make_pair(GetRoutingID(), this)); 690 g_routing_id_view_map.Get().insert(std::make_pair(GetRoutingID(), this));
691 691
692 const base::CommandLine& command_line = 692 const base::CommandLine& command_line =
693 *base::CommandLine::ForCurrentProcess(); 693 *base::CommandLine::ForCurrentProcess();
694 694
695 if (command_line.HasSwitch(switches::kStatsCollectionController)) 695 if (command_line.HasSwitch(switches::kStatsCollectionController))
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after
1337 OnSetHistoryOffsetAndLength) 1337 OnSetHistoryOffsetAndLength)
1338 IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupBitmap, 1338 IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupBitmap,
1339 OnReleaseDisambiguationPopupBitmap) 1339 OnReleaseDisambiguationPopupBitmap)
1340 IPC_MESSAGE_HANDLER(ViewMsg_ForceRedraw, OnForceRedraw) 1340 IPC_MESSAGE_HANDLER(ViewMsg_ForceRedraw, OnForceRedraw)
1341 IPC_MESSAGE_HANDLER(ViewMsg_SelectWordAroundCaret, OnSelectWordAroundCaret) 1341 IPC_MESSAGE_HANDLER(ViewMsg_SelectWordAroundCaret, OnSelectWordAroundCaret)
1342 1342
1343 // Page messages. 1343 // Page messages.
1344 IPC_MESSAGE_HANDLER(PageMsg_UpdateWindowScreenRect, 1344 IPC_MESSAGE_HANDLER(PageMsg_UpdateWindowScreenRect,
1345 OnUpdateWindowScreenRect) 1345 OnUpdateWindowScreenRect)
1346 IPC_MESSAGE_HANDLER(PageMsg_SetZoomLevel, OnSetZoomLevel) 1346 IPC_MESSAGE_HANDLER(PageMsg_SetZoomLevel, OnSetZoomLevel)
1347 IPC_MESSAGE_HANDLER(PageMsg_WasHidden, OnPageWasHidden)
1348 IPC_MESSAGE_HANDLER(PageMsg_WasShown, OnPageWasShown)
1349
1347 #if defined(OS_ANDROID) 1350 #if defined(OS_ANDROID)
1348 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTopControlsState, 1351 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTopControlsState,
1349 OnUpdateTopControlsState) 1352 OnUpdateTopControlsState)
1350 IPC_MESSAGE_HANDLER(ViewMsg_ExtractSmartClipData, OnExtractSmartClipData) 1353 IPC_MESSAGE_HANDLER(ViewMsg_ExtractSmartClipData, OnExtractSmartClipData)
1351 #elif defined(OS_MACOSX) 1354 #elif defined(OS_MACOSX)
1352 IPC_MESSAGE_HANDLER(ViewMsg_GetRenderedText, 1355 IPC_MESSAGE_HANDLER(ViewMsg_GetRenderedText,
1353 OnGetRenderedText) 1356 OnGetRenderedText)
1354 IPC_MESSAGE_HANDLER(ViewMsg_Close, OnClose) 1357 IPC_MESSAGE_HANDLER(ViewMsg_Close, OnClose)
1355 #endif 1358 #endif
1356 // Adding a new message? Add platform independent ones first, then put the 1359 // Adding a new message? Add platform independent ones first, then put the
(...skipping 952 matching lines...) Expand 10 before | Expand all | Expand 10 after
2309 } 2312 }
2310 2313
2311 int RenderViewImpl::GetEnabledBindings() const { 2314 int RenderViewImpl::GetEnabledBindings() const {
2312 return enabled_bindings_; 2315 return enabled_bindings_;
2313 } 2316 }
2314 2317
2315 bool RenderViewImpl::GetContentStateImmediately() const { 2318 bool RenderViewImpl::GetContentStateImmediately() const {
2316 return send_content_state_immediately_; 2319 return send_content_state_immediately_;
2317 } 2320 }
2318 2321
2319 blink::WebPageVisibilityState RenderViewImpl::GetVisibilityState() const {
2320 return visibilityState();
2321 }
2322
2323 void RenderViewImpl::DidStartLoading() { 2322 void RenderViewImpl::DidStartLoading() {
2324 main_render_frame_->didStartLoading(true); 2323 main_render_frame_->didStartLoading(true);
2325 } 2324 }
2326 2325
2327 void RenderViewImpl::DidStopLoading() { 2326 void RenderViewImpl::DidStopLoading() {
2328 main_render_frame_->didStopLoading(); 2327 main_render_frame_->didStopLoading();
2329 } 2328 }
2330 2329
2331 void RenderViewImpl::OnSetPageScale(float page_scale_factor) { 2330 void RenderViewImpl::OnSetPageScale(float page_scale_factor) {
2332 if (!webview()) 2331 if (!webview())
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
2776 void RenderViewImpl::Close() { 2775 void RenderViewImpl::Close() {
2777 // We need to grab a pointer to the doomed WebView before we destroy it. 2776 // We need to grab a pointer to the doomed WebView before we destroy it.
2778 WebView* doomed = webview_; 2777 WebView* doomed = webview_;
2779 RenderWidget::Close(); 2778 RenderWidget::Close();
2780 webview_ = nullptr; 2779 webview_ = nullptr;
2781 g_view_map.Get().erase(doomed); 2780 g_view_map.Get().erase(doomed);
2782 g_routing_id_view_map.Get().erase(GetRoutingID()); 2781 g_routing_id_view_map.Get().erase(GetRoutingID());
2783 RenderThread::Get()->Send(new ViewHostMsg_Close_ACK(GetRoutingID())); 2782 RenderThread::Get()->Send(new ViewHostMsg_Close_ACK(GetRoutingID()));
2784 } 2783 }
2785 2784
2786 void RenderViewImpl::OnWasHidden() { 2785 void RenderViewImpl::OnPageWasHidden() {
2787 RenderWidget::OnWasHidden();
2788
2789 #if defined(OS_ANDROID) && defined(ENABLE_WEBRTC) 2786 #if defined(OS_ANDROID) && defined(ENABLE_WEBRTC)
2790 RenderThreadImpl::current()->video_capture_impl_manager()-> 2787 RenderThreadImpl::current()->video_capture_impl_manager()->
2791 SuspendDevices(true); 2788 SuspendDevices(true);
2792 if (speech_recognition_dispatcher_) 2789 if (speech_recognition_dispatcher_)
2793 speech_recognition_dispatcher_->AbortAllRecognitions(); 2790 speech_recognition_dispatcher_->AbortAllRecognitions();
2794 #endif 2791 #endif
2795 2792
2796 if (webview()) 2793 if (webview()) {
2797 webview()->setVisibilityState(visibilityState(), false); 2794 // TODO(lfg): It's not correct to defer the page visibility to the main
2795 // frame. Currently, this is done because the main frame may override the
2796 // visibility of the page when prerendering. In order to fix this,
2797 // prerendering must be made aware of OOPIFs. https://crbug.com/440544
Charlie Reis 2016/06/06 23:15:09 Can you post an update to that bug about this cont
lfg 2016/06/08 20:00:24 Done.
2798 blink::WebPageVisibilityState visibilityState =
2799 GetMainRenderFrame() ? GetMainRenderFrame()->visibilityState()
2800 : blink::WebPageVisibilityStateHidden;
2801 webview()->setVisibilityState(visibilityState, false);
2802 }
2798 } 2803 }
2799 2804
2800 void RenderViewImpl::OnWasShown(bool needs_repainting, 2805 void RenderViewImpl::OnPageWasShown() {
2801 const ui::LatencyInfo& latency_info) {
2802 RenderWidget::OnWasShown(needs_repainting, latency_info);
2803
2804 #if defined(OS_ANDROID) && defined(ENABLE_WEBRTC) 2806 #if defined(OS_ANDROID) && defined(ENABLE_WEBRTC)
2805 RenderThreadImpl::current()->video_capture_impl_manager()-> 2807 RenderThreadImpl::current()->video_capture_impl_manager()->
2806 SuspendDevices(false); 2808 SuspendDevices(false);
2807 #endif 2809 #endif
2808 2810
2809 if (webview()) 2811 if (webview()) {
2810 webview()->setVisibilityState(visibilityState(), false); 2812 blink::WebPageVisibilityState visibilityState =
2813 GetMainRenderFrame() ? GetMainRenderFrame()->visibilityState()
2814 : blink::WebPageVisibilityStateVisible;
2815 webview()->setVisibilityState(visibilityState, false);
2816 }
2811 } 2817 }
2812 2818
2813 GURL RenderViewImpl::GetURLForGraphicsContext3D() { 2819 GURL RenderViewImpl::GetURLForGraphicsContext3D() {
2814 DCHECK(webview()); 2820 DCHECK(webview());
2815 if (webview()->mainFrame()->isWebLocalFrame()) 2821 if (webview()->mainFrame()->isWebLocalFrame())
2816 return GURL(webview()->mainFrame()->document().url()); 2822 return GURL(webview()->mainFrame()->document().url());
2817 else 2823 else
2818 return GURL("chrome://gpu/RenderViewImpl::CreateGraphicsContext3D"); 2824 return GURL("chrome://gpu/RenderViewImpl::CreateGraphicsContext3D");
2819 } 2825 }
2820 2826
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
3076 } 3082 }
3077 3083
3078 double RenderViewImpl::zoomLevelToZoomFactor(double zoom_level) const { 3084 double RenderViewImpl::zoomLevelToZoomFactor(double zoom_level) const {
3079 return ZoomLevelToZoomFactor(zoom_level); 3085 return ZoomLevelToZoomFactor(zoom_level);
3080 } 3086 }
3081 3087
3082 double RenderViewImpl::zoomFactorToZoomLevel(double factor) const { 3088 double RenderViewImpl::zoomFactorToZoomLevel(double factor) const {
3083 return ZoomFactorToZoomLevel(factor); 3089 return ZoomFactorToZoomLevel(factor);
3084 } 3090 }
3085 3091
3086 blink::WebPageVisibilityState RenderViewImpl::visibilityState() const {
3087 blink::WebPageVisibilityState current_state = is_hidden() ?
3088 blink::WebPageVisibilityStateHidden :
3089 blink::WebPageVisibilityStateVisible;
3090 blink::WebPageVisibilityState override_state = current_state;
3091 // TODO(jam): move this method to WebFrameClient.
3092 if (GetContentClient()->renderer()->
3093 ShouldOverridePageVisibilityState(main_render_frame_,
3094 &override_state))
3095 return override_state;
3096 return current_state;
3097 }
3098
3099 void RenderViewImpl::draggableRegionsChanged() { 3092 void RenderViewImpl::draggableRegionsChanged() {
3100 FOR_EACH_OBSERVER( 3093 FOR_EACH_OBSERVER(
3101 RenderViewObserver, 3094 RenderViewObserver,
3102 observers_, 3095 observers_,
3103 DraggableRegionsChanged(webview()->mainFrame())); 3096 DraggableRegionsChanged(webview()->mainFrame()));
3104 } 3097 }
3105 3098
3106 void RenderViewImpl::pageImportanceSignalsChanged() { 3099 void RenderViewImpl::pageImportanceSignalsChanged() {
3107 if (!webview() || !main_render_frame_) 3100 if (!webview() || !main_render_frame_)
3108 return; 3101 return;
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
3392 return render_frame->focused_pepper_plugin(); 3385 return render_frame->focused_pepper_plugin();
3393 } 3386 }
3394 frame = frame->traverseNext(false); 3387 frame = frame->traverseNext(false);
3395 } 3388 }
3396 3389
3397 return nullptr; 3390 return nullptr;
3398 } 3391 }
3399 #endif 3392 #endif
3400 3393
3401 } // namespace content 3394 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698