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/WebTestDelegate.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(RendererGamepadProvider*) OVERRIDE; 59 virtual void setDeviceMotionData( 60 const blink::WebDeviceMotionData& data) OVERRIDE; 61 virtual void setDeviceOrientationData( 62 const blink::WebDeviceOrientationData& data) OVERRIDE; 63 virtual void setScreenOrientation( 64 const blink::WebScreenOrientationType& orientation) OVERRIDE; 65 virtual void resetScreenOrientation() OVERRIDE; 66 virtual void didChangeBatteryStatus( 67 const blink::WebBatteryStatus& status) OVERRIDE; 68 virtual void printMessage(const std::string& message) OVERRIDE; 69 virtual void postTask(WebTask* task) OVERRIDE; 70 virtual void postDelayedTask(WebTask* task, long long ms) OVERRIDE; 71 virtual blink::WebString registerIsolatedFileSystem( 72 const blink::WebVector<blink::WebString>& absolute_filenames) OVERRIDE; 73 virtual long long getCurrentTimeInMillisecond() OVERRIDE; 74 virtual blink::WebString getAbsoluteWebStringFromUTF8Path( 75 const std::string& utf8_path) OVERRIDE; 76 virtual blink::WebURL localFileToDataURL( 77 const blink::WebURL& file_url) OVERRIDE; 78 virtual blink::WebURL rewriteLayoutTestsURL( 79 const std::string& utf8_url) OVERRIDE; 80 virtual TestPreferences* preferences() OVERRIDE; 81 virtual void applyPreferences() OVERRIDE; 82 virtual std::string makeURLErrorDescription(const blink::WebURLError& error); 83 virtual void useUnfortunateSynchronousResizeMode(bool enable) OVERRIDE; 84 virtual void enableAutoResizeMode(const blink::WebSize& min_size, 85 const blink::WebSize& max_size) OVERRIDE; 86 virtual void disableAutoResizeMode(const blink::WebSize& new_size) OVERRIDE; 87 virtual void clearDevToolsLocalStorage() OVERRIDE; 88 virtual void showDevTools(const std::string& settings, 89 const std::string& frontend_url) OVERRIDE; 90 virtual void closeDevTools() OVERRIDE; 91 virtual void evaluateInWebInspector(long call_id, 92 const std::string& script) OVERRIDE; 93 virtual void clearAllDatabases() OVERRIDE; 94 virtual void setDatabaseQuota(int quota) OVERRIDE; 95 virtual void setDeviceScaleFactor(float factor) OVERRIDE; 96 virtual void setDeviceColorProfile(const std::string& name) OVERRIDE; 97 virtual void setFocus(WebTestProxyBase* proxy, bool focus) OVERRIDE; 98 virtual void setAcceptAllCookies(bool accept) OVERRIDE; 99 virtual std::string pathToLocalResource(const std::string& resource) OVERRIDE; 100 virtual void setLocale(const std::string& locale) OVERRIDE; 101 virtual void testFinished() OVERRIDE; 102 virtual void closeRemainingWindows() OVERRIDE; 103 virtual void deleteAllCookies() OVERRIDE; 104 virtual int navigationEntryCount() OVERRIDE; 105 virtual void goToOffset(int offset) OVERRIDE; 106 virtual void reload() OVERRIDE; 107 virtual void loadURLForFrame(const blink::WebURL& url, 108 const std::string& frame_name) OVERRIDE; 109 virtual bool allowExternalPages() OVERRIDE; 110 virtual std::string dumpHistoryForWindow(WebTestProxyBase* proxy) OVERRIDE; 111 112 void Reset(); 113 114 void set_proxy(WebTestProxyBase* proxy) { proxy_ = proxy; } 115 WebTestProxyBase* proxy() const { return proxy_; } 116 117 void ReportLeakDetectionResult(const LeakDetectionResult& result); 118 119 private: 120 // Message handlers. 121 void OnSetTestConfiguration(const ShellTestConfiguration& params); 122 void OnSessionHistory( 123 const std::vector<int>& routing_ids, 124 const std::vector<std::vector<PageState> >& session_histories, 125 const std::vector<unsigned>& current_entry_indexes); 126 void OnReset(); 127 void OnNotifyDone(); 128 void OnTryLeakDetection(); 129 130 // After finishing the test, retrieves the audio, text, and pixel dumps from 131 // the TestRunner library and sends them to the browser process. 132 void CaptureDump(); 133 void CaptureDumpPixels(const SkBitmap& snapshot); 134 void CaptureDumpComplete(); 135 136 WebTestProxyBase* proxy_; 137 138 RenderView* focused_view_; 139 140 TestPreferences prefs_; 141 142 ShellTestConfiguration test_config_; 143 144 std::vector<int> routing_ids_; 145 std::vector<std::vector<PageState> > session_histories_; 146 std::vector<unsigned> current_entry_indexes_; 147 148 bool is_main_window_; 149 150 bool focus_on_next_commit_; 151 152 scoped_ptr<LeakDetector> leak_detector_; 153 bool needs_leak_detector_; 154 155 DISALLOW_COPY_AND_ASSIGN(WebKitTestRunner); 156 }; 157 158 } // namespace content 159 160 #endif // CONTENT_SHELL_WEBKIT_TEST_RUNNER_H_ 161