webkit_test_runner.h revision 868fa2fe829687343ffae624259930155e16dbd8
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#ifndef CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_
6#define CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_
7
8#include <vector>
9
10#include "base/files/file_path.h"
11#include "base/memory/scoped_ptr.h"
12#include "content/public/common/page_state.h"
13#include "content/public/renderer/render_view_observer.h"
14#include "content/public/renderer/render_view_observer_tracker.h"
15#include "content/shell/common/shell_test_configuration.h"
16#include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/WebPreferences.h"
17#include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h"
18#include "v8/include/v8.h"
19
20class SkCanvas;
21
22namespace WebKit {
23class WebMediaPlayer;
24class WebMediaPlayerClient;
25struct WebRect;
26}
27
28namespace WebTestRunner {
29class WebTestProxyBase;
30}
31
32namespace webkit_glue {
33class TestMediaStreamClient;
34}
35
36namespace content {
37
38// This is the renderer side of the webkit test runner.
39class WebKitTestRunner : public RenderViewObserver,
40                         public RenderViewObserverTracker<WebKitTestRunner>,
41                         public WebTestRunner::WebTestDelegate {
42 public:
43  explicit WebKitTestRunner(RenderView* render_view);
44  virtual ~WebKitTestRunner();
45
46  // RenderViewObserver implementation.
47  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
48  virtual void DidClearWindowObject(WebKit::WebFrame* frame) OVERRIDE;
49  virtual void Navigate(const GURL& url) OVERRIDE;
50  virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame,
51                                        bool is_new_navigation) OVERRIDE;
52  virtual void DidFailProvisionalLoad(
53      WebKit::WebFrame* frame, const WebKit::WebURLError& error) OVERRIDE;
54
55  // WebTestDelegate implementation.
56  virtual void clearEditCommand();
57  virtual void setEditCommand(const std::string& name,
58                              const std::string& value);
59  virtual void setGamepadData(const WebKit::WebGamepads& gamepads);
60  virtual void printMessage(const std::string& message);
61  virtual void postTask(::WebTestRunner::WebTask* task);
62  virtual void postDelayedTask(::WebTestRunner::WebTask* task,
63                               long long ms);
64  virtual WebKit::WebString registerIsolatedFileSystem(
65      const WebKit::WebVector<WebKit::WebString>& absolute_filenames);
66  virtual long long getCurrentTimeInMillisecond();
67  virtual WebKit::WebString getAbsoluteWebStringFromUTF8Path(
68      const std::string& utf8_path);
69  virtual WebKit::WebURL localFileToDataURL(const WebKit::WebURL& file_url);
70  virtual WebKit::WebURL rewriteLayoutTestsURL(const std::string& utf8_url);
71  virtual ::WebTestRunner::WebPreferences* preferences();
72  virtual void applyPreferences();
73  virtual std::string makeURLErrorDescription(const WebKit::WebURLError& error);
74  virtual void setClientWindowRect(const WebKit::WebRect& rect);
75  virtual void enableAutoResizeMode(const WebKit::WebSize& min_size,
76                                    const WebKit::WebSize& max_size);
77  virtual void disableAutoResizeMode(const WebKit::WebSize& new_size);
78  virtual void showDevTools();
79  virtual void closeDevTools();
80  virtual void evaluateInWebInspector(long call_id, const std::string& script);
81  virtual void clearAllDatabases();
82  virtual void setDatabaseQuota(int quota);
83  virtual void setDeviceScaleFactor(float factor);
84  virtual void setFocus(WebTestRunner::WebTestProxyBase* proxy, bool focus);
85  virtual void setAcceptAllCookies(bool accept);
86  virtual std::string pathToLocalResource(const std::string& resource);
87  virtual void setLocale(const std::string& locale);
88  virtual void testFinished();
89  virtual void closeRemainingWindows();
90  virtual int navigationEntryCount();
91  virtual void goToOffset(int offset);
92  virtual void reload();
93  virtual void loadURLForFrame(const WebKit::WebURL& url,
94                               const std::string& frame_name);
95  virtual bool allowExternalPages();
96  virtual void captureHistoryForWindow(
97      WebTestRunner::WebTestProxyBase* proxy,
98      WebKit::WebVector<WebKit::WebHistoryItem>* history,
99      size_t* currentEntryIndex);
100  virtual WebKit::WebMediaPlayer* createWebMediaPlayer(
101      WebKit::WebFrame* frame,
102      const WebKit::WebURL& url,
103      WebKit::WebMediaPlayerClient* client);
104
105  void Reset();
106
107  void set_proxy(::WebTestRunner::WebTestProxyBase* proxy) { proxy_ = proxy; }
108  ::WebTestRunner::WebTestProxyBase* proxy() const { return proxy_; }
109
110 private:
111  // Message handlers.
112  void OnSetTestConfiguration(const ShellTestConfiguration& params);
113  void OnSessionHistory(
114      const std::vector<int>& routing_ids,
115      const std::vector<std::vector<PageState> >& session_histories,
116      const std::vector<unsigned>& current_entry_indexes);
117  void OnReset();
118  void OnNotifyDone();
119
120  // After finishing the test, retrieves the audio, text, and pixel dumps from
121  // the TestRunner library and sends them to the browser process.
122  void CaptureDump();
123
124  ::WebTestRunner::WebTestProxyBase* proxy_;
125
126  RenderView* focused_view_;
127
128  ::WebTestRunner::WebPreferences prefs_;
129
130  ShellTestConfiguration test_config_;
131
132  std::vector<int> routing_ids_;
133  std::vector<std::vector<PageState> > session_histories_;
134  std::vector<unsigned> current_entry_indexes_;
135
136  bool is_main_window_;
137
138  bool focus_on_next_commit_;
139
140  scoped_ptr<webkit_glue::TestMediaStreamClient> test_media_stream_client_;
141
142  DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner);
143};
144
145}  // namespace content
146
147#endif  // CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_
148