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