webkit_test_runner.h revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// Copyright (c) 2012 The Chromium Authors. All rights reserved.
210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// found in the LICENSE file.
410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#ifndef CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_
610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#define CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_
710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
8f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include <vector>
9f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
1010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "base/files/file_path.h"
1110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "base/memory/scoped_ptr.h"
1210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "content/public/common/page_state.h"
1310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "content/public/renderer/render_view_observer.h"
1410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "content/public/renderer/render_view_observer_tracker.h"
1510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "content/shell/common/shell_test_configuration.h"
1610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "third_party/WebKit/public/testing/WebPreferences.h"
1710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "third_party/WebKit/public/testing/WebTestDelegate.h"
1810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "v8/include/v8.h"
1910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
2010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass SkCanvas;
2110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
2210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochnamespace WebKit {
2310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass WebMediaPlayer;
2410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass WebMediaPlayerClient;
2510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochstruct WebRect;
2610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch}
2710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
2810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochnamespace WebTestRunner {
2910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass WebTestProxyBase;
3010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch}
31
32namespace content {
33class ShellMediaStreamClient;
34
35// This is the renderer side of the webkit test runner.
36class WebKitTestRunner : public RenderViewObserver,
37                         public RenderViewObserverTracker<WebKitTestRunner>,
38                         public WebTestRunner::WebTestDelegate {
39 public:
40  explicit WebKitTestRunner(RenderView* render_view);
41  virtual ~WebKitTestRunner();
42
43  // RenderViewObserver implementation.
44  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
45  virtual void DidClearWindowObject(WebKit::WebFrame* frame) OVERRIDE;
46  virtual void Navigate(const GURL& url) OVERRIDE;
47  virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame,
48                                        bool is_new_navigation) OVERRIDE;
49  virtual void DidFailProvisionalLoad(
50      WebKit::WebFrame* frame, const WebKit::WebURLError& error) OVERRIDE;
51
52  // WebTestDelegate implementation.
53  virtual void clearEditCommand();
54  virtual void setEditCommand(const std::string& name,
55                              const std::string& value);
56  virtual void setGamepadData(const WebKit::WebGamepads& gamepads);
57  virtual void printMessage(const std::string& message);
58  virtual void postTask(::WebTestRunner::WebTask* task);
59  virtual void postDelayedTask(::WebTestRunner::WebTask* task,
60                               long long ms);
61  virtual WebKit::WebString registerIsolatedFileSystem(
62      const WebKit::WebVector<WebKit::WebString>& absolute_filenames);
63  virtual long long getCurrentTimeInMillisecond();
64  virtual WebKit::WebString getAbsoluteWebStringFromUTF8Path(
65      const std::string& utf8_path);
66  virtual WebKit::WebURL localFileToDataURL(const WebKit::WebURL& file_url);
67  virtual WebKit::WebURL rewriteLayoutTestsURL(const std::string& utf8_url);
68  virtual ::WebTestRunner::WebPreferences* preferences();
69  virtual void applyPreferences();
70  virtual std::string makeURLErrorDescription(const WebKit::WebURLError& error);
71  virtual void setClientWindowRect(const WebKit::WebRect& rect);
72  virtual void enableAutoResizeMode(const WebKit::WebSize& min_size,
73                                    const WebKit::WebSize& max_size);
74  virtual void disableAutoResizeMode(const WebKit::WebSize& new_size);
75  virtual void showDevTools();
76  virtual void closeDevTools();
77  virtual void evaluateInWebInspector(long call_id, const std::string& script);
78  virtual void clearAllDatabases();
79  virtual void setDatabaseQuota(int quota);
80  virtual void setDeviceScaleFactor(float factor);
81  virtual void setFocus(WebTestRunner::WebTestProxyBase* proxy, bool focus);
82  virtual void setAcceptAllCookies(bool accept);
83  virtual std::string pathToLocalResource(const std::string& resource);
84  virtual void setLocale(const std::string& locale);
85  virtual void testFinished();
86  virtual void closeRemainingWindows();
87  virtual int navigationEntryCount();
88  virtual void goToOffset(int offset);
89  virtual void reload();
90  virtual void loadURLForFrame(const WebKit::WebURL& url,
91                               const std::string& frame_name);
92  virtual bool allowExternalPages();
93  virtual void captureHistoryForWindow(
94      WebTestRunner::WebTestProxyBase* proxy,
95      WebKit::WebVector<WebKit::WebHistoryItem>* history,
96      size_t* currentEntryIndex);
97
98  // TODO(scherkus): Remove once https://codereview.chromium.org/18130006
99  // rolls into Chromium.
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  // TODO(scherkus): Remove this after switching to using
141  // RenderViewImpl::createMediaPlayer() http://crbug.com/239826
142  scoped_ptr<ShellMediaStreamClient> shell_media_stream_client_;
143
144  DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner);
145};
146
147}  // namespace content
148
149#endif  // CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_
150