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