webkit_test_runner.h revision 9ab5563a3196760eb381d102cbb2bc0f7abc6a50
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/public/testing/WebPreferences.h"
17#include "third_party/WebKit/public/testing/WebTestDelegate.h"
18#include "v8/include/v8.h"
19
20class SkCanvas;
21
22namespace WebKit {
23class WebDeviceMotionData;
24struct WebRect;
25}
26
27namespace WebTestRunner {
28class WebTestProxyBase;
29}
30
31namespace content {
32
33// This is the renderer side of the webkit test runner.
34class WebKitTestRunner : public RenderViewObserver,
35                         public RenderViewObserverTracker<WebKitTestRunner>,
36                         public WebTestRunner::WebTestDelegate {
37 public:
38  explicit WebKitTestRunner(RenderView* render_view);
39  virtual ~WebKitTestRunner();
40
41  // RenderViewObserver implementation.
42  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
43  virtual void DidClearWindowObject(WebKit::WebFrame* frame) OVERRIDE;
44  virtual void Navigate(const GURL& url) OVERRIDE;
45  virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame,
46                                        bool is_new_navigation) OVERRIDE;
47  virtual void DidFailProvisionalLoad(
48      WebKit::WebFrame* frame, const WebKit::WebURLError& error) OVERRIDE;
49
50  // WebTestDelegate implementation.
51  virtual void clearEditCommand();
52  virtual void setEditCommand(const std::string& name,
53                              const std::string& value);
54  virtual void setGamepadData(const WebKit::WebGamepads& gamepads);
55  virtual void setDeviceMotionData(const WebKit::WebDeviceMotionData& data);
56  virtual void printMessage(const std::string& message);
57  virtual void postTask(::WebTestRunner::WebTask* task);
58  virtual void postDelayedTask(::WebTestRunner::WebTask* task,
59                               long long ms);
60  virtual WebKit::WebString registerIsolatedFileSystem(
61      const WebKit::WebVector<WebKit::WebString>& absolute_filenames);
62  virtual long long getCurrentTimeInMillisecond();
63  virtual WebKit::WebString getAbsoluteWebStringFromUTF8Path(
64      const std::string& utf8_path);
65  virtual WebKit::WebURL localFileToDataURL(const WebKit::WebURL& file_url);
66  virtual WebKit::WebURL rewriteLayoutTestsURL(const std::string& utf8_url);
67  virtual ::WebTestRunner::WebPreferences* preferences();
68  virtual void applyPreferences();
69  virtual std::string makeURLErrorDescription(const WebKit::WebURLError& error);
70  virtual void setClientWindowRect(const WebKit::WebRect& rect);
71  virtual void enableAutoResizeMode(const WebKit::WebSize& min_size,
72                                    const WebKit::WebSize& max_size);
73  virtual void disableAutoResizeMode(const WebKit::WebSize& new_size);
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 closeRemainingWindows();
86  virtual void deleteAllCookies();
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  void Reset();
99
100  void set_proxy(::WebTestRunner::WebTestProxyBase* proxy) { proxy_ = proxy; }
101  ::WebTestRunner::WebTestProxyBase* proxy() const { return proxy_; }
102
103 private:
104  // Message handlers.
105  void OnSetTestConfiguration(const ShellTestConfiguration& params);
106  void OnSessionHistory(
107      const std::vector<int>& routing_ids,
108      const std::vector<std::vector<PageState> >& session_histories,
109      const std::vector<unsigned>& current_entry_indexes);
110  void OnReset();
111  void OnNotifyDone();
112
113  // After finishing the test, retrieves the audio, text, and pixel dumps from
114  // the TestRunner library and sends them to the browser process.
115  void CaptureDump();
116
117  ::WebTestRunner::WebTestProxyBase* proxy_;
118
119  RenderView* focused_view_;
120
121  ::WebTestRunner::WebPreferences prefs_;
122
123  ShellTestConfiguration test_config_;
124
125  std::vector<int> routing_ids_;
126  std::vector<std::vector<PageState> > session_histories_;
127  std::vector<unsigned> current_entry_indexes_;
128
129  bool is_main_window_;
130
131  bool focus_on_next_commit_;
132
133  DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner);
134};
135
136}  // namespace content
137
138#endif  // CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_
139