1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_ 6 #define CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_ 7 8 #include <vector> 9 10 #include "base/files/file_path.h" 11 #include "base/memory/scoped_ptr.h" 12 #include "content/public/common/page_state.h" 13 #include "content/public/renderer/render_view_observer.h" 14 #include "content/public/renderer/render_view_observer_tracker.h" 15 #include "content/shell/common/shell_test_configuration.h" 16 #include "content/shell/common/test_runner/test_preferences.h" 17 #include "content/shell/renderer/test_runner/web_test_delegate.h" 18 #include "third_party/WebKit/public/platform/WebScreenOrientationType.h" 19 #include "v8/include/v8.h" 20 21 class SkBitmap; 22 class SkCanvas; 23 24 namespace blink { 25 class WebBatteryStatus; 26 class WebDeviceMotionData; 27 class WebDeviceOrientationData; 28 struct WebRect; 29 } 30 31 namespace content { 32 33 class LeakDetector; 34 class WebTestProxyBase; 35 struct LeakDetectionResult; 36 37 // This is the renderer side of the webkit test runner. 38 class WebKitTestRunner : public RenderViewObserver, 39 public RenderViewObserverTracker<WebKitTestRunner>, 40 public WebTestDelegate { 41 public: 42 explicit WebKitTestRunner(RenderView* render_view); 43 virtual ~WebKitTestRunner(); 44 45 // RenderViewObserver implementation. 46 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 47 virtual void DidClearWindowObject(blink::WebLocalFrame* frame) OVERRIDE; 48 virtual void Navigate(const GURL& url) OVERRIDE; 49 virtual void DidCommitProvisionalLoad(blink::WebLocalFrame* frame, 50 bool is_new_navigation) OVERRIDE; 51 virtual void DidFailProvisionalLoad(blink::WebLocalFrame* frame, 52 const blink::WebURLError& error) OVERRIDE; 53 54 // WebTestDelegate implementation. 55 virtual void ClearEditCommand() OVERRIDE; 56 virtual void SetEditCommand(const std::string& name, 57 const std::string& value) OVERRIDE; 58 virtual void SetGamepadProvider(scoped_ptr<RendererGamepadProvider>) OVERRIDE; 59 virtual void SetDeviceLightData(const double data) OVERRIDE; 60 virtual void SetDeviceMotionData( 61 const blink::WebDeviceMotionData& data) OVERRIDE; 62 virtual void SetDeviceOrientationData( 63 const blink::WebDeviceOrientationData& data) OVERRIDE; 64 virtual void SetScreenOrientation( 65 const blink::WebScreenOrientationType& orientation) OVERRIDE; 66 virtual void ResetScreenOrientation() OVERRIDE; 67 virtual void DidChangeBatteryStatus( 68 const blink::WebBatteryStatus& status) OVERRIDE; 69 virtual void PrintMessage(const std::string& message) OVERRIDE; 70 virtual void PostTask(WebTask* task) OVERRIDE; 71 virtual void PostDelayedTask(WebTask* task, long long ms) OVERRIDE; 72 virtual blink::WebString RegisterIsolatedFileSystem( 73 const blink::WebVector<blink::WebString>& absolute_filenames) OVERRIDE; 74 virtual long long GetCurrentTimeInMillisecond() OVERRIDE; 75 virtual blink::WebString GetAbsoluteWebStringFromUTF8Path( 76 const std::string& utf8_path) OVERRIDE; 77 virtual blink::WebURL LocalFileToDataURL( 78 const blink::WebURL& file_url) OVERRIDE; 79 virtual blink::WebURL RewriteLayoutTestsURL( 80 const std::string& utf8_url) OVERRIDE; 81 virtual TestPreferences* Preferences() OVERRIDE; 82 virtual void ApplyPreferences() OVERRIDE; 83 virtual std::string makeURLErrorDescription(const blink::WebURLError& error); 84 virtual void UseUnfortunateSynchronousResizeMode(bool enable) OVERRIDE; 85 virtual void EnableAutoResizeMode(const blink::WebSize& min_size, 86 const blink::WebSize& max_size) OVERRIDE; 87 virtual void DisableAutoResizeMode(const blink::WebSize& new_size) OVERRIDE; 88 virtual void ClearDevToolsLocalStorage() OVERRIDE; 89 virtual void ShowDevTools(const std::string& settings, 90 const std::string& frontend_url) OVERRIDE; 91 virtual void CloseDevTools() OVERRIDE; 92 virtual void EvaluateInWebInspector(long call_id, 93 const std::string& script) OVERRIDE; 94 virtual void ClearAllDatabases() OVERRIDE; 95 virtual void SetDatabaseQuota(int quota) OVERRIDE; 96 virtual blink::WebNotificationPresenter::Permission 97 CheckWebNotificationPermission(const GURL& origin) OVERRIDE; 98 virtual void GrantWebNotificationPermission(const GURL& origin, 99 bool permission_granted) OVERRIDE; 100 virtual void ClearWebNotificationPermissions() OVERRIDE; 101 virtual void SetDeviceScaleFactor(float factor) OVERRIDE; 102 virtual void SetDeviceColorProfile(const std::string& name) OVERRIDE; 103 virtual void SetFocus(WebTestProxyBase* proxy, bool focus) OVERRIDE; 104 virtual void SetAcceptAllCookies(bool accept) OVERRIDE; 105 virtual std::string PathToLocalResource(const std::string& resource) OVERRIDE; 106 virtual void SetLocale(const std::string& locale) OVERRIDE; 107 virtual void TestFinished() OVERRIDE; 108 virtual void CloseRemainingWindows() OVERRIDE; 109 virtual void DeleteAllCookies() OVERRIDE; 110 virtual int NavigationEntryCount() OVERRIDE; 111 virtual void GoToOffset(int offset) OVERRIDE; 112 virtual void Reload() OVERRIDE; 113 virtual void LoadURLForFrame(const blink::WebURL& url, 114 const std::string& frame_name) OVERRIDE; 115 virtual bool AllowExternalPages() OVERRIDE; 116 virtual std::string DumpHistoryForWindow(WebTestProxyBase* proxy) OVERRIDE; 117 118 void Reset(); 119 set_proxy(WebTestProxyBase * proxy)120 void set_proxy(WebTestProxyBase* proxy) { proxy_ = proxy; } proxy()121 WebTestProxyBase* proxy() const { return proxy_; } 122 123 void ReportLeakDetectionResult(const LeakDetectionResult& result); 124 125 private: 126 // Message handlers. 127 void OnSetTestConfiguration(const ShellTestConfiguration& params); 128 void OnSessionHistory( 129 const std::vector<int>& routing_ids, 130 const std::vector<std::vector<PageState> >& session_histories, 131 const std::vector<unsigned>& current_entry_indexes); 132 void OnReset(); 133 void OnNotifyDone(); 134 void OnTryLeakDetection(); 135 136 // After finishing the test, retrieves the audio, text, and pixel dumps from 137 // the TestRunner library and sends them to the browser process. 138 void CaptureDump(); 139 void CaptureDumpPixels(const SkBitmap& snapshot); 140 void CaptureDumpComplete(); 141 142 WebTestProxyBase* proxy_; 143 144 RenderView* focused_view_; 145 146 TestPreferences prefs_; 147 148 ShellTestConfiguration test_config_; 149 150 std::vector<int> routing_ids_; 151 std::vector<std::vector<PageState> > session_histories_; 152 std::vector<unsigned> current_entry_indexes_; 153 154 bool is_main_window_; 155 156 bool focus_on_next_commit_; 157 158 scoped_ptr<LeakDetector> leak_detector_; 159 bool needs_leak_detector_; 160 161 DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner); 162 }; 163 164 } // namespace content 165 166 #endif // CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_ 167