Introduce the notion of a "layout test mode" instead of turning individual flags on and off

BUG=111316
[email protected]

Review URL: https://chromiumcodereview.appspot.com/16026006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@202920 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/public/test/layouttest_support.h b/content/public/test/layouttest_support.h
index 4d0e444..ed490ec5a1 100644
--- a/content/public/test/layouttest_support.h
+++ b/content/public/test/layouttest_support.h
@@ -20,6 +20,15 @@
 
 class RenderView;
 
+// Turn the browser process into layout test mode.
+void EnableBrowserLayoutTestMode();
+
+///////////////////////////////////////////////////////////////////////////////
+// The following methods are meant to be used from a renderer.
+
+// Turn a renderer into layout test mode.
+void EnableRendererLayoutTestMode();
+
 // Enable injecting of a WebTestProxy between WebViews and RenderViews.
 // |callback| is invoked with a pointer to WebTestProxyBase for each created
 // WebTestProxy.
@@ -30,20 +39,9 @@
 // WebKitPlatformSupport::sampleGamepads().
 void SetMockGamepads(const WebKit::WebGamepads& pads);
 
-// Disable logging to the console from the appcache system.
-void DisableAppCacheLogging();
-
-// Enable testing support in the devtools client.
-void EnableDevToolsFrontendTesting();
-
 // Returns the length of the local session history of a render view.
 int GetLocalSessionHistoryLength(RenderView* render_view);
 
-void SetAllowOSMesaImageTransportForTesting();
-
-// Suppress sending focus events from the renderer to the browser.
-void DoNotSendFocusEvents();
-
 // Sync the current session history to the browser process.
 void SyncNavigationState(RenderView* render_view);
 
@@ -52,26 +50,13 @@
 // process.
 void SetFocusAndActivate(RenderView* render_view, bool enable);
 
-// When WebKit requests a size change, immediately report the new sizes back to
-// WebKit instead of waiting for the browser to acknowledge the new size.
-void EnableShortCircuitSizeUpdates();
-
 // Changes the window rect of the given render view.
 void ForceResizeRenderView(RenderView* render_view,
                            const WebKit::WebSize& new_size);
 
-// Never display error pages when a navigation fails.
-void DisableNavigationErrorPages();
-
 // Set the device scale factor and force the compositor to resize.
 void SetDeviceScaleFactor(RenderView* render_view, float factor);
 
-// Disable system calls related to drag & drop.
-void DisableSystemDragDrop();
-
-// Don't show modal popup menus.
-void DisableModalPopupMenus();
-
 // Control auto resize mode.
 void EnableAutoResizeMode(RenderView* render_view,
                           const WebKit::WebSize& min_size,
diff --git a/content/renderer/devtools/devtools_client.cc b/content/renderer/devtools/devtools_client.cc
index 5f760e69..e02c65f5 100644
--- a/content/renderer/devtools/devtools_client.cc
+++ b/content/renderer/devtools/devtools_client.cc
@@ -23,12 +23,6 @@
 
 namespace content {
 
-namespace {
-
-bool g_devtools_frontend_testing_enabled = false;
-
-}  // namespace
-
 DevToolsClient::DevToolsClient(RenderViewImpl* render_view)
     : RenderViewObserver(render_view) {
   const CommandLine& command_line = *CommandLine::ForCurrentProcess();
@@ -116,7 +110,7 @@
 }
 
 bool DevToolsClient::isUnderTest() {
-  return g_devtools_frontend_testing_enabled;
+  return RenderThreadImpl::current()->layout_test_mode();
 }
 
 void DevToolsClient::OnDispatchOnInspectorFrontend(const std::string& message) {
@@ -124,9 +118,4 @@
       WebString::fromUTF8(message));
 }
 
-// static
-void DevToolsClient::EnableDevToolsFrontendTesting() {
-  g_devtools_frontend_testing_enabled = true;
-}
-
 }  // namespace content
diff --git a/content/renderer/devtools/devtools_client.h b/content/renderer/devtools/devtools_client.h
index d2fe7ec25..3a24804 100644
--- a/content/renderer/devtools/devtools_client.h
+++ b/content/renderer/devtools/devtools_client.h
@@ -34,7 +34,6 @@
   explicit DevToolsClient(RenderViewImpl* render_view);
   virtual ~DevToolsClient();
 
-  static void EnableDevToolsFrontendTesting();
  private:
   // RenderView::Observer implementation.
   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index 9b7524a..c832845 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -353,9 +353,7 @@
   hidden_widget_count_ = 0;
   idle_notification_delay_in_ms_ = kInitialIdleHandlerDelayMs;
   idle_notifications_to_skip_ = 0;
-  should_send_focus_ipcs_ = true;
-  short_circuit_size_updates_ = false;
-  skip_error_pages_ = false;
+  layout_test_mode_ = false;
 
   appcache_dispatcher_.reset(new AppCacheDispatcher(Get()));
   dom_storage_dispatcher_.reset(new DomStorageDispatcher());
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h
index ae01148..a7d615b 100644
--- a/content/renderer/render_thread_impl.h
+++ b/content/renderer/render_thread_impl.h
@@ -188,29 +188,14 @@
   void DoNotSuspendWebKitSharedTimer();
   void DoNotNotifyWebKitOfModalLoop();
 
-  // True if focus changes should be send via IPC to the browser.
-  bool should_send_focus_ipcs() const {
-    return should_send_focus_ipcs_;
+  // True if we are running layout tests. This currently disables forwarding
+  // various status messages to the console, skips network error pages, and
+  // short circuits size update and focus events.
+  bool layout_test_mode() const {
+    return layout_test_mode_;
   }
-  void set_should_send_focus_ipcs(bool send) {
-    should_send_focus_ipcs_ = send;
-  }
-
-  // True if RenderWidgets should report the newly requested size back to
-  // WebKit without waiting for the browser to acknowledge the size.
-  bool short_circuit_size_updates() const {
-    return short_circuit_size_updates_;
-  }
-  void set_short_circuit_size_updates(bool short_circuit) {
-    short_circuit_size_updates_ = short_circuit;
-  }
-
-  // True if we should never display error pages in response to a failed load.
-  bool skip_error_pages() const {
-    return skip_error_pages_;
-  }
-  void set_skip_error_pages(bool skip) {
-    skip_error_pages_ = skip;
+  void set_layout_test_mode(bool layout_test_mode) {
+    layout_test_mode_ = layout_test_mode;
   }
 
   IPC::ForwardingMessageFilter* compositor_output_surface_filter() const {
@@ -433,10 +418,8 @@
   bool suspend_webkit_shared_timer_;
   bool notify_webkit_of_modal_loop_;
 
-  // The following flags are used to control layout test specific behavior.
-  bool should_send_focus_ipcs_;
-  bool short_circuit_size_updates_;
-  bool skip_error_pages_;
+  // The following flag is used to control layout test specific behavior.
+  bool layout_test_mode_;
 
   // Timer that periodically calls IdleHandler.
   base::RepeatingTimer<RenderThreadImpl> idle_timer_;
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 03d57a6..3efa0f5 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -2519,7 +2519,7 @@
   //                 we won't have to test for user gesture anymore and we can
   //                 move that code back to render_widget.cc
   if (WebUserGestureIndicator::isProcessingUserGesture() &&
-      RenderThreadImpl::current()->should_send_focus_ipcs()) {
+      !RenderThreadImpl::current()->layout_test_mode()) {
     Send(new ViewHostMsg_Focus(routing_id_));
   }
 }
@@ -2527,7 +2527,7 @@
 void RenderViewImpl::didBlur() {
   // TODO(jcivelli): see TODO above in didFocus().
   if (WebUserGestureIndicator::isProcessingUserGesture() &&
-      RenderThreadImpl::current()->should_send_focus_ipcs()) {
+      !RenderThreadImpl::current()->layout_test_mode()) {
     Send(new ViewHostMsg_Blur(routing_id_));
   }
 }
@@ -3490,7 +3490,7 @@
   if (error.reason == net::ERR_ABORTED)
     return;
 
-  if (RenderThreadImpl::current()->skip_error_pages())
+  if (RenderThreadImpl::current()->layout_test_mode())
     return;
 
   // Make sure we never show errors in view source mode.
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index d85a131..19a035d 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -1412,7 +1412,7 @@
     // with invalid damage rects.
     paint_aggregator_.ClearPendingUpdate();
 
-    if (RenderThreadImpl::current()->short_circuit_size_updates()) {
+    if (RenderThreadImpl::current()->layout_test_mode()) {
       WebRect new_pos(rootWindowRect().x,
                       rootWindowRect().y,
                       new_size.width,
@@ -1423,7 +1423,7 @@
 
     AutoResizeCompositor();
 
-    if (!RenderThreadImpl::current()->short_circuit_size_updates())
+    if (!RenderThreadImpl::current()->layout_test_mode())
       need_update_rect_for_auto_resize_ = true;
   }
 }
@@ -1680,7 +1680,7 @@
 
 void RenderWidget::setWindowRect(const WebRect& pos) {
   if (did_show_) {
-    if (!RenderThreadImpl::current()->short_circuit_size_updates()) {
+    if (!RenderThreadImpl::current()->layout_test_mode()) {
       Send(new ViewHostMsg_RequestMove(routing_id_, pos));
       SetPendingWindowRect(pos);
     } else {
diff --git a/content/renderer/renderer_webapplicationcachehost_impl.cc b/content/renderer/renderer_webapplicationcachehost_impl.cc
index 6404053..16717dc 100644
--- a/content/renderer/renderer_webapplicationcachehost_impl.cc
+++ b/content/renderer/renderer_webapplicationcachehost_impl.cc
@@ -16,8 +16,6 @@
 
 namespace content {
 
-static bool g_disable_logging = false;
-
 RendererWebApplicationCacheHostImpl::RendererWebApplicationCacheHostImpl(
     RenderViewImpl* render_view,
     WebApplicationCacheHostClient* client,
@@ -28,7 +26,7 @@
 
 void RendererWebApplicationCacheHostImpl::OnLogMessage(
     appcache::LogLevel log_level, const std::string& message) {
-  if (g_disable_logging)
+  if (RenderThreadImpl::current()->layout_test_mode())
     return;
 
   RenderViewImpl* render_view = GetRenderView();
@@ -61,9 +59,4 @@
   return RenderViewImpl::FromRoutingID(routing_id_);
 }
 
-// static
-void RendererWebApplicationCacheHostImpl::DisableLoggingForTesting() {
-  g_disable_logging = true;
-}
-
 }  // namespace content
diff --git a/content/renderer/renderer_webapplicationcachehost_impl.h b/content/renderer/renderer_webapplicationcachehost_impl.h
index 872d5c6..07d5e22 100644
--- a/content/renderer/renderer_webapplicationcachehost_impl.h
+++ b/content/renderer/renderer_webapplicationcachehost_impl.h
@@ -5,7 +5,6 @@
 #ifndef CONTENT_RENDERER_RENDERER_WEBAPPLICATIONCACHEHOST_IMPL_H_
 #define CONTENT_RENDERER_RENDERER_WEBAPPLICATIONCACHEHOST_IMPL_H_
 
-#include "content/common/content_export.h"
 #include "webkit/appcache/web_application_cache_host_impl.h"
 
 namespace content {
@@ -25,8 +24,6 @@
   virtual void OnContentBlocked(const GURL& manifest_url) OVERRIDE;
   virtual void OnCacheSelected(const appcache::AppCacheInfo& info) OVERRIDE;
 
-  CONTENT_EXPORT static void DisableLoggingForTesting();
-
  private:
   RenderViewImpl* GetRenderView();
 
diff --git a/content/shell/app/shell_main_delegate.cc b/content/shell/app/shell_main_delegate.cc
index 38698624..0f5c1043 100644
--- a/content/shell/app/shell_main_delegate.cc
+++ b/content/shell/app/shell_main_delegate.cc
@@ -112,13 +112,12 @@
     }
   }
   if (command_line.HasSwitch(switches::kDumpRenderTree)) {
+    EnableBrowserLayoutTestMode();
+
     command_line.AppendSwitch(switches::kProcessPerTab);
     command_line.AppendSwitch(switches::kAllowFileAccessFromFiles);
     command_line.AppendSwitchASCII(
         switches::kUseGL, gfx::kGLImplementationOSMesaName);
-    SetAllowOSMesaImageTransportForTesting();
-    DisableSystemDragDrop();
-    DisableModalPopupMenus();
     command_line.AppendSwitch(switches::kSkipGpuDataLoading);
     command_line.AppendSwitch(switches::kEnableExperimentalWebKitFeatures);
     command_line.AppendSwitch(switches::kEnableCssShaders);
diff --git a/content/shell/renderer/shell_render_process_observer.cc b/content/shell/renderer/shell_render_process_observer.cc
index 25d1aeb6..82cb633 100644
--- a/content/shell/renderer/shell_render_process_observer.cc
+++ b/content/shell/renderer/shell_render_process_observer.cc
@@ -41,11 +41,7 @@
   RenderThread::Get()->AddObserver(this);
   if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
     return;
-  DisableAppCacheLogging();
-  EnableDevToolsFrontendTesting();
-  EnableShortCircuitSizeUpdates();
-  DoNotSendFocusEvents();
-  DisableNavigationErrorPages();
+  EnableRendererLayoutTestMode();
 }
 
 ShellRenderProcessObserver::~ShellRenderProcessObserver() {
diff --git a/content/test/layouttest_support.cc b/content/test/layouttest_support.cc
index b60a161..51141d3 100644
--- a/content/test/layouttest_support.cc
+++ b/content/test/layouttest_support.cc
@@ -7,10 +7,8 @@
 #include "base/callback.h"
 #include "base/lazy_instance.h"
 #include "content/common/gpu/image_transport_surface.h"
-#include "content/renderer/devtools/devtools_client.h"
 #include "content/renderer/render_thread_impl.h"
 #include "content/renderer/render_view_impl.h"
-#include "content/renderer/renderer_webapplicationcachehost_impl.h"
 #include "content/renderer/renderer_webkitplatformsupport_impl.h"
 #include "third_party/WebKit/Source/Platform/chromium/public/WebGamepads.h"
 #include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h"
@@ -60,12 +58,17 @@
   RendererWebKitPlatformSupportImpl::SetMockGamepadsForTesting(pads);
 }
 
-void DisableAppCacheLogging() {
-  RendererWebApplicationCacheHostImpl::DisableLoggingForTesting();
+void EnableRendererLayoutTestMode() {
+  RenderThreadImpl::current()->set_layout_test_mode(true);
 }
 
-void EnableDevToolsFrontendTesting() {
-  DevToolsClient::EnableDevToolsFrontendTesting();
+void EnableBrowserLayoutTestMode() {
+#if defined(OS_MACOSX)
+  ImageTransportSurface::SetAllowOSMesaForTesting(true);
+  PopupMenuHelper::DontShowPopupMenuForTesting();
+#elif defined(OS_WIN) && !defined(USE_AURA)
+  WebContentsDragWin::DisableDragDropForTesting();
+#endif
 }
 
 int GetLocalSessionHistoryLength(RenderView* render_view) {
@@ -73,16 +76,6 @@
       ->GetLocalSessionHistoryLengthForTesting();
 }
 
-void SetAllowOSMesaImageTransportForTesting() {
-#if defined(OS_MACOSX)
-  ImageTransportSurface::SetAllowOSMesaForTesting(true);
-#endif
-}
-
-void DoNotSendFocusEvents() {
-  RenderThreadImpl::current()->set_should_send_focus_ipcs(false);
-}
-
 void SyncNavigationState(RenderView* render_view) {
   static_cast<RenderViewImpl*>(render_view)->SyncNavigationState();
 }
@@ -92,10 +85,6 @@
       ->SetFocusAndActivateForTesting(enable);
 }
 
-void EnableShortCircuitSizeUpdates() {
-  RenderThreadImpl::current()->set_short_circuit_size_updates(true);
-}
-
 void ForceResizeRenderView(RenderView* render_view,
                            const WebSize& new_size) {
   RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view);
@@ -105,27 +94,11 @@
                                           new_size.height));
 }
 
-void DisableNavigationErrorPages() {
-  RenderThreadImpl::current()->set_skip_error_pages(true);
-}
-
 void SetDeviceScaleFactor(RenderView* render_view, float factor) {
   static_cast<RenderViewImpl*>(render_view)
       ->SetDeviceScaleFactorForTesting(factor);
 }
 
-void DisableSystemDragDrop() {
-#if defined(OS_WIN) && !defined(USE_AURA)
-  WebContentsDragWin::DisableDragDropForTesting();
-#endif
-}
-
-void DisableModalPopupMenus() {
-#if defined(OS_MACOSX)
-  PopupMenuHelper::DontShowPopupMenuForTesting();
-#endif
-}
-
 void EnableAutoResizeMode(RenderView* render_view,
                           const WebSize& min_size,
                           const WebSize& max_size) {