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