| 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);
|
| }
|
| }
|
|
|
|
|