Fix race between DPI and window size
Because the display scale factor and the window size are sent in two different
IPCs, and because the window size (ViewMsg_Resize) may be delayed (to avoid
spamming the renderer with resize messages while dragging), the renderer can
think it's using a different resolution than it is.
This merges the ViewMsg_ScreenInfoChanged and ViewMsg_Resize messages,
so that the renderer cannot not have a consistent view of the window size and
DPI.
BUG=239624
Review URL: https://chromiumcodereview.appspot.com/16048003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@202814 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index d1ece39..d85a131 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -339,7 +339,6 @@
IPC_MESSAGE_HANDLER(ViewMsg_SmoothScrollCompleted, OnSmoothScrollCompleted)
IPC_MESSAGE_HANDLER(ViewMsg_SetTextDirection, OnSetTextDirection)
IPC_MESSAGE_HANDLER(ViewMsg_Move_ACK, OnRequestMoveAck)
- IPC_MESSAGE_HANDLER(ViewMsg_ScreenInfoChanged, OnScreenInfoChanged)
IPC_MESSAGE_HANDLER(ViewMsg_UpdateScreenRects, OnUpdateScreenRects)
#if defined(OS_ANDROID)
IPC_MESSAGE_HANDLER(ViewMsg_ImeBatchStateChanged, OnImeBatchStateChanged)
@@ -464,14 +463,13 @@
CompleteInit();
}
-void RenderWidget::OnResize(const gfx::Size& new_size,
- const gfx::Size& physical_backing_size,
- float overdraw_bottom_height,
- const gfx::Rect& resizer_rect,
- bool is_fullscreen) {
- Resize(new_size, physical_backing_size, overdraw_bottom_height, resizer_rect,
- is_fullscreen, SEND_RESIZE_ACK);
- size_browser_expects_ = new_size;
+void RenderWidget::OnResize(const ViewMsg_Resize_Params& params) {
+ screen_info_ = params.screen_info;
+ SetDeviceScaleFactor(screen_info_.deviceScaleFactor);
+ Resize(params.new_size, params.physical_backing_size,
+ params.overdraw_bottom_height, params.resizer_rect,
+ params.is_fullscreen, SEND_RESIZE_ACK);
+ size_browser_expects_ = params.new_size;
}
void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) {
@@ -1953,12 +1951,6 @@
webwidget_->setTextDirection(direction);
}
-void RenderWidget::OnScreenInfoChanged(
- const WebKit::WebScreenInfo& screen_info) {
- screen_info_ = screen_info;
- SetDeviceScaleFactor(screen_info.deviceScaleFactor);
-}
-
void RenderWidget::OnUpdateScreenRects(const gfx::Rect& view_screen_rect,
const gfx::Rect& window_screen_rect) {
view_screen_rect_ = view_screen_rect;