layouttest_support.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "content/public/test/layouttest_support.h" 6 7#include "base/callback.h" 8#include "base/lazy_instance.h" 9#include "content/browser/renderer_host/render_widget_host_impl.h" 10#include "content/common/gpu/image_transport_surface.h" 11#include "content/renderer/render_thread_impl.h" 12#include "content/renderer/render_view_impl.h" 13#include "content/renderer/renderer_webkitplatformsupport_impl.h" 14#include "third_party/WebKit/public/platform/WebGamepads.h" 15#include "third_party/WebKit/public/testing/WebFrameTestProxy.h" 16#include "third_party/WebKit/public/testing/WebTestProxy.h" 17 18#if defined(OS_WIN) && !defined(USE_AURA) 19#include "content/browser/web_contents/web_contents_drag_win.h" 20#endif 21 22#if defined(OS_MACOSX) 23#include "content/browser/renderer_host/popup_menu_helper_mac.h" 24#endif 25 26using WebKit::WebGamepads; 27using WebKit::WebRect; 28using WebKit::WebSize; 29using WebTestRunner::WebFrameTestProxy; 30using WebTestRunner::WebTestProxy; 31using WebTestRunner::WebTestProxyBase; 32 33namespace content { 34 35namespace { 36 37base::LazyInstance<base::Callback<void(RenderView*, WebTestProxyBase*)> >::Leaky 38 g_callback = LAZY_INSTANCE_INITIALIZER; 39 40RenderViewImpl* CreateWebTestProxy(RenderViewImplParams* params) { 41 typedef WebTestProxy<RenderViewImpl, RenderViewImplParams*> ProxyType; 42 ProxyType* render_view_proxy = new ProxyType( 43 reinterpret_cast<RenderViewImplParams*>(params)); 44 if (g_callback == 0) 45 return render_view_proxy; 46 g_callback.Get().Run( 47 static_cast<RenderView*>(render_view_proxy), render_view_proxy); 48 return render_view_proxy; 49} 50 51RenderFrameImpl* CreateWebFrameTestProxy( 52 RenderViewImpl* render_view, 53 int32 routing_id) { 54 typedef WebTestProxy<RenderViewImpl, RenderViewImplParams*> ViewProxy; 55 typedef WebFrameTestProxy<RenderFrameImpl, RenderViewImpl*, int32> FrameProxy; 56 57 ViewProxy* render_view_proxy = static_cast<ViewProxy*>(render_view); 58 WebTestProxyBase* base = static_cast<WebTestProxyBase*>(render_view_proxy); 59 FrameProxy* render_frame_proxy = new FrameProxy(render_view, routing_id); 60 render_frame_proxy->setBaseProxy(base); 61 62 return render_frame_proxy; 63} 64 65} // namespace 66 67 68void EnableWebTestProxyCreation( 69 const base::Callback<void(RenderView*, WebTestProxyBase*)>& callback) { 70 g_callback.Get() = callback; 71 RenderViewImpl::InstallCreateHook(CreateWebTestProxy); 72 RenderFrameImpl::InstallCreateHook(CreateWebFrameTestProxy); 73} 74 75void SetMockGamepads(const WebGamepads& pads) { 76 RendererWebKitPlatformSupportImpl::SetMockGamepadsForTesting(pads); 77} 78 79void EnableRendererLayoutTestMode() { 80 RenderThreadImpl::current()->set_layout_test_mode(true); 81} 82 83void EnableBrowserLayoutTestMode() { 84#if defined(OS_MACOSX) 85 ImageTransportSurface::SetAllowOSMesaForTesting(true); 86 PopupMenuHelper::DontShowPopupMenuForTesting(); 87#elif defined(OS_WIN) && !defined(USE_AURA) 88 WebContentsDragWin::DisableDragDropForTesting(); 89#endif 90 RenderWidgetHostImpl::DisableResizeAckCheckForTesting(); 91} 92 93int GetLocalSessionHistoryLength(RenderView* render_view) { 94 return static_cast<RenderViewImpl*>(render_view) 95 ->GetLocalSessionHistoryLengthForTesting(); 96} 97 98void SyncNavigationState(RenderView* render_view) { 99 static_cast<RenderViewImpl*>(render_view)->SyncNavigationState(); 100} 101 102void SetFocusAndActivate(RenderView* render_view, bool enable) { 103 static_cast<RenderViewImpl*>(render_view) 104 ->SetFocusAndActivateForTesting(enable); 105} 106 107void ForceResizeRenderView(RenderView* render_view, 108 const WebSize& new_size) { 109 RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view); 110 render_view_impl->setWindowRect(WebRect(render_view_impl->rootWindowRect().x, 111 render_view_impl->rootWindowRect().y, 112 new_size.width, 113 new_size.height)); 114} 115 116void SetDeviceScaleFactor(RenderView* render_view, float factor) { 117 static_cast<RenderViewImpl*>(render_view) 118 ->SetDeviceScaleFactorForTesting(factor); 119} 120 121void EnableAutoResizeMode(RenderView* render_view, 122 const WebSize& min_size, 123 const WebSize& max_size) { 124 static_cast<RenderViewImpl*>(render_view) 125 ->EnableAutoResizeForTesting(min_size, max_size); 126} 127 128void DisableAutoResizeMode(RenderView* render_view, const WebSize& new_size) { 129 static_cast<RenderViewImpl*>(render_view) 130 ->DisableAutoResizeForTesting(new_size); 131} 132 133scoped_refptr<base::MessageLoopProxy> GetMediaThreadMessageLoopProxy() { 134 return RenderThreadImpl::current()->GetMediaThreadMessageLoopProxy(); 135} 136 137} // namespace content 138