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..3edcbf518bf8a5acad00e684a9cf8354fd39b597 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), |
| @@ -362,7 +360,8 @@ void RenderWidgetHostImpl::ResetSizeAndRepaintPendingFlags() { |
| "renderer_host", "RenderWidgetHostImpl::repaint_ack_pending_", this); |
| } |
| repaint_ack_pending_ = false; |
| - last_requested_size_.SetSize(0, 0); |
| + if (old_resize_params_) |
| + old_resize_params_->new_size = gfx::Size(); |
| } |
| void RenderWidgetHostImpl::SendScreenRects() { |
| @@ -564,6 +563,42 @@ void RenderWidgetHostImpl::WasShown(const ui::LatencyInfo& latency_info) { |
| WasResized(); |
| } |
| +void RenderWidgetHostImpl::GetResizeParams( |
| + ViewMsg_Resize_Params* resize_params) { |
| + *resize_params = ViewMsg_Resize_Params(); |
| + |
| + if (!screen_info_) { |
| + screen_info_.reset(new blink::WebScreenInfo); |
| + GetWebScreenInfo(screen_info_.get()); |
| + } |
| + resize_params->screen_info = *screen_info_; |
| + resize_params->resizer_rect = GetRootWindowResizerRect(); |
| + |
| + if (view_) { |
| + resize_params->new_size = view_->GetRequestedRendererSize(); |
| + resize_params->physical_backing_size = view_->GetPhysicalBackingSize(); |
| + resize_params->top_controls_layout_height = |
| + view_->GetTopControlsLayoutHeight(); |
| + resize_params->visible_viewport_size = view_->GetVisibleViewportSize(); |
| + resize_params->is_fullscreen = IsFullscreen(); |
| + } |
| +} |
| + |
| +void RenderWidgetHostImpl::SetInitialRenderSizeParams( |
| + const ViewMsg_Resize_Params& resize_params) { |
| + DCHECK(!old_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; |
| + } |
| + |
| + 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 +607,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_; |
| - |
| - if (!size_changed && !side_payload_changed) |
| - return; |
| + bool size_changed = false; |
|
piman
2014/10/31 20:35:52
Default to true?
If we never called SetInitialRend
mkosiba (inactive)
2014/11/06 00:18:29
I was going back and forth between doing that and
|
| + bool side_payload_changed = screen_info_out_of_date_; |
| + scoped_ptr<ViewMsg_Resize_Params> params(new ViewMsg_Resize_Params); |
| - if (!screen_info_) { |
| - screen_info_.reset(new blink::WebScreenInfo); |
| - GetWebScreenInfo(screen_info_.get()); |
| + 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 && old_resize_params_) |
| + return; |
| + |
| // 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); |
| } |
| } |