webkit_test_runner.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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"
180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "third_party/WebKit/public/platform/WebScreenOrientationType.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "v8/include/v8.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class SkBitmap;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SkCanvas;
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink {
2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class WebBatteryStatus;
269ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass WebDeviceMotionData;
273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class WebDeviceOrientationData;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct WebRect;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class LeakDetector;
340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass WebTestProxyBase;
350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstruct LeakDetectionResult;
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>,
40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         public 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;
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void DidClearWindowObject(blink::WebLocalFrame* frame) OVERRIDE;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void Navigate(const GURL& url) OVERRIDE;
49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void DidCommitProvisionalLoad(blink::WebLocalFrame* frame,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                        bool is_new_navigation) OVERRIDE;
51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void DidFailProvisionalLoad(blink::WebLocalFrame* frame,
52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                      const blink::WebURLError& error) OVERRIDE;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebTestDelegate implementation.
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void clearEditCommand() OVERRIDE;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void setEditCommand(const std::string& name,
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              const std::string& value) OVERRIDE;
586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  virtual void setGamepadProvider(RendererGamepadProvider*) OVERRIDE;
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void setDeviceLightData(const double data) OVERRIDE;
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void setDeviceMotionData(
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebDeviceMotionData& data) OVERRIDE;
623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void setDeviceOrientationData(
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebDeviceOrientationData& data) OVERRIDE;
6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual void setScreenOrientation(
650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      const blink::WebScreenOrientationType& orientation) OVERRIDE;
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void resetScreenOrientation() OVERRIDE;
6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void didChangeBatteryStatus(
6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      const blink::WebBatteryStatus& status) OVERRIDE;
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void printMessage(const std::string& message) OVERRIDE;
70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void postTask(WebTask* task) OVERRIDE;
71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void postDelayedTask(WebTask* task, long long ms) OVERRIDE;
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebString registerIsolatedFileSystem(
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebVector<blink::WebString>& absolute_filenames) OVERRIDE;
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual long long getCurrentTimeInMillisecond() OVERRIDE;
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebString getAbsoluteWebStringFromUTF8Path(
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& utf8_path) OVERRIDE;
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual blink::WebURL localFileToDataURL(
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebURL& file_url) OVERRIDE;
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual blink::WebURL rewriteLayoutTestsURL(
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& utf8_url) OVERRIDE;
81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual TestPreferences* preferences() OVERRIDE;
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void applyPreferences() OVERRIDE;
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual std::string makeURLErrorDescription(const blink::WebURLError& error);
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void useUnfortunateSynchronousResizeMode(bool enable) OVERRIDE;
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void enableAutoResizeMode(const blink::WebSize& min_size,
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    const blink::WebSize& max_size) OVERRIDE;
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void disableAutoResizeMode(const blink::WebSize& new_size) OVERRIDE;
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void clearDevToolsLocalStorage() OVERRIDE;
890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual void showDevTools(const std::string& settings,
900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                            const std::string& frontend_url) OVERRIDE;
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void closeDevTools() OVERRIDE;
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void evaluateInWebInspector(long call_id,
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                      const std::string& script) OVERRIDE;
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void clearAllDatabases() OVERRIDE;
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void setDatabaseQuota(int quota) OVERRIDE;
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual blink::WebNotificationPresenter::Permission
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        checkWebNotificationPermission(const GURL& origin) OVERRIDE;
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void grantWebNotificationPermission(const GURL& origin,
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                              bool permission_granted) OVERRIDE;
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void clearWebNotificationPermissions() OVERRIDE;
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void setDeviceScaleFactor(float factor) OVERRIDE;
102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void setDeviceColorProfile(const std::string& name) OVERRIDE;
1030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual void setFocus(WebTestProxyBase* proxy, bool focus) OVERRIDE;
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void setAcceptAllCookies(bool accept) OVERRIDE;
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual std::string pathToLocalResource(const std::string& resource) OVERRIDE;
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void setLocale(const std::string& locale) OVERRIDE;
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void testFinished() OVERRIDE;
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void closeRemainingWindows() OVERRIDE;
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void deleteAllCookies() OVERRIDE;
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual int navigationEntryCount() OVERRIDE;
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void goToOffset(int offset) OVERRIDE;
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void reload() OVERRIDE;
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void loadURLForFrame(const blink::WebURL& url,
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                               const std::string& frame_name) OVERRIDE;
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool allowExternalPages() OVERRIDE;
1165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual std::string dumpHistoryForWindow(WebTestProxyBase* proxy) OVERRIDE;
117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void Reset();
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void set_proxy(WebTestProxyBase* proxy) { proxy_ = proxy; }
1210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  WebTestProxyBase* proxy() const { return proxy_; }
1220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  void ReportLeakDetectionResult(const LeakDetectionResult& result);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Message handlers.
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnSetTestConfiguration(const ShellTestConfiguration& params);
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnSessionHistory(
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::vector<int>& routing_ids,
13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      const std::vector<std::vector<PageState> >& session_histories,
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::vector<unsigned>& current_entry_indexes);
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnReset();
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void OnNotifyDone();
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnTryLeakDetection();
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // After finishing the test, retrieves the audio, text, and pixel dumps from
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the TestRunner library and sends them to the browser process.
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CaptureDump();
139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void CaptureDumpPixels(const SkBitmap& snapshot);
140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void CaptureDumpComplete();
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  WebTestProxyBase* proxy_;
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RenderView* focused_view_;
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
146c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  TestPreferences prefs_;
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ShellTestConfiguration test_config_;
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<int> routing_ids_;
15190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  std::vector<std::vector<PageState> > session_histories_;
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<unsigned> current_entry_indexes_;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_main_window_;
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool focus_on_next_commit_;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<LeakDetector> leak_detector_;
1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool needs_leak_detector_;
1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_
167