Index: content/browser/renderer_host/render_widget_host_impl.cc |
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc |
index 7e9dc75f05c4a6914b23cd0a17ce9ad73685cd20..b3db81d2f54a2168b0638e9cf02dfc25470783d1 100644 |
--- a/content/browser/renderer_host/render_widget_host_impl.cc |
+++ b/content/browser/renderer_host/render_widget_host_impl.cc |
@@ -167,11 +167,9 @@ RenderWidgetHostImpl::RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate, |
surface_id_(0), |
is_loading_(false), |
is_hidden_(hidden), |
- is_fullscreen_(false), |
repaint_ack_pending_(false), |
resize_ack_pending_(false), |
screen_info_out_of_date_(false), |
- top_controls_layout_height_(0.f), |
should_auto_resize_(false), |
waiting_for_screen_rects_ack_(false), |
needs_repainting_on_restore_(false), |
@@ -564,6 +562,41 @@ void RenderWidgetHostImpl::WasShown(const ui::LatencyInfo& latency_info) { |
WasResized(); |
} |
+void RenderWidgetHostImpl::GetResizeParams( |
+ ViewMsg_Resize_Params* resize_params) { |
+ if (!screen_info_) { |
+ screen_info_.reset(new blink::WebScreenInfo); |
+ GetWebScreenInfo(screen_info_.get()); |
+ } |
+ resize_params->screen_info = *screen_info_; |
+ resize_params->new_size = |
+ (view_) ? view_->GetRequestedRendererSize() : gfx::Size(); |
piman
2014/10/29 18:42:57
nit: no need for () around view_.
It might be mor
mkosiba (inactive)
2014/10/31 14:35:06
All are great suggestions! I think I'll go with th
|
+ resize_params->resizer_rect = GetRootWindowResizerRect(); |
+ resize_params->physical_backing_size = |
+ (view_) ? view_->GetPhysicalBackingSize() : gfx::Size(); |
+ resize_params->top_controls_layout_height = |
+ (view_) ? view_->GetTopControlsLayoutHeight() : 0.f; |
+ resize_params->visible_viewport_size = |
+ (view_) ? view_->GetVisibleViewportSize() : gfx::Size(); |
+ resize_params->is_fullscreen = IsFullscreen(); |
+} |
+ |
+void RenderWidgetHostImpl::GetNewViewResizeParams( |
+ ViewMsg_Resize_Params* resize_params) { |
+ GetResizeParams(resize_params); |
+ |
+ // We don't expect to receive an ACK when the requested size or the physical |
+ // backing size is empty, or when the main viewport size didn't change. |
+ if (!resize_params->new_size.IsEmpty() && |
+ !resize_params->physical_backing_size.IsEmpty()) { |
+ resize_ack_pending_ = g_check_for_pending_resize_ack; |
piman
2014/10/29 18:42:57
MMh, I certainly would not expect GetNewViewResize
mkosiba (inactive)
2014/10/31 14:35:06
that does indeed sound better. I guess I was tryin
|
+ } |
+ |
+ DCHECK(!old_resize_params_); |
+ old_resize_params_ = |
+ make_scoped_ptr(new ViewMsg_Resize_Params(*resize_params)); |
+} |
+ |
void RenderWidgetHostImpl::WasResized() { |
// Skip if the |delegate_| has already been detached because |
// it's web contents is being deleted. |
@@ -572,53 +605,38 @@ void RenderWidgetHostImpl::WasResized() { |
return; |
} |
- gfx::Size new_size(view_->GetRequestedRendererSize()); |
- |
- gfx::Size old_physical_backing_size = physical_backing_size_; |
- physical_backing_size_ = view_->GetPhysicalBackingSize(); |
- bool was_fullscreen = is_fullscreen_; |
- is_fullscreen_ = IsFullscreen(); |
- float old_top_controls_layout_height = |
- top_controls_layout_height_; |
- top_controls_layout_height_ = |
- view_->GetTopControlsLayoutHeight(); |
- gfx::Size old_visible_viewport_size = visible_viewport_size_; |
- visible_viewport_size_ = view_->GetVisibleViewportSize(); |
- |
- bool size_changed = new_size != last_requested_size_; |
- bool side_payload_changed = |
- screen_info_out_of_date_ || |
- old_physical_backing_size != physical_backing_size_ || |
- was_fullscreen != is_fullscreen_ || |
- old_top_controls_layout_height != |
- top_controls_layout_height_ || |
- old_visible_viewport_size != visible_viewport_size_; |
+ bool size_changed = false; |
+ bool side_payload_changed = screen_info_out_of_date_; |
+ scoped_ptr<ViewMsg_Resize_Params> params(new ViewMsg_Resize_Params); |
+ |
+ GetResizeParams(params.get()); |
+ if (old_resize_params_) { |
+ size_changed = old_resize_params_->new_size != params->new_size; |
+ side_payload_changed = |
+ side_payload_changed || |
+ old_resize_params_->physical_backing_size != |
+ params->physical_backing_size || |
+ old_resize_params_->is_fullscreen != params->is_fullscreen || |
+ old_resize_params_->top_controls_layout_height != |
+ params->top_controls_layout_height || |
+ old_resize_params_->visible_viewport_size != |
+ params->visible_viewport_size; |
+ } |
if (!size_changed && !side_payload_changed) |
return; |
- if (!screen_info_) { |
- screen_info_.reset(new blink::WebScreenInfo); |
- GetWebScreenInfo(screen_info_.get()); |
- } |
- |
// We don't expect to receive an ACK when the requested size or the physical |
// backing size is empty, or when the main viewport size didn't change. |
- if (!new_size.IsEmpty() && !physical_backing_size_.IsEmpty() && size_changed) |
+ if (!params->new_size.IsEmpty() && !params->physical_backing_size.IsEmpty() && |
+ size_changed) { |
resize_ack_pending_ = g_check_for_pending_resize_ack; |
+ } |
- ViewMsg_Resize_Params params; |
- params.screen_info = *screen_info_; |
- params.new_size = new_size; |
- params.physical_backing_size = physical_backing_size_; |
- params.top_controls_layout_height = top_controls_layout_height_; |
- params.visible_viewport_size = visible_viewport_size_; |
- params.resizer_rect = GetRootWindowResizerRect(); |
- params.is_fullscreen = is_fullscreen_; |
- if (!Send(new ViewMsg_Resize(routing_id_, params))) { |
+ if (!Send(new ViewMsg_Resize(routing_id_, *params))) { |
resize_ack_pending_ = false; |
} else { |
- last_requested_size_ = new_size; |
+ old_resize_params_.swap(params); |
} |
} |