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 9a1d709a2ef00f024c3194de5ec841498afcfc3b..b1d601d04d363b62f9e73de5a831e5961b524f4b 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,40 @@ 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) { |
+ // 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 +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 = true; |
+ 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); |
} |
} |