462794af7d329fb87054f8ada4a173709a76b44e
[WebKit-https.git] / Tools / DumpRenderTree / chromium / TestRunner / src / TestRunner.h
1 /*
2  * Copyright (C) 2010 Google Inc. All rights reserved.
3  * Copyright (C) 2010 Pawel Hajdan (phajdan.jr@chromium.org)
4  * Copyright (C) 2012 Apple Inc. All Rights Reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are
8  * met:
9  *
10  *     * Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  *     * Redistributions in binary form must reproduce the above
13  * copyright notice, this list of conditions and the following disclaimer
14  * in the documentation and/or other materials provided with the
15  * distribution.
16  *     * Neither the name of Google Inc. nor the names of its
17  * contributors may be used to endorse or promote products derived from
18  * this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32
33 #ifndef TestRunner_h
34 #define TestRunner_h
35
36 #include "CppBoundClass.h"
37 #include "TestCommon.h"
38 #include "WebArrayBufferView.h"
39 #include "WebTask.h"
40 #include "WebTestRunner.h"
41 #include "WebTextDirection.h"
42 #include <deque>
43 #include <memory>
44 #include <public/WebURL.h>
45 #include <set>
46 #include <string>
47
48 namespace WebKit {
49 class WebArrayBufferView;
50 class WebNotificationPresenter;
51 class WebPermissionClient;
52 class WebView;
53 }
54
55 namespace WebTestRunner {
56
57 class NotificationPresenter;
58 class WebPermissions;
59 class WebTestDelegate;
60 class WebTestProxyBase;
61
62 class TestRunner : public WebTestRunner, public CppBoundClass {
63 public:
64     TestRunner();
65     virtual ~TestRunner();
66
67     void setDelegate(WebTestDelegate*);
68     void setWebView(WebKit::WebView*, WebTestProxyBase*);
69
70     void reset();
71
72     WebTaskList* taskList() { return &m_taskList; }
73
74     void setTestIsRunning(bool);
75
76     // WebTestRunner implementation.
77     virtual bool shouldGeneratePixelResults() OVERRIDE;
78     virtual bool shouldDumpAsAudio() const OVERRIDE;
79     virtual const WebKit::WebArrayBufferView* audioData() const OVERRIDE;
80     virtual WebKit::WebPermissionClient* webPermissions() const OVERRIDE;
81
82     // Methods used by WebTestProxyBase.
83     bool shouldDumpSelectionRect() const;
84     bool testRepaint() const;
85     bool sweepHorizontally() const;
86     bool isPrinting() const;
87     bool shouldDumpAsText();
88     bool shouldDumpBackForwardList() const;
89     bool shouldDumpChildFrameScrollPositions() const;
90     bool shouldDumpChildFramesAsText() const;
91     void showDevTools();
92     void setShouldDumpAsText(bool);
93     void setShouldGeneratePixelResults(bool);
94     void setShouldDumpFrameLoadCallbacks(bool);
95     bool shouldDumpEditingCallbacks() const;
96     bool shouldDumpFrameLoadCallbacks() const;
97     bool shouldDumpUserGestureInFrameLoadCallbacks() const;
98     bool stopProvisionalFrameLoads() const;
99     bool shouldDumpTitleChanges() const;
100     bool shouldDumpCreateView() const;
101     bool canOpenWindows() const;
102     bool shouldDumpResourceLoadCallbacks() const;
103     bool shouldDumpResourceRequestCallbacks() const;
104     bool shouldDumpResourceResponseMIMETypes() const;
105     bool shouldDumpStatusCallbacks() const;
106     bool shouldDumpProgressFinishedCallback() const;
107     bool deferMainResourceDataLoad() const;
108     bool shouldStayOnPageAfterHandlingBeforeUnload() const;
109     void setTitleTextDirection(WebKit::WebTextDirection);
110     const std::set<std::string>* httpHeadersToClear() const;
111     bool shouldBlockRedirects() const;
112     bool willSendRequestShouldReturnNull() const;
113     void setTopLoadingFrame(WebKit::WebFrame*, bool);
114     WebKit::WebFrame* topLoadingFrame() const;
115     void policyDelegateDone();
116     bool policyDelegateEnabled() const;
117     bool policyDelegateIsPermissive() const;
118     bool policyDelegateShouldNotifyDone() const;
119     bool shouldInterceptPostMessage() const;
120     bool isSmartInsertDeleteEnabled() const;
121     bool isSelectTrailingWhitespaceEnabled() const;
122 #if ENABLE_NOTIFICATIONS
123     WebKit::WebNotificationPresenter* notificationPresenter() const;
124 #endif
125
126     // A single item in the work queue.
127     class WorkItem {
128     public:
129         virtual ~WorkItem() { }
130
131         // Returns true if this started a load.
132         virtual bool run(WebTestDelegate*, WebKit::WebView*) = 0;
133     };
134
135 private:
136     friend class WorkQueue;
137
138     // Helper class for managing events queued by methods like queueLoad or
139     // queueScript.
140     class WorkQueue {
141     public:
142         WorkQueue(TestRunner* controller) : m_frozen(false), m_controller(controller) { }
143         virtual ~WorkQueue();
144         void processWorkSoon();
145
146         // Reset the state of the class between tests.
147         void reset();
148
149         void addWork(WorkItem*);
150
151         void setFrozen(bool frozen) { m_frozen = frozen; }
152         bool isEmpty() { return m_queue.empty(); }
153         WebTaskList* taskList() { return &m_taskList; }
154
155     private:
156         void processWork();
157         class WorkQueueTask: public WebMethodTask<WorkQueue> {
158         public:
159             WorkQueueTask(WorkQueue* object): WebMethodTask<WorkQueue>(object) { }
160             virtual void runIfValid() { m_object->processWork(); }
161         };
162
163         WebTaskList m_taskList;
164         std::deque<WorkItem*> m_queue;
165         bool m_frozen;
166         TestRunner* m_controller;
167     };
168     ///////////////////////////////////////////////////////////////////////////
169     // Methods dealing with the test logic
170
171     // By default, tests end when page load is complete. These methods are used
172     // to delay the completion of the test until notifyDone is called.
173     void waitUntilDone(const CppArgumentList&, CppVariant*);
174     void notifyDone(const CppArgumentList&, CppVariant*);
175
176     // Methods for adding actions to the work queue. Used in conjunction with
177     // waitUntilDone/notifyDone above.
178     void queueBackNavigation(const CppArgumentList&, CppVariant*);
179     void queueForwardNavigation(const CppArgumentList&, CppVariant*);
180     void queueReload(const CppArgumentList&, CppVariant*);
181     void queueLoadingScript(const CppArgumentList&, CppVariant*);
182     void queueNonLoadingScript(const CppArgumentList&, CppVariant*);
183     void queueLoad(const CppArgumentList&, CppVariant*);
184     void queueLoadHTMLString(const CppArgumentList&, CppVariant*);
185
186
187     // Causes navigation actions just printout the intended navigation instead
188     // of taking you to the page. This is used for cases like mailto, where you
189     // don't actually want to open the mail program.
190     void setCustomPolicyDelegate(const CppArgumentList&, CppVariant*);
191
192     // Delays completion of the test until the policy delegate runs.
193     void waitForPolicyDelegate(const CppArgumentList&, CppVariant*);
194
195     // Functions for dealing with windows. By default we block all new windows.
196     void windowCount(const CppArgumentList&, CppVariant*);
197     void setCloseRemainingWindowsWhenComplete(const CppArgumentList&, CppVariant*);
198
199     ///////////////////////////////////////////////////////////////////////////
200     // Methods implemented entirely in terms of chromium's public WebKit API
201
202     // Method that controls whether pressing Tab key cycles through page elements
203     // or inserts a '\t' char in text area
204     void setTabKeyCyclesThroughElements(const CppArgumentList&, CppVariant*);
205
206     // Executes an internal command (superset of document.execCommand() commands).
207     void execCommand(const CppArgumentList&, CppVariant*);
208
209     // Checks if an internal command is currently available.
210     void isCommandEnabled(const CppArgumentList&, CppVariant*);
211
212     void elementDoesAutoCompleteForElementWithId(const CppArgumentList&, CppVariant*);
213     void callShouldCloseOnWebView(const CppArgumentList&, CppVariant*);
214     void setDomainRelaxationForbiddenForURLScheme(const CppArgumentList&, CppVariant*);
215     void evaluateScriptInIsolatedWorldAndReturnValue(const CppArgumentList&, CppVariant*);
216     void evaluateScriptInIsolatedWorld(const CppArgumentList&, CppVariant*);
217     void setIsolatedWorldSecurityOrigin(const CppArgumentList&, CppVariant*);
218     void setIsolatedWorldContentSecurityPolicy(const CppArgumentList&, CppVariant*);
219
220     // Allows layout tests to manage origins' whitelisting.
221     void addOriginAccessWhitelistEntry(const CppArgumentList&, CppVariant*);
222     void removeOriginAccessWhitelistEntry(const CppArgumentList&, CppVariant*);
223
224     // Returns true if the current page box has custom page size style for
225     // printing.
226     void hasCustomPageSizeStyle(const CppArgumentList&, CppVariant*);
227
228     // Forces the selection colors for testing under Linux.
229     void forceRedSelectionColors(const CppArgumentList&, CppVariant*);
230
231     // Adds a user script or user style sheet to be injected into new documents.
232     void addUserScript(const CppArgumentList&, CppVariant*);
233     void addUserStyleSheet(const CppArgumentList&, CppVariant*);
234
235     void startSpeechInput(const CppArgumentList&, CppVariant*);
236
237     void markerTextForListItem(const CppArgumentList&, CppVariant*);
238     void findString(const CppArgumentList&, CppVariant*);
239
240     // Expects the first argument to be an input element and the second argument to be a boolean.
241     // Forwards the setAutofilled() call to the element.
242     void setAutofilled(const CppArgumentList&, CppVariant*);
243
244     // Expects the first argument to be an input element and the second argument to be a string value.
245     // Forwards the setValueForUser() call to the element.
246     void setValueForUser(const CppArgumentList&, CppVariant*);
247
248     void enableFixedLayoutMode(const CppArgumentList&, CppVariant*);
249     void setFixedLayoutSize(const CppArgumentList&, CppVariant*);
250
251     void selectionAsMarkup(const CppArgumentList&, CppVariant*);
252
253     // Enables or disables subpixel positioning (i.e. fractional X positions for
254     // glyphs) in text rendering on Linux. Since this method changes global
255     // settings, tests that call it must use their own custom font family for
256     // all text that they render. If not, an already-cached style will be used,
257     // resulting in the changed setting being ignored.
258     void setTextSubpixelPositioning(const CppArgumentList&, CppVariant*);
259
260     // Switch the visibility of the page.
261     void setPageVisibility(const CppArgumentList&, CppVariant*);
262     void resetPageVisibility(const CppArgumentList&, CppVariant*);
263
264     // Changes the direction of the focused element.
265     void setTextDirection(const CppArgumentList&, CppVariant*);
266
267     // Retrieves the text surrounding a position in a text node.
268     // Expects the first argument to be a text node, the second and third to be
269     // point coordinates relative to the node and the fourth the maximum text
270     // length to retrieve.
271     void textSurroundingNode(const CppArgumentList&, CppVariant*);
272
273     // Enable or disable smart insert/delete. This is enabled by default.
274     void setSmartInsertDeleteEnabled(const CppArgumentList&, CppVariant*);
275
276     // Enable or disable trailing whitespace selection on double click.
277     void setSelectTrailingWhitespaceEnabled(const CppArgumentList&, CppVariant*);
278     void enableAutoResizeMode(const CppArgumentList&, CppVariant*);
279     void disableAutoResizeMode(const CppArgumentList&, CppVariant*);
280
281     // DeviceOrientation related functions
282     void setMockDeviceOrientation(const CppArgumentList&, CppVariant*);
283
284     void didAcquirePointerLock(const CppArgumentList&, CppVariant*);
285     void didNotAcquirePointerLock(const CppArgumentList&, CppVariant*);
286     void didLosePointerLock(const CppArgumentList&, CppVariant*);
287     void setPointerLockWillFailSynchronously(const CppArgumentList&, CppVariant*);
288     void setPointerLockWillRespondAsynchronously(const CppArgumentList&, CppVariant*);
289
290     ///////////////////////////////////////////////////////////////////////////
291     // Methods modifying WebPreferences.
292
293     // Passes through to WebPreferences which allows the user to have a custom
294     // style sheet.
295     void setUserStyleSheetEnabled(const CppArgumentList&, CppVariant*);
296     void setUserStyleSheetLocation(const CppArgumentList&, CppVariant*);
297
298     // Passes this preference through to WebSettings.
299     void setAuthorAndUserStylesEnabled(const CppArgumentList&, CppVariant*);
300
301     // Set the WebPreference that controls webkit's popup blocking.
302     void setPopupBlockingEnabled(const CppArgumentList&, CppVariant*);
303
304     void setJavaScriptCanAccessClipboard(const CppArgumentList&, CppVariant*);
305     void setXSSAuditorEnabled(const CppArgumentList&, CppVariant*);
306     void setAllowUniversalAccessFromFileURLs(const CppArgumentList&, CppVariant*);
307     void setAllowFileAccessFromFileURLs(const CppArgumentList&, CppVariant*);
308     void overridePreference(const CppArgumentList&, CppVariant*);
309
310     // Enable or disable plugins.
311     void setPluginsEnabled(const CppArgumentList&, CppVariant*);
312
313     // Changes asynchronous spellchecking flag on the settings.
314     void setAsynchronousSpellCheckingEnabled(const CppArgumentList&, CppVariant*);
315
316     void setTouchDragDropEnabled(const CppArgumentList&, CppVariant*);
317
318     ///////////////////////////////////////////////////////////////////////////
319     // Methods that modify the state of TestRunner
320
321     // This function sets a flag that tells the test_shell to print a line of
322     // descriptive text for each editing command. It takes no arguments, and
323     // ignores any that may be present.
324     void dumpEditingCallbacks(const CppArgumentList&, CppVariant*);
325
326     // This function sets a flag that tells the test_shell to dump pages as
327     // plain text, rather than as a text representation of the renderer's state.
328     // It takes an optional argument, whether to dump pixels results or not.
329     void dumpAsText(const CppArgumentList&, CppVariant*);
330
331     // This function sets a flag that tells the test_shell to print out the
332     // scroll offsets of the child frames. It ignores all.
333     void dumpChildFrameScrollPositions(const CppArgumentList&, CppVariant*);
334
335     // This function sets a flag that tells the test_shell to recursively
336     // dump all frames as plain text if the dumpAsText flag is set.
337     // It takes no arguments, and ignores any that may be present.
338     void dumpChildFramesAsText(const CppArgumentList&, CppVariant*);
339
340     // Deals with Web Audio WAV file data.
341     void setAudioData(const CppArgumentList&, CppVariant*);
342
343     // This function sets a flag that tells the test_shell to print a line of
344     // descriptive text for each frame load callback. It takes no arguments, and
345     // ignores any that may be present.
346     void dumpFrameLoadCallbacks(const CppArgumentList&, CppVariant*);
347
348     // This function sets a flag that tells the test_shell to print a line of
349     // user gesture status text for some frame load callbacks. It takes no
350     // arguments, and ignores any that may be present.
351     void dumpUserGestureInFrameLoadCallbacks(const CppArgumentList&, CppVariant*);
352
353     // If true, causes provisional frame loads to be stopped for the remainder of
354     // the test.
355     void setStopProvisionalFrameLoads(const CppArgumentList&, CppVariant*);
356
357     void dumpTitleChanges(const CppArgumentList&, CppVariant*);
358
359     // This function sets a flag that tells the test_shell to dump all calls to
360     // WebViewClient::createView().
361     // It takes no arguments, and ignores any that may be present.
362     void dumpCreateView(const CppArgumentList&, CppVariant*);
363
364     void setCanOpenWindows(const CppArgumentList&, CppVariant*);
365
366     // This function sets a flag that tells the test_shell to dump a descriptive
367     // line for each resource load callback. It takes no arguments, and ignores
368     // any that may be present.
369     void dumpResourceLoadCallbacks(const CppArgumentList&, CppVariant*);
370
371     // This function sets a flag that tells the test_shell to print a line of
372     // descriptive text for each element that requested a resource. It takes no
373     // arguments, and ignores any that may be present.
374     void dumpResourceRequestCallbacks(const CppArgumentList&, CppVariant*);
375
376     // This function sets a flag that tells the test_shell to dump the MIME type
377     // for each resource that was loaded. It takes no arguments, and ignores any
378     // that may be present.
379     void dumpResourceResponseMIMETypes(const CppArgumentList&, CppVariant*);
380
381     // WebPermissionClient related.
382     void setImagesAllowed(const CppArgumentList&, CppVariant*);
383     void setScriptsAllowed(const CppArgumentList&, CppVariant*);
384     void setStorageAllowed(const CppArgumentList&, CppVariant*);
385     void setPluginsAllowed(const CppArgumentList&, CppVariant*);
386     void setAllowDisplayOfInsecureContent(const CppArgumentList&, CppVariant*);
387     void setAllowRunningOfInsecureContent(const CppArgumentList&, CppVariant*);
388     void dumpPermissionClientCallbacks(const CppArgumentList&, CppVariant*);
389
390     // This function sets a flag that tells the test_shell to dump all calls
391     // to window.status().
392     // It takes no arguments, and ignores any that may be present.
393     void dumpWindowStatusChanges(const CppArgumentList&, CppVariant*);
394
395     // This function sets a flag that tells the test_shell to print a line of
396     // descriptive text for the progress finished callback. It takes no
397     // arguments, and ignores any that may be present.
398     void dumpProgressFinishedCallback(const CppArgumentList&, CppVariant*);
399
400     // This function sets a flag that tells the test_shell to print out a text
401     // representation of the back/forward list. It ignores all arguments.
402     void dumpBackForwardList(const CppArgumentList&, CppVariant*);
403
404     void setDeferMainResourceDataLoad(const CppArgumentList&, CppVariant*);
405     void dumpSelectionRect(const CppArgumentList&, CppVariant*);
406     void testRepaint(const CppArgumentList&, CppVariant*);
407     void repaintSweepHorizontally(const CppArgumentList&, CppVariant*);
408
409     // Causes layout to happen as if targetted to printed pages.
410     void setPrinting(const CppArgumentList&, CppVariant*);
411
412     void setShouldStayOnPageAfterHandlingBeforeUnload(const CppArgumentList&, CppVariant*);
413
414     // Causes WillSendRequest to clear certain headers.
415     void setWillSendRequestClearHeader(const CppArgumentList&, CppVariant*);
416
417     // Causes WillSendRequest to block redirects.
418     void setWillSendRequestReturnsNullOnRedirect(const CppArgumentList&, CppVariant*);
419
420     // Causes WillSendRequest to return an empty request.
421     void setWillSendRequestReturnsNull(const CppArgumentList&, CppVariant*);
422
423     ///////////////////////////////////////////////////////////////////////////
424     // Methods interacting with the WebTestProxy
425
426     ///////////////////////////////////////////////////////////////////////////
427     // Methods forwarding to the WebTestDelegate
428
429     // Shows DevTools window.
430     void showWebInspector(const CppArgumentList&, CppVariant*);
431     void closeWebInspector(const CppArgumentList&, CppVariant*);
432
433     // Allows layout tests to exec scripts at WebInspector side.
434     void evaluateInWebInspector(const CppArgumentList&, CppVariant*);
435
436     // Clears all databases.
437     void clearAllDatabases(const CppArgumentList&, CppVariant*);
438     // Sets the default quota for all origins
439     void setDatabaseQuota(const CppArgumentList&, CppVariant*);
440
441     // Changes the cookie policy from the default to allow all cookies.
442     void setAlwaysAcceptCookies(const CppArgumentList&, CppVariant*);
443
444     // Gives focus to the window.
445     void setWindowIsKey(const CppArgumentList&, CppVariant*);
446
447     // Converts a URL starting with file:///tmp/ to the local mapping.
448     void pathToLocalResource(const CppArgumentList&, CppVariant*);
449
450     // Used to set the device scale factor.
451     void setBackingScaleFactor(const CppArgumentList&, CppVariant*);
452
453     // Calls setlocale(LC_ALL, ...) for a specified locale.
454     // Resets between tests.
455     void setPOSIXLocale(const CppArgumentList&, CppVariant*);
456
457     // Gets the number of geolocation permissions requests pending.
458     void numberOfPendingGeolocationPermissionRequests(const CppArgumentList&, CppVariant*);
459
460     // Geolocation related functions.
461     void setGeolocationPermission(const CppArgumentList&, CppVariant*);
462     void setMockGeolocationPosition(const CppArgumentList&, CppVariant*);
463     void setMockGeolocationPositionUnavailableError(const CppArgumentList&, CppVariant*);
464
465 #if ENABLE_NOTIFICATIONS
466     // Grants permission for desktop notifications to an origin
467     void grantWebNotificationPermission(const CppArgumentList&, CppVariant*);
468     // Simulates a click on a desktop notification.
469     void simulateLegacyWebNotificationClick(const CppArgumentList&, CppVariant*);
470 #endif
471
472     // Speech input related functions.
473     void addMockSpeechInputResult(const CppArgumentList&, CppVariant*);
474     void setMockSpeechInputDumpRect(const CppArgumentList&, CppVariant*);
475     void addMockSpeechRecognitionResult(const CppArgumentList&, CppVariant*);
476     void setMockSpeechRecognitionError(const CppArgumentList&, CppVariant*);
477     void wasMockSpeechRecognitionAborted(const CppArgumentList&, CppVariant*);
478
479     void display(const CppArgumentList&, CppVariant*);
480     void displayInvalidatedRegion(const CppArgumentList&, CppVariant*);
481
482     //////////////////////////////////////////////////////////////////////////
483     // Fallback and stub methods
484
485     // The fallback method is called when a nonexistent method is called on
486     // the layout test controller object.
487     // It is usefull to catch typos in the JavaScript code (a few layout tests
488     // do have typos in them) and it allows the script to continue running in
489     // that case (as the Mac does).
490     void fallbackMethod(const CppArgumentList&, CppVariant*);
491
492     // Stub for not implemented methods.
493     void notImplemented(const CppArgumentList&, CppVariant*);
494
495     ///////////////////////////////////////////////////////////////////////////
496     // Internal helpers
497     void checkResponseMimeType();
498     void completeNotifyDone(bool isTimeout);
499     class NotifyDoneTimedOutTask: public WebMethodTask<TestRunner> {
500     public:
501         NotifyDoneTimedOutTask(TestRunner* object): WebMethodTask<TestRunner>(object) { }
502         virtual void runIfValid() { m_object->completeNotifyDone(true); }
503     };
504
505     bool elementDoesAutoCompleteForElementWithId(const WebKit::WebString&);
506     bool cppVariantToBool(const CppVariant&);
507     int32_t cppVariantToInt32(const CppVariant&);
508     WebKit::WebString cppVariantToWebString(const CppVariant&);
509
510     void printErrorMessage(const std::string&);
511
512     // In the Mac code, this is called to trigger the end of a test after the
513     // page has finished loading. From here, we can generate the dump for the
514     // test.
515     void locationChangeDone();
516
517     bool m_testIsRunning;
518
519     // When reset is called, go through and close all but the main test shell
520     // window. By default, set to true but toggled to false using
521     // setCloseRemainingWindowsWhenComplete().
522     bool m_closeRemainingWindows;
523
524     // If true, don't dump output until notifyDone is called.
525     bool m_waitUntilDone;
526
527     // Causes navigation actions just printout the intended navigation instead
528     // of taking you to the page. This is used for cases like mailto, where you
529     // don't actually want to open the mail program.
530     bool m_policyDelegateEnabled;
531
532     // Toggles the behavior of the policy delegate. If true, then navigations
533     // will be allowed. Otherwise, they will be ignored (dropped).
534     bool m_policyDelegateIsPermissive;
535
536     // If true, the policy delegate will signal layout test completion.
537     bool m_policyDelegateShouldNotifyDone;
538
539     WorkQueue m_workQueue;
540
541     WebKit::WebURL m_userStyleSheetLocation;
542
543     // globalFlag is used by a number of layout tests in http/tests/security/dataURL.
544     CppVariant m_globalFlag;
545
546     // Bound variable to return the name of this platform (chromium).
547     CppVariant m_platformName;
548
549     // Bound variable tracking the directionality of the <title> tag.
550     CppVariant m_titleTextDirection;
551
552     // Bound variable counting the number of top URLs visited.
553     CppVariant m_webHistoryItemCount;
554
555     // Bound variable to set whether postMessages should be intercepted or not
556     CppVariant m_interceptPostMessage;
557
558     // If true, the test_shell will write a descriptive line for each editing
559     // command.
560     bool m_dumpEditingCallbacks;
561
562     // If true, the test_shell will generate pixel results in dumpAsText mode
563     bool m_generatePixelResults;
564
565     // If true, the test_shell will produce a plain text dump rather than a
566     // text representation of the renderer.
567     bool m_dumpAsText;
568
569     // If true and if dump_as_text_ is true, the test_shell will recursively
570     // dump all frames as plain text.
571     bool m_dumpChildFramesAsText;
572
573     // If true, the test_shell will print out the child frame scroll offsets as
574     // well.
575     bool m_dumpChildFrameScrollPositions;
576
577     // If true, the test_shell will output a base64 encoded WAVE file.
578     bool m_dumpAsAudio;
579
580     // If true, the test_shell will output a descriptive line for each frame
581     // load callback.
582     bool m_dumpFrameLoadCallbacks;
583
584     // If true, the test_shell will output a line of the user gesture status
585     // text for some frame load callbacks.
586     bool m_dumpUserGestureInFrameLoadCallbacks;
587
588     // If true, stops provisional frame loads during the
589     // DidStartProvisionalLoadForFrame callback.
590     bool m_stopProvisionalFrameLoads;
591
592     // If true, output a message when the page title is changed.
593     bool m_dumpTitleChanges;
594
595     // If true, output a descriptive line each time WebViewClient::createView
596     // is invoked.
597     bool m_dumpCreateView;
598
599     // If true, new windows can be opened via javascript or by plugins. By
600     // default, set to false and can be toggled to true using
601     // setCanOpenWindows().
602     bool m_canOpenWindows;
603
604     // If true, the test_shell will output a descriptive line for each resource
605     // load callback.
606     bool m_dumpResourceLoadCallbacks;
607
608     // If true, the test_shell will output a descriptive line for each resource
609     // request callback.
610     bool m_dumpResourceRequestCallbacks;
611
612     // If true, the test_shell will output the MIME type for each resource that 
613     // was loaded.
614     bool m_dumpResourceResponseMIMETypes;
615
616     // If true, the test_shell will dump all changes to window.status.
617     bool m_dumpWindowStatusChanges;
618
619     // If true, the test_shell will output a descriptive line for the progress
620     // finished callback.
621     bool m_dumpProgressFinishedCallback;
622
623     // If true, the test_shell will produce a dump of the back forward list as
624     // well.
625     bool m_dumpBackForwardList;
626
627     // If false, all new requests will not defer the main resource data load.
628     bool m_deferMainResourceDataLoad;
629
630     // If true, the test_shell will draw the bounds of the current selection rect
631     // taking possible transforms of the selection rect into account.
632     bool m_dumpSelectionRect;
633
634     // If true, pixel dump will be produced as a series of 1px-tall, view-wide
635     // individual paints over the height of the view.
636     bool m_testRepaint;
637
638     // If true and test_repaint_ is true as well, pixel dump will be produced as
639     // a series of 1px-wide, view-tall paints across the width of the view.
640     bool m_sweepHorizontally;
641
642     // If true, layout is to target printed pages.
643     bool m_isPrinting;
644
645     bool m_shouldStayOnPageAfterHandlingBeforeUnload;
646
647     bool m_shouldBlockRedirects;
648
649     bool m_willSendRequestShouldReturnNull;
650
651     bool m_smartInsertDeleteEnabled;
652
653     bool m_selectTrailingWhitespaceEnabled;
654
655     std::set<std::string> m_httpHeadersToClear;
656
657     // WAV audio data is stored here.
658     WebKit::WebArrayBufferView m_audioData;
659
660     // Used for test timeouts.
661     WebTaskList m_taskList;
662
663     WebTestDelegate* m_delegate;
664     WebKit::WebView* m_webView;
665     WebTestProxyBase* m_proxy;
666
667     // This is non-0 IFF a load is in progress.
668     WebKit::WebFrame* m_topLoadingFrame;
669
670     // WebPermissionClient mock object.
671     std::auto_ptr<WebPermissions> m_webPermissions;
672
673 #if ENABLE_NOTIFICATIONS
674     std::auto_ptr<NotificationPresenter> m_notificationPresenter;
675 #endif
676 };
677
678 }
679
680 #endif // TestRunner_h