Surface synchronization: Plumb ScreenInfo changes with Auto-Resize changes

Prior to this CL, if an auto-resized window is moved from one display to another
then it will continue to display device scale factor corresponding to the first
display. This happens because when Auto-Resize mode is enabled, RenderWidgetHostImpl::WasResized
is short circuited and the latest ScreenInfo is not propagated to the renderer.

This CL addresses this issue. ViewHostMsg_SetLocalSurfaceIdForAutoResize now includes the latest
ScreenInfo. The latest min and max size are also included because they might be impacted
by device scale factor changes.

Bug: 672962
Change-Id: I973181bb285713f43eeec4032d9ec87d142f1c46
Reviewed-on: https://chromium-review.googlesource.com/756860
Reviewed-by: Ken Buchanan <[email protected]>
Reviewed-by: Antoine Labour <[email protected]>
Commit-Queue: Fady Samuel <[email protected]>
Cr-Commit-Position: refs/heads/master@{#514960}
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 9b6b9a5..6cb9a96 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -604,6 +604,30 @@
 }
 #endif
 
+void RenderWidget::SetLocalSurfaceIdForAutoResize(
+    uint64_t sequence_number,
+    const content::ScreenInfo& screen_info,
+    const viz::LocalSurfaceId& local_surface_id) {
+  bool screen_info_changed = screen_info_ != screen_info;
+
+  screen_info_ = screen_info;
+  if (device_scale_factor_ != screen_info_.device_scale_factor) {
+    device_scale_factor_ = screen_info_.device_scale_factor;
+    OnDeviceScaleFactorChanged();
+  }
+
+  if (screen_info_changed) {
+    for (auto& observer : render_frame_proxies_)
+      observer.OnScreenInfoChanged(screen_info);
+
+    // Notify all BrowserPlugins of the updated ScreenInfo.
+    if (BrowserPluginManager::Get())
+      BrowserPluginManager::Get()->ScreenInfoChanged(screen_info);
+  }
+
+  AutoResizeCompositor(local_surface_id);
+}
+
 void RenderWidget::OnShowHostContextMenu(ContextMenuParams* params) {
   if (screen_metrics_emulator_)
     screen_metrics_emulator_->OnShowContextMenu(params);
@@ -768,10 +792,15 @@
 
 void RenderWidget::OnSetLocalSurfaceIdForAutoResize(
     uint64_t sequence_number,
+    const gfx::Size& min_size,
+    const gfx::Size& max_size,
+    const content::ScreenInfo& screen_info,
     const viz::LocalSurfaceId& local_surface_id) {
   if (!auto_resize_mode_ || resize_or_repaint_ack_num_ != sequence_number)
     return;
-  AutoResizeCompositor(local_surface_id);
+
+  SetLocalSurfaceIdForAutoResize(sequence_number, screen_info,
+                                 local_surface_id);
 }
 
 void RenderWidget::OnEnableDeviceEmulation(