Chromium Code Reviews| 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); |
| } |
| } |