webkit_test_runner.h revision b2df76ea8fec9e32f6f3718986dba0d95315b29c
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"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view_observer.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/renderer/render_view_observer_tracker.h"
14b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/shell/common/shell_test_configuration.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/WebPreferences.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestDelegate.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "v8/include/v8.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SkCanvas;
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace WebKit {
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WebMediaPlayer;
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WebMediaPlayerClient;
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct WebRect;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace WebTestRunner {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebTestProxyBase;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace webkit_glue {
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class TestMediaStreamClient;
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (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;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidClearWindowObject(WebKit::WebFrame* frame) OVERRIDE;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void Navigate(const GURL& url) OVERRIDE;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        bool is_new_navigation) OVERRIDE;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidFailProvisionalLoad(
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      WebKit::WebFrame* frame, const WebKit::WebURLError& error) OVERRIDE;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebTestDelegate implementation.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void clearEditCommand();
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void setEditCommand(const std::string& name,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const std::string& value);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void setGamepadData(const WebKit::WebGamepads& gamepads);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void printMessage(const std::string& message);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void postTask(::WebTestRunner::WebTask* task);
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void postDelayedTask(::WebTestRunner::WebTask* task,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               long long ms);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebKit::WebString registerIsolatedFileSystem(
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const WebKit::WebVector<WebKit::WebString>& absolute_filenames);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual long long getCurrentTimeInMillisecond();
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebKit::WebString getAbsoluteWebStringFromUTF8Path(
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::string& utf8_path);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual WebKit::WebURL localFileToDataURL(const WebKit::WebURL& file_url);
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual WebKit::WebURL rewriteLayoutTestsURL(const std::string& utf8_url);
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ::WebTestRunner::WebPreferences* preferences();
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void applyPreferences();
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual std::string makeURLErrorDescription(const WebKit::WebURLError& error);
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void setClientWindowRect(const WebKit::WebRect& rect);
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void showDevTools();
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void closeDevTools();
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void evaluateInWebInspector(long call_id, const std::string& script);
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void clearAllDatabases();
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void setDatabaseQuota(int quota);
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void setDeviceScaleFactor(float factor);
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void setFocus(WebTestRunner::WebTestProxyBase* proxy, bool focus);
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void setAcceptAllCookies(bool accept);
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual std::string pathToLocalResource(const std::string& resource);
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void setLocale(const std::string& locale);
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void testFinished();
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void testTimedOut();
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool isBeingDebugged();
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual int layoutTestTimeout();
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void closeRemainingWindows();
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual int navigationEntryCount();
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void goToOffset(int offset);
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void reload();
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void loadURLForFrame(const WebKit::WebURL& url,
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               const std::string& frame_name);
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool allowExternalPages();
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void captureHistoryForWindow(
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      WebTestRunner::WebTestProxyBase* proxy,
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      WebKit::WebVector<WebKit::WebHistoryItem>* history,
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      size_t* currentEntryIndex);
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual WebKit::WebMediaPlayer* createWebMediaPlayer(
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      WebKit::WebFrame* frame,
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const WebKit::WebURL& url,
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      WebKit::WebMediaPlayerClient* client);
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void Reset();
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_proxy(::WebTestRunner::WebTestProxyBase* proxy) { proxy_ = proxy; }
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ::WebTestRunner::WebTestProxyBase* proxy() const { return proxy_; }
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Message handlers.
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnSetTestConfiguration(const ShellTestConfiguration& params);
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnSessionHistory(
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::vector<int>& routing_ids,
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::vector<std::vector<std::string> >& session_histories,
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::vector<unsigned>& current_entry_indexes);
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnReset();
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void OnNotifyDone();
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // After finishing the test, retrieves the audio, text, and pixel dumps from
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the TestRunner library and sends them to the browser process.
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CaptureDump();
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ::WebTestRunner::WebTestProxyBase* proxy_;
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RenderView* focused_view_;
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ::WebTestRunner::WebPreferences prefs_;
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ShellTestConfiguration test_config_;
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<int> routing_ids_;
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<std::vector<std::string> > session_histories_;
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<unsigned> current_entry_indexes_;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_main_window_;
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool focus_on_next_commit_;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<webkit_glue::TestMediaStreamClient> test_media_stream_client_;
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner);
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_
147