25e7fe84589b7d8171fc619b09589cd1191608b1
[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 bool shouldDumpBackForwardList() const OVERRIDE;
82     virtual WebKit::WebPermissionClient* webPermissions() const OVERRIDE;
83
84     // Methods used by WebTestProxyBase.
85     bool shouldDumpSelectionRect() const;
86     bool testRepaint() const;
87     bool sweepHorizontally() const;
88     bool isPrinting() const;
89     bool shouldDumpAsText();
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     bool shouldDumpResourcePriorities() const;
124 #if ENABLE_NOTIFICATIONS
125     WebKit::WebNotificationPresenter* notificationPresenter() const;
126 #endif
127     bool requestPointerLock();
128     void requestPointerUnlock();
129     bool isPointerLocked();
130
131     // A single item in the work queue.
132     class WorkItem {
133     public:
134         virtual ~WorkItem() { }
135
136         // Returns true if this started a load.
137         virtual bool run(WebTestDelegate*, WebKit::WebView*) = 0;
138     };
139
140 private:
141     friend class WorkQueue;
142
143     // Helper class for managing events queued by methods like queueLoad or
144     // queueScript.
145     class WorkQueue {
146     public:
147         WorkQueue(TestRunner* controller) : m_frozen(false), m_controller(controller) { }
148         virtual ~WorkQueue();
149         void processWorkSoon();
150
151         // Reset the state of the class between tests.
152         void reset();
153
154         void addWork(WorkItem*);
155
156         void setFrozen(bool frozen) { m_frozen = frozen; }
157         bool isEmpty() { return m_queue.empty(); }
158         WebTaskList* taskList() { return &m_taskList; }
159
160     private:
161         void processWork();
162         class WorkQueueTask: public WebMethodTask<WorkQueue> {
163         public:
164             WorkQueueTask(WorkQueue* object): WebMethodTask<WorkQueue>(object) { }
165             virtual void runIfValid() { m_object->processWork(); }
166         };
167
168         WebTaskList m_taskList;
169         std::deque<WorkItem*> m_queue;
170         bool m_frozen;
171         TestRunner* m_controller;
172     };
173     ///////////////////////////////////////////////////////////////////////////
174     // Methods dealing with the test logic
175
176     // By default, tests end when page load is complete. These methods are used
177     // to delay the completion of the test until notifyDone is called.
178     void waitUntilDone(const CppArgumentList&, CppVariant*);
179     void notifyDone(const CppArgumentList&, CppVariant*);
180
181     // Methods for adding actions to the work queue. Used in conjunction with
182     // waitUntilDone/notifyDone above.
183     void queueBackNavigation(const CppArgumentList&, CppVariant*);
184     void queueForwardNavigation(const CppArgumentList&, CppVariant*);
185     void queueReload(const CppArgumentList&, CppVariant*);
186     void queueLoadingScript(const CppArgumentList&, CppVariant*);
187     void queueNonLoadingScript(const CppArgumentList&, CppVariant*);
188     void queueLoad(const CppArgumentList&, CppVariant*);
189     void queueLoadHTMLString(const CppArgumentList&, CppVariant*);
190
191
192     // Causes navigation actions just printout the intended navigation instead
193     // of taking you to the page. This is used for cases like mailto, where you
194     // don't actually want to open the mail program.
195     void setCustomPolicyDelegate(const CppArgumentList&, CppVariant*);
196
197     // Delays completion of the test until the policy delegate runs.
198     void waitForPolicyDelegate(const CppArgumentList&, CppVariant*);
199
200     // Functions for dealing with windows. By default we block all new windows.
201     void windowCount(const CppArgumentList&, CppVariant*);
202     void setCloseRemainingWindowsWhenComplete(const CppArgumentList&, CppVariant*);
203
204     ///////////////////////////////////////////////////////////////////////////
205     // Methods implemented entirely in terms of chromium's public WebKit API
206
207     // Method that controls whether pressing Tab key cycles through page elements
208     // or inserts a '\t' char in text area
209     void setTabKeyCyclesThroughElements(const CppArgumentList&, CppVariant*);
210
211     // Executes an internal command (superset of document.execCommand() commands).
212     void execCommand(const CppArgumentList&, CppVariant*);
213
214     // Checks if an internal command is currently available.
215     void isCommandEnabled(const CppArgumentList&, CppVariant*);
216
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 findString(const CppArgumentList&, CppVariant*);
242
243     // Expects the first argument to be an input element and the second argument to be a string value.
244     // Forwards the setValueForUser() call to the element.
245     void setValueForUser(const CppArgumentList&, CppVariant*);
246
247     void enableFixedLayoutMode(const CppArgumentList&, CppVariant*);
248     void setFixedLayoutSize(const CppArgumentList&, CppVariant*);
249
250     void selectionAsMarkup(const CppArgumentList&, CppVariant*);
251
252     // Enables or disables subpixel positioning (i.e. fractional X positions for
253     // glyphs) in text rendering on Linux. Since this method changes global
254     // settings, tests that call it must use their own custom font family for
255     // all text that they render. If not, an already-cached style will be used,
256     // resulting in the changed setting being ignored.
257     void setTextSubpixelPositioning(const CppArgumentList&, CppVariant*);
258
259     // Switch the visibility of the page.
260     void setPageVisibility(const CppArgumentList&, CppVariant*);
261     void resetPageVisibility(const CppArgumentList&, CppVariant*);
262
263     // Changes the direction of the focused element.
264     void setTextDirection(const CppArgumentList&, CppVariant*);
265
266     // Retrieves the text surrounding a position in a text node.
267     // Expects the first argument to be a text node, the second and third to be
268     // point coordinates relative to the node and the fourth the maximum text
269     // length to retrieve.
270     void textSurroundingNode(const CppArgumentList&, CppVariant*);
271
272     // Enable or disable smart insert/delete. This is enabled by default.
273     void setSmartInsertDeleteEnabled(const CppArgumentList&, CppVariant*);
274
275     // Enable or disable trailing whitespace selection on double click.
276     void setSelectTrailingWhitespaceEnabled(const CppArgumentList&, CppVariant*);
277     void enableAutoResizeMode(const CppArgumentList&, CppVariant*);
278     void disableAutoResizeMode(const CppArgumentList&, CppVariant*);
279
280     // DeviceOrientation related functions
281     void setMockDeviceOrientation(const CppArgumentList&, CppVariant*);
282
283     void didAcquirePointerLock(const CppArgumentList&, CppVariant*);
284     void didNotAcquirePointerLock(const CppArgumentList&, CppVariant*);
285     void didLosePointerLock(const CppArgumentList&, CppVariant*);
286     void setPointerLockWillFailSynchronously(const CppArgumentList&, CppVariant*);
287     void setPointerLockWillRespondAsynchronously(const CppArgumentList&, CppVariant*);
288
289     ///////////////////////////////////////////////////////////////////////////
290     // Methods modifying WebPreferences.
291
292     // Passes through to WebPreferences which allows the user to have a custom
293     // style sheet.
294     void setUserStyleSheetEnabled(const CppArgumentList&, CppVariant*);
295     void setUserStyleSheetLocation(const CppArgumentList&, CppVariant*);
296
297     // Passes this preference through to WebSettings.
298     void setAuthorAndUserStylesEnabled(const CppArgumentList&, CppVariant*);
299
300     // Set the WebPreference that controls webkit's popup blocking.
301     void setPopupBlockingEnabled(const CppArgumentList&, CppVariant*);
302
303     void setJavaScriptCanAccessClipboard(const CppArgumentList&, CppVariant*);
304     void setXSSAuditorEnabled(const CppArgumentList&, CppVariant*);
305     void setAllowUniversalAccessFromFileURLs(const CppArgumentList&, CppVariant*);
306     void setAllowFileAccessFromFileURLs(const CppArgumentList&, CppVariant*);
307     void overridePreference(const CppArgumentList&, CppVariant*);
308
309     // Enable or disable plugins.
310     void setPluginsEnabled(const CppArgumentList&, CppVariant*);
311
312     // Changes asynchronous spellchecking flag on the settings.
313     void setAsynchronousSpellCheckingEnabled(const CppArgumentList&, CppVariant*);
314
315     void setTouchDragDropEnabled(const CppArgumentList&, CppVariant*);
316
317     ///////////////////////////////////////////////////////////////////////////
318     // Methods that modify the state of TestRunner
319
320     // This function sets a flag that tells the test_shell to print a line of
321     // descriptive text for each editing command. It takes no arguments, and
322     // ignores any that may be present.
323     void dumpEditingCallbacks(const CppArgumentList&, CppVariant*);
324
325     // This function sets a flag that tells the test_shell to dump pages as
326     // plain text, rather than as a text representation of the renderer's state.
327     // It takes an optional argument, whether to dump pixels results or not.
328     void dumpAsText(const CppArgumentList&, CppVariant*);
329
330     // This function sets a flag that tells the test_shell to print out the
331     // scroll offsets of the child frames. It ignores all.
332     void dumpChildFrameScrollPositions(const CppArgumentList&, CppVariant*);
333
334     // This function sets a flag that tells the test_shell to recursively
335     // dump all frames as plain text if the dumpAsText flag is set.
336     // It takes no arguments, and ignores any that may be present.
337     void dumpChildFramesAsText(const CppArgumentList&, CppVariant*);
338
339     // Deals with Web Audio WAV file data.
340     void setAudioData(const CppArgumentList&, CppVariant*);
341
342     // This function sets a flag that tells the test_shell to print a line of
343     // descriptive text for each frame load callback. It takes no arguments, and
344     // ignores any that may be present.
345     void dumpFrameLoadCallbacks(const CppArgumentList&, CppVariant*);
346
347     // This function sets a flag that tells the test_shell to print a line of
348     // user gesture status text for some frame load callbacks. It takes no
349     // arguments, and ignores any that may be present.
350     void dumpUserGestureInFrameLoadCallbacks(const CppArgumentList&, CppVariant*);
351
352     // If true, causes provisional frame loads to be stopped for the remainder of
353     // the test.
354     void setStopProvisionalFrameLoads(const CppArgumentList&, CppVariant*);
355
356     void dumpTitleChanges(const CppArgumentList&, CppVariant*);
357
358     // This function sets a flag that tells the test_shell to dump all calls to
359     // WebViewClient::createView().
360     // It takes no arguments, and ignores any that may be present.
361     void dumpCreateView(const CppArgumentList&, CppVariant*);
362
363     void setCanOpenWindows(const CppArgumentList&, CppVariant*);
364
365     // This function sets a flag that tells the test_shell to dump a descriptive
366     // line for each resource load callback. It takes no arguments, and ignores
367     // any that may be present.
368     void dumpResourceLoadCallbacks(const CppArgumentList&, CppVariant*);
369
370     // This function sets a flag that tells the test_shell to print a line of
371     // descriptive text for each element that requested a resource. It takes no
372     // arguments, and ignores any that may be present.
373     void dumpResourceRequestCallbacks(const CppArgumentList&, CppVariant*);
374
375     // This function sets a flag that tells the test_shell to dump the MIME type
376     // for each resource that was loaded. It takes no arguments, and ignores any
377     // that may be present.
378     void dumpResourceResponseMIMETypes(const CppArgumentList&, CppVariant*);
379
380     // WebPermissionClient related.
381     void setImagesAllowed(const CppArgumentList&, CppVariant*);
382     void setScriptsAllowed(const CppArgumentList&, CppVariant*);
383     void setStorageAllowed(const CppArgumentList&, CppVariant*);
384     void setPluginsAllowed(const CppArgumentList&, CppVariant*);
385     void setAllowDisplayOfInsecureContent(const CppArgumentList&, CppVariant*);
386     void setAllowRunningOfInsecureContent(const CppArgumentList&, CppVariant*);
387     void dumpPermissionClientCallbacks(const CppArgumentList&, CppVariant*);
388
389     // This function sets a flag that tells the test_shell to dump all calls
390     // to window.status().
391     // It takes no arguments, and ignores any that may be present.
392     void dumpWindowStatusChanges(const CppArgumentList&, CppVariant*);
393
394     // This function sets a flag that tells the test_shell to print a line of
395     // descriptive text for the progress finished callback. It takes no
396     // arguments, and ignores any that may be present.
397     void dumpProgressFinishedCallback(const CppArgumentList&, CppVariant*);
398
399     // This function sets a flag that tells the test_shell to print out a text
400     // representation of the back/forward list. It ignores all arguments.
401     void dumpBackForwardList(const CppArgumentList&, CppVariant*);
402
403     void setDeferMainResourceDataLoad(const CppArgumentList&, CppVariant*);
404     void dumpSelectionRect(const CppArgumentList&, CppVariant*);
405     void testRepaint(const CppArgumentList&, CppVariant*);
406     void repaintSweepHorizontally(const CppArgumentList&, CppVariant*);
407
408     // Causes layout to happen as if targetted to printed pages.
409     void setPrinting(const CppArgumentList&, CppVariant*);
410
411     void setShouldStayOnPageAfterHandlingBeforeUnload(const CppArgumentList&, CppVariant*);
412
413     // Causes WillSendRequest to clear certain headers.
414     void setWillSendRequestClearHeader(const CppArgumentList&, CppVariant*);
415
416     // Causes WillSendRequest to block redirects.
417     void setWillSendRequestReturnsNullOnRedirect(const CppArgumentList&, CppVariant*);
418
419     // Causes WillSendRequest to return an empty request.
420     void setWillSendRequestReturnsNull(const CppArgumentList&, CppVariant*);
421
422     // This function sets a flag that tells the test_shell to dump a descriptive
423     // line for each resource load's priority and any time that priority
424     // changes. It takes no arguments, and ignores any that may be present.
425     void dumpResourceRequestPriorities(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 cppVariantToBool(const CppVariant&);
527     int32_t cppVariantToInt32(const CppVariant&);
528     WebKit::WebString cppVariantToWebString(const CppVariant&);
529
530     void printErrorMessage(const std::string&);
531
532     // In the Mac code, this is called to trigger the end of a test after the
533     // page has finished loading. From here, we can generate the dump for the
534     // test.
535     void locationChangeDone();
536
537     bool m_testIsRunning;
538
539     // When reset is called, go through and close all but the main test shell
540     // window. By default, set to true but toggled to false using
541     // setCloseRemainingWindowsWhenComplete().
542     bool m_closeRemainingWindows;
543
544     // If true, don't dump output until notifyDone is called.
545     bool m_waitUntilDone;
546
547     // Causes navigation actions just printout the intended navigation instead
548     // of taking you to the page. This is used for cases like mailto, where you
549     // don't actually want to open the mail program.
550     bool m_policyDelegateEnabled;
551
552     // Toggles the behavior of the policy delegate. If true, then navigations
553     // will be allowed. Otherwise, they will be ignored (dropped).
554     bool m_policyDelegateIsPermissive;
555
556     // If true, the policy delegate will signal layout test completion.
557     bool m_policyDelegateShouldNotifyDone;
558
559     WorkQueue m_workQueue;
560
561     WebKit::WebURL m_userStyleSheetLocation;
562
563     // globalFlag is used by a number of layout tests in http/tests/security/dataURL.
564     CppVariant m_globalFlag;
565
566     // Bound variable to return the name of this platform (chromium).
567     CppVariant m_platformName;
568
569     // Bound variable tracking the directionality of the <title> tag.
570     CppVariant m_titleTextDirection;
571
572     // Bound variable counting the number of top URLs visited.
573     CppVariant m_webHistoryItemCount;
574
575     // Bound variable to set whether postMessages should be intercepted or not
576     CppVariant m_interceptPostMessage;
577
578     // If true, the test_shell will write a descriptive line for each editing
579     // command.
580     bool m_dumpEditingCallbacks;
581
582     // If true, the test_shell will generate pixel results in dumpAsText mode
583     bool m_generatePixelResults;
584
585     // If true, the test_shell will produce a plain text dump rather than a
586     // text representation of the renderer.
587     bool m_dumpAsText;
588
589     // If true and if dump_as_text_ is true, the test_shell will recursively
590     // dump all frames as plain text.
591     bool m_dumpChildFramesAsText;
592
593     // If true, the test_shell will print out the child frame scroll offsets as
594     // well.
595     bool m_dumpChildFrameScrollPositions;
596
597     // If true, the test_shell will output a base64 encoded WAVE file.
598     bool m_dumpAsAudio;
599
600     // If true, the test_shell will output a descriptive line for each frame
601     // load callback.
602     bool m_dumpFrameLoadCallbacks;
603
604     // If true, the test_shell will output a line of the user gesture status
605     // text for some frame load callbacks.
606     bool m_dumpUserGestureInFrameLoadCallbacks;
607
608     // If true, stops provisional frame loads during the
609     // DidStartProvisionalLoadForFrame callback.
610     bool m_stopProvisionalFrameLoads;
611
612     // If true, output a message when the page title is changed.
613     bool m_dumpTitleChanges;
614
615     // If true, output a descriptive line each time WebViewClient::createView
616     // is invoked.
617     bool m_dumpCreateView;
618
619     // If true, new windows can be opened via javascript or by plugins. By
620     // default, set to false and can be toggled to true using
621     // setCanOpenWindows().
622     bool m_canOpenWindows;
623
624     // If true, the test_shell will output a descriptive line for each resource
625     // load callback.
626     bool m_dumpResourceLoadCallbacks;
627
628     // If true, the test_shell will output a descriptive line for each resource
629     // request callback.
630     bool m_dumpResourceRequestCallbacks;
631
632     // If true, the test_shell will output the MIME type for each resource that 
633     // was loaded.
634     bool m_dumpResourceResponseMIMETypes;
635
636     // If true, the test_shell will dump all changes to window.status.
637     bool m_dumpWindowStatusChanges;
638
639     // If true, the test_shell will output a descriptive line for the progress
640     // finished callback.
641     bool m_dumpProgressFinishedCallback;
642
643     // If true, the test_shell will produce a dump of the back forward list as
644     // well.
645     bool m_dumpBackForwardList;
646
647     // If false, all new requests will not defer the main resource data load.
648     bool m_deferMainResourceDataLoad;
649
650     // If true, the test_shell will draw the bounds of the current selection rect
651     // taking possible transforms of the selection rect into account.
652     bool m_dumpSelectionRect;
653
654     // If true, pixel dump will be produced as a series of 1px-tall, view-wide
655     // individual paints over the height of the view.
656     bool m_testRepaint;
657
658     // If true and test_repaint_ is true as well, pixel dump will be produced as
659     // a series of 1px-wide, view-tall paints across the width of the view.
660     bool m_sweepHorizontally;
661
662     // If true, layout is to target printed pages.
663     bool m_isPrinting;
664
665     bool m_shouldStayOnPageAfterHandlingBeforeUnload;
666
667     bool m_shouldBlockRedirects;
668
669     bool m_willSendRequestShouldReturnNull;
670
671     bool m_smartInsertDeleteEnabled;
672
673     bool m_selectTrailingWhitespaceEnabled;
674
675     bool m_shouldDumpResourcePriorities;
676
677     std::set<std::string> m_httpHeadersToClear;
678
679     // WAV audio data is stored here.
680     WebKit::WebArrayBufferView m_audioData;
681
682     // Used for test timeouts.
683     WebTaskList m_taskList;
684
685     TestInterfaces* m_testInterfaces;
686     WebTestDelegate* m_delegate;
687     WebKit::WebView* m_webView;
688     WebTestProxyBase* m_proxy;
689
690     // This is non-0 IFF a load is in progress.
691     WebKit::WebFrame* m_topLoadingFrame;
692
693     // WebPermissionClient mock object.
694     std::auto_ptr<WebPermissions> m_webPermissions;
695
696 #if ENABLE_NOTIFICATIONS
697     std::auto_ptr<NotificationPresenter> m_notificationPresenter;
698 #endif
699
700     bool m_pointerLocked;
701     enum {
702         PointerLockWillSucceed,
703         PointerLockWillRespondAsync,
704         PointerLockWillFailSync,
705     } m_pointerLockPlannedResult;
706 };
707
708 }
709
710 #endif // TestRunner_h