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

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: Remove semicolon 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 a86b690e43b9697b6d511864b9f84eb2dcfda053..e39c64e298d29eed364f386f8fe7e000f492b649 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),
+ 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 =
+ screen_info_out_of_date_ ||
old_physical_backing_size != physical_backing_size_ ||
was_fullscreen != is_fullscreen_ ||
old_overdraw_bottom_height != overdraw_bottom_height_;
@@ -537,14 +539,24 @@ void RenderWidgetHostImpl::WasResized() {
!side_payload_changed)
return;
+ if (!screen_info_) {
+ screen_info_.reset(new WebKit::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)
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;
+ params.screen_info = *screen_info_;
+ 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;
@@ -1333,9 +1345,12 @@ 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).
+ screen_info_.reset();
+ screen_info_out_of_date_ = true;
+ WasResized();
}
void RenderWidgetHostImpl::GetSnapshotFromRenderer(

Powered by Google App Engine
This is Rietveld 408576698