Short-cicruit all Content Shell window resizes.

When running layout tests, we were still listening to ViewMsg_Resize
messages and reacting to them, which caused occasional confusion and
flakiness. For example, a host would send a message to resize to
initial size, but the test would have already resized to some
other size.

This change does two things:
1) Make sure we don't listen to messages from host that change size
(other than fullscreen and device scale factor changes -- those
need to be tackled separately)
2) Introduce RenderWidget::ResizingModeSelector class that will
eventually dynamically turn short-circuiting on and off, depending
on the test.

BUG=309760
TEST=fast/images/image-zoom-to-25.html
R=jam, jochen, tony

Review URL: https://codereview.chromium.org/33773002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@230215 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index c9eb7c8..218556ab 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -308,6 +308,30 @@
   params->y *= scale_;
 }
 
+// RenderWidget::ResizingModeSelector ------------------------------------------
+
+class RenderWidget::ResizingModeSelector {
+ public:
+  static bool ShouldAbortOnResize(RenderWidget* widget,
+                                  const ViewMsg_Resize_Params& params);
+  static bool IsLegacyMode();
+};
+
+bool RenderWidget::ResizingModeSelector::ShouldAbortOnResize(
+    RenderWidget* widget,
+    const ViewMsg_Resize_Params& params) {
+  return RenderThreadImpl::current() &&
+      RenderThreadImpl::current()->layout_test_mode() &&
+      params.is_fullscreen == widget->is_fullscreen_ &&
+      params.screen_info.deviceScaleFactor ==
+        widget->screen_info_.deviceScaleFactor;
+}
+
+bool RenderWidget::ResizingModeSelector::IsLegacyMode() {
+  return RenderThreadImpl::current() && // Will be NULL during unit tests.
+      RenderThreadImpl::current()->layout_test_mode();
+}
+
 // RenderWidget ---------------------------------------------------------------
 
 RenderWidget::RenderWidget(WebKit::WebPopupType popup_type,
@@ -627,8 +651,7 @@
                           const gfx::Rect& resizer_rect,
                           bool is_fullscreen,
                           ResizeAck resize_ack) {
-  if (!RenderThreadImpl::current() ||  // Will be NULL during unit tests.
-      !RenderThreadImpl::current()->layout_test_mode()) {
+  if (!ResizingModeSelector::IsLegacyMode()) {
     // A resize ack shouldn't be requested if we have not ACK'd the previous
     // one.
     DCHECK(resize_ack != SEND_RESIZE_ACK || !next_paint_is_resize_ack());
@@ -667,14 +690,12 @@
     // send an ACK if we are resized to a non-empty rect.
     webwidget_->resize(new_size);
 
-    if (!RenderThreadImpl::current() ||  // Will be NULL during unit tests.
-        !RenderThreadImpl::current()->layout_test_mode()) {
+    if (!ResizingModeSelector::IsLegacyMode()) {
       // Resize should have caused an invalidation of the entire view.
       DCHECK(new_size.IsEmpty() || is_accelerated_compositing_active_ ||
              paint_aggregator_.HasPendingUpdate());
     }
-  } else if (!RenderThreadImpl::current() ||  // Will be NULL during unit tests.
-             !RenderThreadImpl::current()->layout_test_mode()) {
+  } else if (!ResizingModeSelector::IsLegacyMode()) {
     resize_ack = NO_RESIZE_ACK;
   }
 
@@ -726,6 +747,9 @@
 }
 
 void RenderWidget::OnResize(const ViewMsg_Resize_Params& params) {
+  if (ResizingModeSelector::ShouldAbortOnResize(this, params))
+    return;
+
   if (screen_metrics_emulator_) {
     screen_metrics_emulator_->OnResizeMessage(params);
     return;
@@ -1714,7 +1738,7 @@
     // with invalid damage rects.
     paint_aggregator_.ClearPendingUpdate();
 
-    if (RenderThreadImpl::current()->layout_test_mode()) {
+    if (ResizingModeSelector::IsLegacyMode()) {
       WebRect new_pos(rootWindowRect().x,
                       rootWindowRect().y,
                       new_size.width,
@@ -1725,7 +1749,7 @@
 
     AutoResizeCompositor();
 
-    if (!RenderThreadImpl::current()->layout_test_mode())
+    if (!ResizingModeSelector::IsLegacyMode())
       need_update_rect_for_auto_resize_ = true;
   }
 }
@@ -1977,7 +2001,7 @@
         (pos.y - popup_view_origin_for_emulation_.y()) * scale;
   }
 
-  if (!RenderThreadImpl::current()->layout_test_mode()) {
+  if (!ResizingModeSelector::IsLegacyMode()) {
     if (did_show_) {
       Send(new ViewHostMsg_RequestMove(routing_id_, pos));
       SetPendingWindowRect(pos);