webkit_test_runner.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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"
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/shell/renderer/test_runner/web_test_delegate.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.
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ClearEditCommand() OVERRIDE;
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetEditCommand(const std::string& name,
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              const std::string& value) OVERRIDE;
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetGamepadProvider(scoped_ptr<RendererGamepadProvider>) OVERRIDE;
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetDeviceLightData(const double data) OVERRIDE;
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetDeviceMotionData(
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebDeviceMotionData& data) OVERRIDE;
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetDeviceOrientationData(
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebDeviceOrientationData& data) OVERRIDE;
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetScreenOrientation(
650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      const blink::WebScreenOrientationType& orientation) OVERRIDE;
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ResetScreenOrientation() OVERRIDE;
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void DidChangeBatteryStatus(
6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      const blink::WebBatteryStatus& status) OVERRIDE;
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void PrintMessage(const std::string& message) OVERRIDE;
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void PostTask(WebTask* task) OVERRIDE;
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void PostDelayedTask(WebTask* task, long long ms) OVERRIDE;
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual blink::WebString RegisterIsolatedFileSystem(
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebVector<blink::WebString>& absolute_filenames) OVERRIDE;
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual long long GetCurrentTimeInMillisecond() OVERRIDE;
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual blink::WebString GetAbsoluteWebStringFromUTF8Path(
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& utf8_path) OVERRIDE;
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual blink::WebURL LocalFileToDataURL(
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebURL& file_url) OVERRIDE;
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual blink::WebURL RewriteLayoutTestsURL(
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& utf8_url) OVERRIDE;
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual TestPreferences* Preferences() OVERRIDE;
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ApplyPreferences() OVERRIDE;
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual std::string makeURLErrorDescription(const blink::WebURLError& error);
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void UseUnfortunateSynchronousResizeMode(bool enable) OVERRIDE;
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void EnableAutoResizeMode(const blink::WebSize& min_size,
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    const blink::WebSize& max_size) OVERRIDE;
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void DisableAutoResizeMode(const blink::WebSize& new_size) OVERRIDE;
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ClearDevToolsLocalStorage() OVERRIDE;
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ShowDevTools(const std::string& settings,
900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                            const std::string& frontend_url) OVERRIDE;
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void CloseDevTools() OVERRIDE;
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void EvaluateInWebInspector(long call_id,
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                      const std::string& script) OVERRIDE;
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ClearAllDatabases() OVERRIDE;
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetDatabaseQuota(int quota) OVERRIDE;
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual blink::WebNotificationPresenter::Permission
971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      CheckWebNotificationPermission(const GURL& origin) OVERRIDE;
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void GrantWebNotificationPermission(const GURL& origin,
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                              bool permission_granted) OVERRIDE;
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ClearWebNotificationPermissions() OVERRIDE;
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetDeviceScaleFactor(float factor) OVERRIDE;
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetDeviceColorProfile(const std::string& name) OVERRIDE;
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetFocus(WebTestProxyBase* proxy, bool focus) OVERRIDE;
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetAcceptAllCookies(bool accept) OVERRIDE;
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual std::string PathToLocalResource(const std::string& resource) OVERRIDE;
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetLocale(const std::string& locale) OVERRIDE;
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void TestFinished() OVERRIDE;
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void CloseRemainingWindows() OVERRIDE;
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void DeleteAllCookies() OVERRIDE;
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual int NavigationEntryCount() OVERRIDE;
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void GoToOffset(int offset) OVERRIDE;
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void Reload() OVERRIDE;
1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void LoadURLForFrame(const blink::WebURL& url,
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                               const std::string& frame_name) OVERRIDE;
1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool AllowExternalPages() OVERRIDE;
1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  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