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