Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(359)

Unified Diff: content/browser/renderer_host/render_widget_host_impl.cc

Issue 16048003: Fix race between DPI and window size (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 73652f023e27f3afed577d177ab2df14383d8a33..dd168621d4ccf389242146788fb609cd07b9e8f4 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -147,6 +147,7 @@ RenderWidgetHostImpl::RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate,
is_accelerated_compositing_active_(false),
repaint_ack_pending_(false),
resize_ack_pending_(false),
+ renderer_screen_info_out_of_date_(false),
overdraw_bottom_height_(0.f),
should_auto_resize_(false),
waiting_for_screen_rects_ack_(false),
@@ -526,6 +527,7 @@ void RenderWidgetHostImpl::WasResized() {
bool size_changed = new_size != current_size_;
bool side_payload_changed =
+ renderer_screen_info_out_of_date_ ||
old_physical_backing_size != physical_backing_size_ ||
was_fullscreen != is_fullscreen_ ||
old_overdraw_bottom_height != overdraw_bottom_height_;
@@ -542,12 +544,18 @@ void RenderWidgetHostImpl::WasResized() {
if (!new_size.IsEmpty() && !physical_backing_size_.IsEmpty() && size_changed)
resize_ack_pending_ = true;
- if (!Send(new ViewMsg_Resize(routing_id_, new_size, physical_backing_size_,
- overdraw_bottom_height_,
- GetRootWindowResizerRect(), is_fullscreen_))) {
+ ViewMsg_Resize_Params params;
+ GetWebScreenInfo(&params.screen_info);
piman 2013/05/25 00:37:25 This could be a bit expensive, like round-tripping
ccameron 2013/05/25 01:53:37 Yes, I was on the fence about this. I didn't initi
+ params.new_size = new_size;
+ params.physical_backing_size = physical_backing_size_;
+ params.overdraw_bottom_height = overdraw_bottom_height_;
+ params.resizer_rect = GetRootWindowResizerRect();
+ params.is_fullscreen = is_fullscreen_;
+ if (!Send(new ViewMsg_Resize(routing_id_, params))) {
resize_ack_pending_ = false;
} else {
in_flight_size_ = new_size;
+ renderer_screen_info_out_of_date_ = false;
}
}
@@ -1333,9 +1341,11 @@ const NativeWebKeyboardEvent*
}
void RenderWidgetHostImpl::NotifyScreenInfoChanged() {
- WebKit::WebScreenInfo screen_info;
- GetWebScreenInfo(&screen_info);
- Send(new ViewMsg_ScreenInfoChanged(GetRoutingID(), screen_info));
+ // The resize message (which may not happen immediately) will carry with it
+ // the screen info as well as the new size (if the screen has changed scale
+ // factor).
+ renderer_screen_info_out_of_date_ = true;
+ WasResized();
}
void RenderWidgetHostImpl::GetSnapshotFromRenderer(
« no previous file with comments | « content/browser/renderer_host/render_widget_host_impl.h ('k') | content/browser/renderer_host/render_widget_host_view_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698