webkit_test_runner.h revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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"
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/testing/WebPreferences.h"
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/testing/WebTestDelegate.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "v8/include/v8.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SkCanvas;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace WebKit {
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct WebRect;
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace WebTestRunner {
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebTestProxyBase;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is the renderer side of the webkit test runner.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebKitTestRunner : public RenderViewObserver,
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         public RenderViewObserverTracker<WebKitTestRunner>,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         public WebTestRunner::WebTestDelegate {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit WebKitTestRunner(RenderView* render_view);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~WebKitTestRunner();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // RenderViewObserver implementation.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidClearWindowObject(WebKit::WebFrame* frame) OVERRIDE;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void Navigate(const GURL& url) OVERRIDE;
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame,
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        bool is_new_navigation) OVERRIDE;
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidFailProvisionalLoad(
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      WebKit::WebFrame* frame, const WebKit::WebURLError& error) OVERRIDE;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebTestDelegate implementation.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void clearEditCommand();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void setEditCommand(const std::string& name,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const std::string& value);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void setGamepadData(const WebKit::WebGamepads& gamepads);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void printMessage(const std::string& message);
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void postTask(::WebTestRunner::WebTask* task);
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void postDelayedTask(::WebTestRunner::WebTask* task,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               long long ms);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebKit::WebString registerIsolatedFileSystem(
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const WebKit::WebVector<WebKit::WebString>& absolute_filenames);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual long long getCurrentTimeInMillisecond();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebKit::WebString getAbsoluteWebStringFromUTF8Path(
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::string& utf8_path);
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual WebKit::WebURL localFileToDataURL(const WebKit::WebURL& file_url);
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual WebKit::WebURL rewriteLayoutTestsURL(const std::string& utf8_url);
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ::WebTestRunner::WebPreferences* preferences();
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void applyPreferences();
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual std::string makeURLErrorDescription(const WebKit::WebURLError& error);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void setClientWindowRect(const WebKit::WebRect& rect);
6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void enableAutoResizeMode(const WebKit::WebSize& min_size,
7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                    const WebKit::WebSize& max_size);
7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void disableAutoResizeMode(const WebKit::WebSize& new_size);
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void showDevTools();
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void closeDevTools();
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void evaluateInWebInspector(long call_id, const std::string& script);
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void clearAllDatabases();
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void setDatabaseQuota(int quota);
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void setDeviceScaleFactor(float factor);
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void setFocus(WebTestRunner::WebTestProxyBase* proxy, bool focus);
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void setAcceptAllCookies(bool accept);
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual std::string pathToLocalResource(const std::string& resource);
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void setLocale(const std::string& locale);
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void testFinished();
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void closeRemainingWindows();
847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void deleteAllCookies();
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual int navigationEntryCount();
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void goToOffset(int offset);
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void reload();
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void loadURLForFrame(const WebKit::WebURL& url,
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               const std::string& frame_name);
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool allowExternalPages();
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void captureHistoryForWindow(
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      WebTestRunner::WebTestProxyBase* proxy,
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      WebKit::WebVector<WebKit::WebHistoryItem>* history,
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      size_t* currentEntryIndex);
95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void Reset();
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_proxy(::WebTestRunner::WebTestProxyBase* proxy) { proxy_ = proxy; }
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ::WebTestRunner::WebTestProxyBase* proxy() const { return proxy_; }
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Message handlers.
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnSetTestConfiguration(const ShellTestConfiguration& params);
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnSessionHistory(
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::vector<int>& routing_ids,
10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const std::vector<std::vector<PageState> >& session_histories,
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::vector<unsigned>& current_entry_indexes);
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnReset();
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void OnNotifyDone();
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // After finishing the test, retrieves the audio, text, and pixel dumps from
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the TestRunner library and sends them to the browser process.
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CaptureDump();
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ::WebTestRunner::WebTestProxyBase* proxy_;
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RenderView* focused_view_;
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ::WebTestRunner::WebPreferences prefs_;
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ShellTestConfiguration test_config_;
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<int> routing_ids_;
12490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  std::vector<std::vector<PageState> > session_histories_;
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<unsigned> current_entry_indexes_;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_main_window_;
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool focus_on_next_commit_;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_
137