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