Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(342)

Side by Side Diff: webkit/tools/test_shell/test_shell.h

Issue 15028002: Delete test_shell. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add dummy test_shell build target. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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 WEBKIT_TOOLS_TEST_SHELL_TEST_SHELL_H_
6 #define WEBKIT_TOOLS_TEST_SHELL_TEST_SHELL_H_
7
8
9 #include <list>
10 #include <map>
11 #include <string>
12 #include <vector>
13
14 #include "base/basictypes.h"
15 #include "base/files/file_path.h"
16 #include "base/files/scoped_temp_dir.h"
17 #include "base/lazy_instance.h"
18 #include "base/memory/ref_counted.h"
19 #include "base/memory/weak_ptr.h"
20 #include "base/strings/string_piece.h"
21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebNavigationPolicy.h "
22 #include "ui/gfx/native_widget_types.h"
23 #include "webkit/tools/test_shell/webview_host.h"
24 #include "webkit/tools/test_shell/webwidget_host.h"
25
26 typedef std::list<gfx::NativeWindow> WindowList;
27
28 #if defined(OS_WIN)
29 namespace ui {
30 class ScopedOleInitializer;
31 }
32 #endif
33
34 class GURL;
35 class TestNavigationEntry;
36 class TestNavigationController;
37 class TestNotificationPresenter;
38 class TestShellDevToolsAgent;
39 class TestShellDevToolsClient;
40 class TestWebViewDelegate;
41 struct WebPreferences;
42
43 namespace WebKit {
44 class WebDeviceOrientationClientMock;
45 class WebGeolocationClientMock;
46 }
47
48 class TestShell : public base::SupportsWeakPtr<TestShell> {
49 public:
50 struct TestParams {
51 // Load the test defaults.
52 TestParams();
53
54 // The kind of output we want from this test.
55 bool dump_tree;
56 bool dump_pixels;
57
58 // Filename we dump pixels to (when pixel testing is enabled).
59 base::FilePath pixel_file_name;
60 // The md5 hash of the bitmap dump (when pixel testing is enabled).
61 std::string pixel_hash;
62 // URL of the test.
63 std::string test_url;
64 };
65
66 TestShell();
67 virtual ~TestShell();
68
69 // Initialization and clean up of logging.
70 static void InitLogging(bool suppress_error_dialogs,
71 bool running_layout_tests,
72 bool enable_gp_fault_error_box);
73 static void CleanupLogging();
74
75 // Initialization and clean up of a static member variable.
76 static void InitializeTestShell(bool layout_test_mode,
77 bool allow_external_pages);
78 static void ShutdownTestShell();
79
80 static bool layout_test_mode() { return layout_test_mode_; }
81 static bool allow_external_pages() { return allow_external_pages_; }
82
83 // Called from the destructor to let each platform do any necessary
84 // cleanup.
85 void PlatformCleanUp();
86
87 WebKit::WebView* webView() {
88 return m_webViewHost.get() ? m_webViewHost->webview() : NULL;
89 }
90 WebViewHost* webViewHost() { return m_webViewHost.get(); }
91 WebKit::WebWidget* popup() {
92 return m_popupHost ? m_popupHost->webwidget() : NULL;
93 }
94 WebWidgetHost* popupHost() { return m_popupHost; }
95
96 bool is_loading() const { return is_loading_; }
97 void set_is_loading(bool is_loading) { is_loading_ = is_loading; }
98
99 bool allow_images() const { return allow_images_; }
100 void set_allow_images(bool allow) { allow_images_ = allow; }
101
102 bool allow_plugins() const { return allow_plugins_; }
103 void set_allow_plugins(bool allow) { allow_plugins_ = allow; }
104
105 bool allow_scripts() const { return allow_scripts_; }
106 void set_allow_scripts(bool allow) { allow_scripts_ = allow; }
107
108 void UpdateNavigationControls();
109
110 // A new TestShell window will be opened with devtools url.
111 // DevTools window can be opened manually via menu or automatically when
112 // inspector's layout test url is passed from command line or console.
113 void ShowDevTools();
114 void CloseDevTools();
115
116 void Show(WebKit::WebNavigationPolicy policy);
117
118 // We use this to avoid relying on Windows focus during layout test mode.
119 void SetFocus(WebWidgetHost* host, bool enable);
120
121 TestWebViewDelegate* delegate() { return delegate_.get(); }
122 TestWebViewDelegate* popup_delegate() { return popup_delegate_.get(); }
123 TestNavigationController* navigation_controller() {
124 return navigation_controller_.get();
125 }
126 TestNotificationPresenter* notification_presenter() {
127 return notification_presenter_.get();
128 }
129
130 // Resets TestWebViewDelegate. Should be called before loading a page,
131 // since some end-editing event notifications may arrive after the previous
132 // page has finished dumping its text and therefore end up in the next
133 // test's results if the messages are still enabled.
134 void ResetTestController();
135
136 bool AcceptsEditing() {
137 return true;
138 }
139
140 void LoadFile(const base::FilePath& file);
141 void LoadURL(const GURL& url);
142 void LoadURLForFrame(const GURL& url, const base::string16& frame_name);
143 void GoBackOrForward(int offset);
144 void Reload();
145 bool Navigate(const TestNavigationEntry& entry, bool reload);
146
147 bool PromptForSaveFile(const wchar_t* prompt_title, base::FilePath* result);
148 base::string16 GetDocumentText();
149 void DumpDocumentText();
150 void DumpRenderTree();
151
152 gfx::NativeWindow mainWnd() const { return m_mainWnd; }
153 gfx::NativeView webViewWnd() const { return m_webViewHost->view_handle(); }
154 gfx::NativeEditView editWnd() const { return m_editWnd; }
155 gfx::NativeView popupWnd() const { return m_popupHost->view_handle(); }
156
157 static WindowList* windowList() { return window_list_; }
158
159 // If shell is non-null, then *shell is assigned upon successful return
160 static bool CreateNewWindow(const GURL& starting_url,
161 TestShell** shell = NULL);
162
163 static void DestroyWindow(gfx::NativeWindow windowHandle);
164
165 // Remove the given window from window_list_, return true if it was in the
166 // list and was removed and false otherwise.
167 static bool RemoveWindowFromList(gfx::NativeWindow window);
168
169 // Implements CreateWebView for TestWebViewDelegate, which in turn
170 // is called as a WebViewDelegate.
171 WebKit::WebView* CreateWebView();
172 WebKit::WebWidget* CreatePopupWidget();
173 void ClosePopup();
174
175 #if defined(OS_WIN)
176 static ATOM RegisterWindowClass();
177 #endif
178
179 // Writes the back-forward list data for every open window into result.
180 // Should call DumpBackForwardListOfWindow on each TestShell window.
181 static void DumpAllBackForwardLists(base::string16* result);
182
183 // Writes the single back-forward entry into result.
184 void DumpBackForwardEntry(int index, base::string16* result);
185
186 // Writes the back-forward list data for this test shell into result.
187 void DumpBackForwardList(base::string16* result);
188
189 static void ResetWebPreferences();
190
191 static void SetAllowScriptsToCloseWindows();
192
193 static void SetAccelerated2dCanvasEnabled(bool enabled);
194 static void SetAcceleratedCompositingEnabled(bool enabled);
195
196 static WebPreferences* GetWebPreferences();
197
198 // Some layout tests hardcode a file:///tmp/LayoutTests URL. We get around
199 // this by substituting "tmp" with the path to the LayoutTests parent dir.
200 static std::string RewriteLocalUrl(const std::string& url);
201
202 // Set the JavaScript flags to use. This is a vector as when multiple loads
203 // are specified each load can have different flags passed.
204 static void SetJavaScriptFlags(std::vector<std::string> js_flags) {
205 js_flags_ = js_flags;
206 }
207
208 // Get the JavaScript flags for a specific load
209 static std::string GetJSFlagsForLoad(size_t load) {
210 if (load >= js_flags_.size())
211 return std::string();
212 return js_flags_[load];
213 }
214
215 // Have the shell print the StatsTable to stdout on teardown.
216 void DumpStatsTableOnExit() { dump_stats_table_on_exit_ = true; }
217
218 void CallJSGC();
219
220 void set_is_modal(bool value) { is_modal_ = value; }
221 bool is_modal() const { return is_modal_; }
222
223 const TestParams* test_params() { return test_params_; }
224 void set_test_params(const TestParams* test_params) {
225 test_params_ = test_params;
226 }
227
228 #if defined(OS_MACOSX)
229 // handle cleaning up a shell given the associated window
230 static void DestroyAssociatedShell(gfx::NativeWindow handle);
231 #endif
232
233 // Show the "attach to me" dialog, for debugging test shell startup.
234 static void ShowStartupDebuggingDialog();
235
236 // This is called indirectly by the modules that need access resources.
237 static base::StringPiece ResourceProvider(int key);
238
239 TestShellDevToolsAgent* dev_tools_agent() {
240 return dev_tools_agent_.get();
241 }
242
243 WebKit::WebDeviceOrientationClientMock* device_orientation_client_mock();
244
245 WebKit::WebGeolocationClientMock* geolocation_client_mock();
246
247 protected:
248 void CreateDevToolsClient(TestShellDevToolsAgent* agent);
249 bool Initialize(const GURL& starting_url);
250 bool IsSVGTestURL(const GURL& url);
251 void SizeToSVG();
252 void SizeToDefault();
253 void SizeTo(int width, int height);
254 void ResizeSubViews();
255
256 // Set the focus in interactive mode (pass through to relevant system call).
257 void InteractiveSetFocus(WebWidgetHost* host, bool enable);
258
259 enum UIControl {
260 BACK_BUTTON,
261 FORWARD_BUTTON,
262 STOP_BUTTON
263 };
264
265 void EnableUIControl(UIControl control, bool is_enabled);
266
267 #if defined(OS_WIN)
268 static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
269 static LRESULT CALLBACK EditWndProc(HWND, UINT, WPARAM, LPARAM);
270 #endif
271
272 static void PlatformShutdown();
273
274 gfx::NativeWindow m_mainWnd;
275 gfx::NativeEditView m_editWnd;
276 scoped_ptr<WebViewHost> m_webViewHost;
277 WebWidgetHost* m_popupHost;
278 #if defined(OS_WIN)
279 WNDPROC default_edit_wnd_proc_;
280 #endif
281
282 // Primitive focus controller for layout test mode.
283 WebWidgetHost* m_focusedWidgetHost;
284
285 private:
286 // A set of all our windows.
287 static WindowList* window_list_;
288 #if defined(OS_MACOSX)
289 typedef std::map<gfx::NativeWindow, TestShell *> WindowMap;
290 static base::LazyInstance<WindowMap> window_map_;
291 #endif
292
293 #if defined(OS_WIN)
294 static HINSTANCE instance_handle_;
295
296 static ui::ScopedOleInitializer* ole_initializer_;
297 #endif
298
299 // True when the app is being run using the --layout-tests switch.
300 static bool layout_test_mode_;
301
302 // True when we wish to allow test shell to load external pages like
303 // www.google.com even when in --layout-test mode (used for QA to
304 // produce images of the rendered page)
305 static bool allow_external_pages_;
306
307 scoped_ptr<TestNavigationController> navigation_controller_;
308 scoped_ptr<TestNotificationPresenter> notification_presenter_;
309
310 scoped_ptr<TestWebViewDelegate> delegate_;
311 scoped_ptr<TestWebViewDelegate> popup_delegate_;
312
313 base::WeakPtr<TestShell> devtools_shell_;
314 scoped_ptr<TestShellDevToolsAgent> dev_tools_agent_;
315 scoped_ptr<TestShellDevToolsClient> dev_tools_client_;
316 scoped_ptr<WebKit::WebDeviceOrientationClientMock>
317 device_orientation_client_mock_;
318 scoped_ptr<WebKit::WebGeolocationClientMock> geolocation_client_mock_;
319
320 const TestParams* test_params_;
321
322 // JavaScript flags. Each element in the vector contains a set of flags as
323 // a string (e.g. "--xxx --yyy"). Each flag set is used for separate loads
324 // of each URL.
325 static std::vector<std::string> js_flags_;
326
327 // True if we're testing the accelerated canvas 2d path.
328 static bool accelerated_2d_canvas_enabled_;
329
330 // True if we're testing the accelerated compositing.
331 static bool accelerated_compositing_enabled_;
332
333 // True if driven from a nested message loop.
334 bool is_modal_;
335
336 // True if the page is loading.
337 bool is_loading_;
338
339 bool allow_images_;
340 bool allow_plugins_;
341 bool allow_scripts_;
342
343 // The preferences for the test shell.
344 static WebPreferences* web_prefs_;
345
346 // Dump the stats table counters on exit.
347 bool dump_stats_table_on_exit_;
348 };
349
350 #endif // WEBKIT_TOOLS_TEST_SHELL_TEST_SHELL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698