webkit_test_runner.h revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/common/page_state.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view_observer.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/renderer/render_view_observer_tracker.h"
15b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/shell/common/shell_test_configuration.h"
16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/shell/common/test_runner/test_preferences.h"
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/shell/renderer/test_runner/WebTestDelegate.h"
1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebScreenOrientation.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "v8/include/v8.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SkCanvas;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink {
249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass WebDeviceMotionData;
253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class WebDeviceOrientationData;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct WebRect;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace WebTestRunner {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebTestProxyBase;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class LeakDetector;
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is the renderer side of the webkit test runner.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebKitTestRunner : public RenderViewObserver,
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         public RenderViewObserverTracker<WebKitTestRunner>,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         public WebTestRunner::WebTestDelegate {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit WebKitTestRunner(RenderView* render_view);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~WebKitTestRunner();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // RenderViewObserver implementation.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void DidClearWindowObject(blink::WebLocalFrame* frame,
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    int world_id) OVERRIDE;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void Navigate(const GURL& url) OVERRIDE;
50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void DidCommitProvisionalLoad(blink::WebLocalFrame* frame,
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        bool is_new_navigation) OVERRIDE;
52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void DidFailProvisionalLoad(blink::WebLocalFrame* frame,
53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                      const blink::WebURLError& error) OVERRIDE;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebTestDelegate implementation.
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void clearEditCommand() OVERRIDE;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void setEditCommand(const std::string& name,
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              const std::string& value) OVERRIDE;
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void setGamepadData(const blink::WebGamepads& gamepads) OVERRIDE;
60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void didConnectGamepad(int index,
61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                const blink::WebGamepad& gamepad) OVERRIDE;
62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void didDisconnectGamepad(int index,
63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                   const blink::WebGamepad& gamepad) OVERRIDE;
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void setDeviceMotionData(
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebDeviceMotionData& data) OVERRIDE;
663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void setDeviceOrientationData(
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebDeviceOrientationData& data) OVERRIDE;
6823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual void setScreenOrientation(
6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      const blink::WebScreenOrientation& orientation) OVERRIDE;
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void printMessage(const std::string& message) OVERRIDE;
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void postTask(::WebTestRunner::WebTask* task) OVERRIDE;
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void postDelayedTask(::WebTestRunner::WebTask* task,
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                               long long ms) OVERRIDE;
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebString registerIsolatedFileSystem(
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebVector<blink::WebString>& absolute_filenames) OVERRIDE;
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual long long getCurrentTimeInMillisecond() OVERRIDE;
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebString getAbsoluteWebStringFromUTF8Path(
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& utf8_path) OVERRIDE;
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual blink::WebURL localFileToDataURL(
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebURL& file_url) OVERRIDE;
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual blink::WebURL rewriteLayoutTestsURL(
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& utf8_url) OVERRIDE;
83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual TestPreferences* preferences() OVERRIDE;
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void applyPreferences() OVERRIDE;
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual std::string makeURLErrorDescription(const blink::WebURLError& error);
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void useUnfortunateSynchronousResizeMode(bool enable) OVERRIDE;
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void enableAutoResizeMode(const blink::WebSize& min_size,
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    const blink::WebSize& max_size) OVERRIDE;
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void disableAutoResizeMode(const blink::WebSize& new_size) OVERRIDE;
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void clearDevToolsLocalStorage() OVERRIDE;
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void showDevTools(const std::string& settings) OVERRIDE;
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void closeDevTools() OVERRIDE;
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void evaluateInWebInspector(long call_id,
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                      const std::string& script) OVERRIDE;
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void clearAllDatabases() OVERRIDE;
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void setDatabaseQuota(int quota) OVERRIDE;
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void setDeviceScaleFactor(float factor) OVERRIDE;
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void setFocus(WebTestRunner::WebTestProxyBase* proxy,
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        bool focus) OVERRIDE;
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void setAcceptAllCookies(bool accept) OVERRIDE;
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual std::string pathToLocalResource(const std::string& resource) OVERRIDE;
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void setLocale(const std::string& locale) OVERRIDE;
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void testFinished() OVERRIDE;
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void closeRemainingWindows() OVERRIDE;
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void deleteAllCookies() OVERRIDE;
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual int navigationEntryCount() OVERRIDE;
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void goToOffset(int offset) OVERRIDE;
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void reload() OVERRIDE;
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void loadURLForFrame(const blink::WebURL& url,
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                               const std::string& frame_name) OVERRIDE;
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool allowExternalPages() OVERRIDE;
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void captureHistoryForWindow(
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      WebTestRunner::WebTestProxyBase* proxy,
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebVector<blink::WebHistoryItem>* history,
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      size_t* currentEntryIndex) OVERRIDE;
116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void Reset();
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_proxy(::WebTestRunner::WebTestProxyBase* proxy) { proxy_ = proxy; }
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ::WebTestRunner::WebTestProxyBase* proxy() const { return proxy_; }
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Message handlers.
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnSetTestConfiguration(const ShellTestConfiguration& params);
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnSessionHistory(
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::vector<int>& routing_ids,
12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const std::vector<std::vector<PageState> >& session_histories,
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::vector<unsigned>& current_entry_indexes);
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnReset();
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void OnNotifyDone();
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnTryLeakDetection();
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // After finishing the test, retrieves the audio, text, and pixel dumps from
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the TestRunner library and sends them to the browser process.
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CaptureDump();
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void TryLeakDetection();
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ::WebTestRunner::WebTestProxyBase* proxy_;
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RenderView* focused_view_;
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
143c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  TestPreferences prefs_;
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ShellTestConfiguration test_config_;
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<int> routing_ids_;
14890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  std::vector<std::vector<PageState> > session_histories_;
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<unsigned> current_entry_indexes_;
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_main_window_;
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool focus_on_next_commit_;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<LeakDetector> leak_detector_;
1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool needs_leak_detector_;
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_
164