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" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebGamepads.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/testing/WebFrameTestProxy.h" 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/testing/WebTestProxy.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_WIN) && !defined(USE_AURA) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/browser/web_contents/web_contents_drag_win.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#if defined(OS_MACOSX) 25b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/browser/renderer_host/popup_menu_helper_mac.h" 26b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#endif 27b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 289ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochusing WebKit::WebDeviceMotionData; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WebGamepads; 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)using WebKit::WebRect; 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)using WebKit::WebSize; 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing WebTestRunner::WebFrameTestProxy; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebTestRunner::WebTestProxy; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebTestRunner::WebTestProxyBase; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::LazyInstance<base::Callback<void(RenderView*, WebTestProxyBase*)> >::Leaky 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_callback = LAZY_INSTANCE_INITIALIZER; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RenderViewImpl* CreateWebTestProxy(RenderViewImplParams* params) { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef WebTestProxy<RenderViewImpl, RenderViewImplParams*> ProxyType; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProxyType* render_view_proxy = new ProxyType( 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) reinterpret_cast<RenderViewImplParams*>(params)); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (g_callback == 0) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return render_view_proxy; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_callback.Get().Run( 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<RenderView*>(render_view_proxy), render_view_proxy); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return render_view_proxy; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochRenderFrameImpl* CreateWebFrameTestProxy( 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RenderViewImpl* render_view, 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int32 routing_id) { 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef WebTestProxy<RenderViewImpl, RenderViewImplParams*> ViewProxy; 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef WebFrameTestProxy<RenderFrameImpl, RenderViewImpl*, int32> FrameProxy; 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ViewProxy* render_view_proxy = static_cast<ViewProxy*>(render_view); 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WebTestProxyBase* base = static_cast<WebTestProxyBase*>(render_view_proxy); 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FrameProxy* render_frame_proxy = new FrameProxy(render_view, routing_id); 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch render_frame_proxy->setBaseProxy(base); 64bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch render_frame_proxy->setVersion(2); 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return render_frame_proxy; 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void EnableWebTestProxyCreation( 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Callback<void(RenderView*, WebTestProxyBase*)>& callback) { 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_callback.Get() = callback; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewImpl::InstallCreateHook(CreateWebTestProxy); 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RenderFrameImpl::InstallCreateHook(CreateWebFrameTestProxy); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetMockGamepads(const WebGamepads& pads) { 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RendererWebKitPlatformSupportImpl::SetMockGamepadsForTesting(pads); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 839ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid SetMockDeviceMotionData(const WebDeviceMotionData& data) { 849ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch RendererWebKitPlatformSupportImpl::SetMockDeviceMotionDataForTesting(data); 859ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 869ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void EnableRendererLayoutTestMode() { 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) RenderThreadImpl::current()->set_layout_test_mode(true); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void EnableBrowserLayoutTestMode() { 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ImageTransportSurface::SetAllowOSMesaForTesting(true); 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) PopupMenuHelper::DontShowPopupMenuForTesting(); 95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#elif defined(OS_WIN) && !defined(USE_AURA) 96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebContentsDragWin::DisableDragDropForTesting(); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) RenderWidgetHostImpl::DisableResizeAckCheckForTesting(); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)int GetLocalSessionHistoryLength(RenderView* render_view) { 102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return static_cast<RenderViewImpl*>(render_view) 103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ->GetLocalSessionHistoryLengthForTesting(); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SyncNavigationState(RenderView* render_view) { 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<RenderViewImpl*>(render_view)->SyncNavigationState(); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetFocusAndActivate(RenderView* render_view, bool enable) { 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<RenderViewImpl*>(render_view) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ->SetFocusAndActivateForTesting(enable); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ForceResizeRenderView(RenderView* render_view, 11690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const WebSize& new_size) { 11790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view); 11890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) render_view_impl->setWindowRect(WebRect(render_view_impl->rootWindowRect().x, 11990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) render_view_impl->rootWindowRect().y, 12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) new_size.width, 12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) new_size.height)); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetDeviceScaleFactor(RenderView* render_view, float factor) { 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<RenderViewImpl*>(render_view) 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ->SetDeviceScaleFactorForTesting(factor); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void EnableAutoResizeMode(RenderView* render_view, 13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const WebSize& min_size, 13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const WebSize& max_size) { 13290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static_cast<RenderViewImpl*>(render_view) 13390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ->EnableAutoResizeForTesting(min_size, max_size); 13490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 13590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 13690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void DisableAutoResizeMode(RenderView* render_view, const WebSize& new_size) { 13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static_cast<RenderViewImpl*>(render_view) 13890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ->DisableAutoResizeForTesting(new_size); 13990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 14090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid UseMockMediaStreams(RenderView* render_view) { 1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view); 1437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch render_view_impl->SetMediaStreamClientForTesting( 1447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new TestMediaStreamClient(render_view_impl)); 145868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 146868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 148