12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/layouttest_support.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/lazy_instance.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/browser/renderer_host/render_widget_host_impl.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/gpu/image_transport_surface.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/render_thread_impl.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/render_view_impl.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/renderer_webkitplatformsupport_impl.h" 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/test/test_media_stream_client.h" 159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "third_party/WebKit/public/platform/WebDeviceMotionData.h" 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebDeviceOrientationData.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebGamepads.h" 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/testing/WebFrameTestProxy.h" 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/testing/WebTestProxy.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_WIN) && !defined(USE_AURA) 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/browser/web_contents/web_contents_drag_win.h" 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#if defined(OS_MACOSX) 26b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/browser/renderer_host/popup_menu_helper_mac.h" 27b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#endif 28b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebDeviceMotionData; 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebDeviceOrientationData; 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebGamepads; 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebRect; 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebSize; 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing WebTestRunner::WebFrameTestProxy; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebTestRunner::WebTestProxy; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebTestRunner::WebTestProxyBase; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::LazyInstance<base::Callback<void(RenderView*, WebTestProxyBase*)> >::Leaky 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_callback = LAZY_INSTANCE_INITIALIZER; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RenderViewImpl* CreateWebTestProxy(RenderViewImplParams* params) { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef WebTestProxy<RenderViewImpl, RenderViewImplParams*> ProxyType; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProxyType* render_view_proxy = new ProxyType( 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) reinterpret_cast<RenderViewImplParams*>(params)); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (g_callback == 0) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return render_view_proxy; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_callback.Get().Run( 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<RenderView*>(render_view_proxy), render_view_proxy); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return render_view_proxy; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)WebTestProxyBase* GetWebTestProxyBase(RenderViewImpl* render_view) { 571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) typedef WebTestProxy<RenderViewImpl, RenderViewImplParams*> ViewProxy; 581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ViewProxy* render_view_proxy = static_cast<ViewProxy*>(render_view); 601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return static_cast<WebTestProxyBase*>(render_view_proxy); 611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochRenderFrameImpl* CreateWebFrameTestProxy( 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RenderViewImpl* render_view, 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int32 routing_id) { 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef WebFrameTestProxy<RenderFrameImpl, RenderViewImpl*, int32> FrameProxy; 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FrameProxy* render_frame_proxy = new FrameProxy(render_view, routing_id); 691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) render_frame_proxy->setBaseProxy(GetWebTestProxyBase(render_view)); 708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) render_frame_proxy->setVersion(3); 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return render_frame_proxy; 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void EnableWebTestProxyCreation( 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Callback<void(RenderView*, WebTestProxyBase*)>& callback) { 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_callback.Get() = callback; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewImpl::InstallCreateHook(CreateWebTestProxy); 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RenderFrameImpl::InstallCreateHook(CreateWebFrameTestProxy); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetMockGamepads(const WebGamepads& pads) { 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RendererWebKitPlatformSupportImpl::SetMockGamepadsForTesting(pads); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 899ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid SetMockDeviceMotionData(const WebDeviceMotionData& data) { 909ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch RendererWebKitPlatformSupportImpl::SetMockDeviceMotionDataForTesting(data); 919ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 929ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void SetMockDeviceOrientationData(const WebDeviceOrientationData& data) { 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) RendererWebKitPlatformSupportImpl:: 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) SetMockDeviceOrientationDataForTesting(data); 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void EnableRendererLayoutTestMode() { 99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) RenderThreadImpl::current()->set_layout_test_mode(true); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void EnableBrowserLayoutTestMode() { 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ImageTransportSurface::SetAllowOSMesaForTesting(true); 105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) PopupMenuHelper::DontShowPopupMenuForTesting(); 106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#elif defined(OS_WIN) && !defined(USE_AURA) 107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebContentsDragWin::DisableDragDropForTesting(); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 109868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) RenderWidgetHostImpl::DisableResizeAckCheckForTesting(); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)int GetLocalSessionHistoryLength(RenderView* render_view) { 1131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return static_cast<RenderViewImpl*>(render_view)-> 1141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetLocalSessionHistoryLengthForTesting(); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SyncNavigationState(RenderView* render_view) { 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<RenderViewImpl*>(render_view)->SyncNavigationState(); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetFocusAndActivate(RenderView* render_view, bool enable) { 1221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static_cast<RenderViewImpl*>(render_view)-> 1231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetFocusAndActivateForTesting(enable); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ForceResizeRenderView(RenderView* render_view, 12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const WebSize& new_size) { 12890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view); 1291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) render_view_impl->ForceResizeForTesting(new_size); 1301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetWebTestProxyBase(render_view_impl)->didForceResize(); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetDeviceScaleFactor(RenderView* render_view, float factor) { 1341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static_cast<RenderViewImpl*>(render_view)-> 1351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetDeviceScaleFactorForTesting(factor); 1361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 1371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void UseSynchronousResizeMode(RenderView* render_view, bool enable) { 1391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static_cast<RenderViewImpl*>(render_view)-> 1401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) UseSynchronousResizeModeForTesting(enable); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void EnableAutoResizeMode(RenderView* render_view, 14490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const WebSize& min_size, 14590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const WebSize& max_size) { 1461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static_cast<RenderViewImpl*>(render_view)-> 1471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EnableAutoResizeForTesting(min_size, max_size); 14890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 14990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 15090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void DisableAutoResizeMode(RenderView* render_view, const WebSize& new_size) { 1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static_cast<RenderViewImpl*>(render_view)-> 1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DisableAutoResizeForTesting(new_size); 15390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid UseMockMediaStreams(RenderView* render_view) { 1567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view); 1577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch render_view_impl->SetMediaStreamClientForTesting( 1587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new TestMediaStreamClient(render_view_impl)); 159868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 160868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 162