e4931c9862e8451d77c921783bd622227a4f697d
[WebKit-https.git] / Tools / DumpRenderTree / chromium / LayoutTestController.h
1 /*
2  * Copyright (C) 2010 Google Inc. All rights reserved.
3  * Copyright (C) 2010 Pawel Hajdan (phajdan.jr@chromium.org)
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  *     * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *     * Redistributions in binary form must reproduce the above
12  * copyright notice, this list of conditions and the following disclaimer
13  * in the documentation and/or other materials provided with the
14  * distribution.
15  *     * Neither the name of Google Inc. nor the names of its
16  * contributors may be used to endorse or promote products derived from
17  * this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31
32 /*
33   LayoutTestController class:
34   Bound to a JavaScript window.layoutTestController object using the
35   CppBoundClass::bindToJavascript(), this allows layout tests that are run in
36   the test_shell (or, in principle, any web page loaded into a client app built
37   with this class) to control various aspects of how the tests are run and what
38   sort of output they produce.
39 */
40
41 #ifndef LayoutTestController_h
42 #define LayoutTestController_h
43
44 #include "CppBoundClass.h"
45 #include "Task.h"
46 #include "platform/WebArrayBufferView.h"
47 #include "platform/WebString.h"
48 #include "WebTextDirection.h"
49 #include "platform/WebURL.h"
50 #include <wtf/Deque.h>
51 #include <wtf/OwnPtr.h>
52
53 namespace WebKit {
54 class WebGeolocationClientMock;
55 }
56
57 namespace webkit_support {
58 class ScopedTempDirectory;
59 }
60
61 class TestShell;
62
63 class LayoutTestController : public CppBoundClass {
64 public:
65     // Builds the property and method lists needed to bind this class to a JS
66     // object.
67     LayoutTestController(TestShell*);
68
69     ~LayoutTestController();
70
71     // This function sets a flag that tells the test_shell to dump pages as
72     // plain text, rather than as a text representation of the renderer's state.
73     // It takes an optional argument, whether to dump pixels results or not.
74     void dumpAsText(const CppArgumentList&, CppVariant*);
75
76     // This function should set a flag that tells the test_shell to print a line
77     // of descriptive text for each database command. It should take no
78     // arguments, and ignore any that may be present. However, at the moment, we
79     // don't have any DB function that prints messages, so for now this function
80     // doesn't do anything.
81     void dumpDatabaseCallbacks(const CppArgumentList&, CppVariant*);
82
83     // This function sets a flag that tells the test_shell to print a line of
84     // descriptive text for each editing command. It takes no arguments, and
85     // ignores any that may be present.
86     void dumpEditingCallbacks(const CppArgumentList&, CppVariant*);
87
88     // This function sets a flag that tells the test_shell to print a line of
89     // descriptive text for each frame load callback. It takes no arguments, and
90     // ignores any that may be present.
91     void dumpFrameLoadCallbacks(const CppArgumentList&, CppVariant*);
92
93     // This function sets a flag that tells the test_shell to print a line of
94     // descriptive text for the progress finished callback. It takes no
95     // arguments, and ignores any that may be present.
96     void dumpProgressFinishedCallback(const CppArgumentList&, CppVariant*);
97
98     // This function sets a flag that tells the test_shell to print a line of
99     // user gesture status text for some frame load callbacks. It takes no
100     // arguments, and ignores any that may be present.
101     void dumpUserGestureInFrameLoadCallbacks(const CppArgumentList&, CppVariant*);
102
103     // This function sets a flag that tells the test_shell to print out a text
104     // representation of the back/forward list. It ignores all arguments.
105     void dumpBackForwardList(const CppArgumentList&, CppVariant*);
106
107     // This function sets a flag that tells the test_shell to print out the
108     // scroll offsets of the child frames. It ignores all.
109     void dumpChildFrameScrollPositions(const CppArgumentList&, CppVariant*);
110
111     // This function sets a flag that tells the test_shell to recursively
112     // dump all frames as plain text if the dumpAsText flag is set.
113     // It takes no arguments, and ignores any that may be present.
114     void dumpChildFramesAsText(const CppArgumentList&, CppVariant*);
115     
116     // This function sets a flag that tells the test_shell to dump a descriptive
117     // line for each resource load callback. It takes no arguments, and ignores
118     // any that may be present.
119     void dumpResourceLoadCallbacks(const CppArgumentList&, CppVariant*);    
120     
121     // This function sets a flag that tells the test_shell to dump the MIME type
122     // for each resource that was loaded. It takes no arguments, and ignores any
123     // that may be present.
124     void dumpResourceResponseMIMETypes(const CppArgumentList&, CppVariant*);
125
126     // This function sets a flag that tells the test_shell to dump all calls
127     // to window.status().
128     // It takes no arguments, and ignores any that may be present.
129     void dumpWindowStatusChanges(const CppArgumentList&, CppVariant*);
130
131     // This function sets a flag that tells the test_shell to dump all calls to
132     // WebViewClient::createView().
133     // It takes no arguments, and ignores any that may be present.
134     void dumpCreateView(const CppArgumentList&, CppVariant*);
135
136     // When called with a boolean argument, this sets a flag that controls
137     // whether content-editable elements accept editing focus when an editing
138     // attempt is made. It ignores any additional arguments.
139     void setAcceptsEditing(const CppArgumentList&, CppVariant*);
140
141     // Functions for dealing with windows. By default we block all new windows.
142     void windowCount(const CppArgumentList&, CppVariant*);
143     void setCanOpenWindows(const CppArgumentList&, CppVariant*);
144     void setCloseRemainingWindowsWhenComplete(const CppArgumentList&, CppVariant*);
145
146     // By default, tests end when page load is complete. These methods are used
147     // to delay the completion of the test until notifyDone is called.
148     void waitUntilDone(const CppArgumentList&, CppVariant*);
149     void notifyDone(const CppArgumentList&, CppVariant*);
150
151     // Methods for adding actions to the work queue. Used in conjunction with
152     // waitUntilDone/notifyDone above.
153     void queueBackNavigation(const CppArgumentList&, CppVariant*);
154     void queueForwardNavigation(const CppArgumentList&, CppVariant*);
155     void queueReload(const CppArgumentList&, CppVariant*);
156     void queueLoadingScript(const CppArgumentList&, CppVariant*);
157     void queueNonLoadingScript(const CppArgumentList&, CppVariant*);
158     void queueLoad(const CppArgumentList&, CppVariant*);
159     void queueLoadHTMLString(const CppArgumentList&, CppVariant*);
160
161     // Although this is named "objC" to match the Mac version, it actually tests
162     // the identity of its two arguments in C++.
163     void objCIdentityIsEqual(const CppArgumentList&, CppVariant*);
164
165     // Changes the cookie policy from the default to allow all cookies.
166     void setAlwaysAcceptCookies(const CppArgumentList&, CppVariant*);
167
168     // Changes asynchronous spellchecking flag on the settings.
169     void setAsynchronousSpellCheckingEnabled(const CppArgumentList&, CppVariant*);
170
171     // Shows DevTools window.
172     void showWebInspector(const CppArgumentList&, CppVariant*);
173     void closeWebInspector(const CppArgumentList&, CppVariant*);
174
175     // Gives focus to the window.
176     void setWindowIsKey(const CppArgumentList&, CppVariant*);
177
178     // Method that controls whether pressing Tab key cycles through page elements
179     // or inserts a '\t' char in text area
180     void setTabKeyCyclesThroughElements(const CppArgumentList&, CppVariant*);
181
182     // Passes through to WebPreferences which allows the user to have a custom
183     // style sheet.
184     void setUserStyleSheetEnabled(const CppArgumentList&, CppVariant*);
185     void setUserStyleSheetLocation(const CppArgumentList&, CppVariant*);
186
187     // Passes this preference through to WebSettings.
188     void setAuthorAndUserStylesEnabled(const CppArgumentList&, CppVariant*);
189
190     // Puts Webkit in "dashboard compatibility mode", which is used in obscure
191     // Mac-only circumstances. It's not really necessary, and will most likely
192     // never be used by Chrome, but some layout tests depend on its presence.
193     void setUseDashboardCompatibilityMode(const CppArgumentList&, CppVariant*);
194
195     void setScrollbarPolicy(const CppArgumentList&, CppVariant*);
196
197     // Causes navigation actions just printout the intended navigation instead
198     // of taking you to the page. This is used for cases like mailto, where you
199     // don't actually want to open the mail program.
200     void setCustomPolicyDelegate(const CppArgumentList&, CppVariant*);
201
202     // Delays completion of the test until the policy delegate runs.
203     void waitForPolicyDelegate(const CppArgumentList&, CppVariant*);
204
205     // Causes WillSendRequest to clear certain headers.
206     void setWillSendRequestClearHeader(const CppArgumentList&, CppVariant*);
207
208     // Causes WillSendRequest to block redirects.
209     void setWillSendRequestReturnsNullOnRedirect(const CppArgumentList&, CppVariant*);
210
211     // Causes WillSendRequest to return an empty request.
212     void setWillSendRequestReturnsNull(const CppArgumentList&, CppVariant*);
213
214     // Converts a URL starting with file:///tmp/ to the local mapping.
215     void pathToLocalResource(const CppArgumentList&, CppVariant*);
216
217     // Sets a bool such that when a drag is started, we fill the drag clipboard
218     // with a fake file object.
219     void addFileToPasteboardOnDrag(const CppArgumentList&, CppVariant*);
220
221     // Executes an internal command (superset of document.execCommand() commands).
222     void execCommand(const CppArgumentList&, CppVariant*);
223
224     // Checks if an internal command is currently available.
225     void isCommandEnabled(const CppArgumentList&, CppVariant*);
226
227     // Set the WebPreference that controls webkit's popup blocking.
228     void setPopupBlockingEnabled(const CppArgumentList&, CppVariant*);
229
230     // If true, causes provisional frame loads to be stopped for the remainder of
231     // the test.
232     void setStopProvisionalFrameLoads(const CppArgumentList&, CppVariant*);
233
234     // Enable or disable smart insert/delete. This is enabled by default.
235     void setSmartInsertDeleteEnabled(const CppArgumentList&, CppVariant*);
236
237     // Enable or disable trailing whitespace selection on double click.
238     void setSelectTrailingWhitespaceEnabled(const CppArgumentList&, CppVariant*);
239
240     void pauseAnimationAtTimeOnElementWithId(const CppArgumentList&, CppVariant*);
241     void pauseTransitionAtTimeOnElementWithId(const CppArgumentList&, CppVariant*);
242     void elementDoesAutoCompleteForElementWithId(const CppArgumentList&, CppVariant*);
243     void enableAutoResizeMode(const CppArgumentList&, CppVariant*);
244     void disableAutoResizeMode(const CppArgumentList&, CppVariant*);
245     void numberOfActiveAnimations(const CppArgumentList&, CppVariant*);
246     void resumeAnimations(const CppArgumentList&, CppVariant*);
247     void disableImageLoading(const CppArgumentList&, CppVariant*);
248     void setIconDatabaseEnabled(const CppArgumentList&, CppVariant*);
249     void dumpSelectionRect(const CppArgumentList&, CppVariant*);
250
251 #if ENABLE(NOTIFICATIONS)
252     // Grants permission for desktop notifications to an origin
253     void grantDesktopNotificationPermission(const CppArgumentList&, CppVariant*);
254     // Simulates a click on a desktop notification.
255     void simulateDesktopNotificationClick(const CppArgumentList&, CppVariant*);
256 #endif
257
258     void setDomainRelaxationForbiddenForURLScheme(const CppArgumentList&, CppVariant*);
259     void setDeferMainResourceDataLoad(const CppArgumentList&, CppVariant*);
260     void setEditingBehavior(const CppArgumentList&, CppVariant*);
261
262     // Deals with Web Audio WAV file data.
263     void setAudioData(const CppArgumentList&, CppVariant*);
264     const WebKit::WebArrayBufferView& audioData() const { return m_audioData; } 
265
266     // The following are only stubs.
267     // FIXME: Implement any of these that are needed to pass the layout tests.
268     void dumpAsWebArchive(const CppArgumentList&, CppVariant*);
269     void dumpTitleChanges(const CppArgumentList&, CppVariant*);
270     void setMainFrameIsFirstResponder(const CppArgumentList&, CppVariant*);
271     void display(const CppArgumentList&, CppVariant*);
272     void displayInvalidatedRegion(const CppArgumentList&, CppVariant*);
273     void testRepaint(const CppArgumentList&, CppVariant*);
274     void repaintSweepHorizontally(const CppArgumentList&, CppVariant*);
275     void clearBackForwardList(const CppArgumentList&, CppVariant*);
276     void keepWebHistory(const CppArgumentList&, CppVariant*);
277     void storeWebScriptObject(const CppArgumentList&, CppVariant*);
278     void accessStoredWebScriptObject(const CppArgumentList&, CppVariant*);
279     void objCClassNameOf(const CppArgumentList&, CppVariant*);
280     void addDisallowedURL(const CppArgumentList&, CppVariant*);
281     void callShouldCloseOnWebView(const CppArgumentList&, CppVariant*);
282     void setCallCloseOnWebViews(const CppArgumentList&, CppVariant*);
283     void setPrivateBrowsingEnabled(const CppArgumentList&, CppVariant*);
284
285     void setJavaScriptCanAccessClipboard(const CppArgumentList&, CppVariant*);
286     void setXSSAuditorEnabled(const CppArgumentList&, CppVariant*);
287     void overridePreference(const CppArgumentList&, CppVariant*);
288     void setAllowUniversalAccessFromFileURLs(const CppArgumentList&, CppVariant*);
289     void setAllowDisplayOfInsecureContent(const CppArgumentList&, CppVariant*);
290     void setAllowFileAccessFromFileURLs(const CppArgumentList&, CppVariant*);
291     void setAllowRunningOfInsecureContent(const CppArgumentList&, CppVariant*);
292
293     void evaluateScriptInIsolatedWorldAndReturnValue(const CppArgumentList&, CppVariant*);
294     void evaluateScriptInIsolatedWorld(const CppArgumentList&, CppVariant*);
295     void setIsolatedWorldSecurityOrigin(const CppArgumentList&, CppVariant*);
296
297     // The fallback method is called when a nonexistent method is called on
298     // the layout test controller object.
299     // It is usefull to catch typos in the JavaScript code (a few layout tests
300     // do have typos in them) and it allows the script to continue running in
301     // that case (as the Mac does).
302     void fallbackMethod(const CppArgumentList&, CppVariant*);
303
304     // Allows layout tests to manage origins' whitelisting.
305     void addOriginAccessWhitelistEntry(const CppArgumentList&, CppVariant*);
306     void removeOriginAccessWhitelistEntry(const CppArgumentList&, CppVariant*);
307
308     // Clears all application caches.
309     void clearAllApplicationCaches(const CppArgumentList&, CppVariant*);
310     // Clears an application cache for an origin.
311     void clearApplicationCacheForOrigin(const CppArgumentList&, CppVariant*);
312     // Returns origins that have application caches.
313     void originsWithApplicationCache(const CppArgumentList&, CppVariant*);
314     // Sets the application cache quota for the localhost origin.
315     void setApplicationCacheOriginQuota(const CppArgumentList&, CppVariant*);
316     // Returns disk usage by all application caches for an origin.
317     void applicationCacheDiskUsageForOrigin(const CppArgumentList&, CppVariant*);
318
319     // Clears all databases.
320     void clearAllDatabases(const CppArgumentList&, CppVariant*);
321     // Sets the default quota for all origins
322     void setDatabaseQuota(const CppArgumentList&, CppVariant*);
323
324     // Calls setlocale(LC_ALL, ...) for a specified locale.
325     // Resets between tests.
326     void setPOSIXLocale(const CppArgumentList&, CppVariant*);
327
328     // Gets the value of the counter in the element specified by its ID.
329     void counterValueForElementById(const CppArgumentList&, CppVariant*);
330
331     // Causes layout to happen as if targetted to printed pages.
332     void setPrinting(const CppArgumentList&, CppVariant*);
333
334     // Gets the number of page where the specified element will be put.
335     void pageNumberForElementById(const CppArgumentList&, CppVariant*);
336
337     // Gets the page size and margins for a printed page.
338     void pageSizeAndMarginsInPixels(const CppArgumentList&, CppVariant*);
339
340     // Returns true if the current page box has custom page size style for
341     // printing.
342     void hasCustomPageSizeStyle(const CppArgumentList&, CppVariant*);
343
344     // Gets the page-related property for printed content
345     void pageProperty(const CppArgumentList&, CppVariant*);
346
347     // Gets the number of pages to be printed.
348     void numberOfPages(const CppArgumentList&, CppVariant*);
349
350     // Gets the number of geolocation permissions requests pending.
351     void numberOfPendingGeolocationPermissionRequests(const CppArgumentList&, CppVariant*);
352
353     // Allows layout tests to start JavaScript profiling.
354     void setJavaScriptProfilingEnabled(const CppArgumentList&, CppVariant*);
355
356     // Allows layout tests to exec scripts at WebInspector side.
357     void evaluateInWebInspector(const CppArgumentList&, CppVariant*);
358
359     // Forces the selection colors for testing under Linux.
360     void forceRedSelectionColors(const CppArgumentList&, CppVariant*);
361
362     // Adds a user script or user style sheet to be injected into new documents.
363     void addUserScript(const CppArgumentList&, CppVariant*);
364     void addUserStyleSheet(const CppArgumentList&, CppVariant*);
365
366     // DeviceOrientation related functions
367     void setMockDeviceOrientation(const CppArgumentList&, CppVariant*);
368
369     // Geolocation related functions.
370     void setGeolocationPermission(const CppArgumentList&, CppVariant*);
371     void setMockGeolocationPosition(const CppArgumentList&, CppVariant*);
372     void setMockGeolocationError(const CppArgumentList&, CppVariant*);
373
374     // Empty stub method to keep parity with object model exposed by global LayoutTestController.
375     void abortModal(const CppArgumentList&, CppVariant*);
376
377     // Speech input related functions.
378 #if ENABLE(INPUT_SPEECH)
379     void addMockSpeechInputResult(const CppArgumentList&, CppVariant*);
380     void setMockSpeechInputDumpRect(const CppArgumentList&, CppVariant*);
381 #endif
382     void startSpeechInput(const CppArgumentList&, CppVariant*);
383
384     void layerTreeAsText(const CppArgumentList& args, CppVariant* result);
385
386     void loseCompositorContext(const CppArgumentList& args, CppVariant* result);
387
388     void markerTextForListItem(const CppArgumentList&, CppVariant*);
389     void findString(const CppArgumentList&, CppVariant*);
390
391     void setMinimumTimerInterval(const CppArgumentList&, CppVariant*);
392
393     // Expects the first argument to be an input element and the second argument to be a boolean.
394     // Forwards the setAutofilled() call to the element.
395     void setAutofilled(const CppArgumentList&, CppVariant*);
396
397     // Expects the first argument to be an input element and the second argument to be a string value.
398     // Forwards the setValueForUser() call to the element.
399     void setValueForUser(const CppArgumentList&, CppVariant*);
400
401     // LocalStorage origin-related
402     void deleteAllLocalStorage(const CppArgumentList&, CppVariant*);
403     void originsWithLocalStorage(const CppArgumentList&, CppVariant*);
404     void deleteLocalStorageForOrigin(const CppArgumentList&, CppVariant*);
405     void localStorageDiskUsageForOrigin(const CppArgumentList&, CppVariant*);
406     void observeStorageTrackerNotifications(const CppArgumentList&, CppVariant*);
407     void syncLocalStorage(const CppArgumentList&, CppVariant*);
408
409     // WebPermissionClient related.
410     void setImagesAllowed(const CppArgumentList&, CppVariant*);
411     void setScriptsAllowed(const CppArgumentList&, CppVariant*);
412     void setStorageAllowed(const CppArgumentList&, CppVariant*);
413     void setPluginsAllowed(const CppArgumentList&, CppVariant*);
414     void dumpPermissionClientCallbacks(const CppArgumentList&, CppVariant*);
415
416     // Enable or disable plugins.
417     void setPluginsEnabled(const CppArgumentList&, CppVariant*);
418
419     // Switch the visibility of the page.
420     void setPageVisibility(const CppArgumentList&, CppVariant*);
421     void resetPageVisibility(const CppArgumentList&, CppVariant*);
422
423     // Changes the direction of the focused element.
424     void setTextDirection(const CppArgumentList&, CppVariant*);
425
426     void setShouldStayOnPageAfterHandlingBeforeUnload(const CppArgumentList&, CppVariant*);
427
428     void enableFixedLayoutMode(const CppArgumentList&, CppVariant*);
429     void setFixedLayoutSize(const CppArgumentList&, CppVariant*);
430
431     void selectionAsMarkup(const CppArgumentList&, CppVariant*);
432
433 #if ENABLE(POINTER_LOCK)
434     void didLosePointerLock(const CppArgumentList&, CppVariant*);
435     void setPointerLockWillFailSynchronously(const CppArgumentList&, CppVariant*);
436     void setPointerLockWillFailAsynchronously(const CppArgumentList&, CppVariant*);
437 #endif
438
439     void workerThreadCount(CppVariant*);
440
441     // Expects one string argument for sending successful result, zero
442     // for sending a failure result.
443     void sendWebIntentResponse(const CppArgumentList&, CppVariant*);
444
445 public:
446     // The following methods are not exposed to JavaScript.
447     void setWorkQueueFrozen(bool frozen) { m_workQueue.setFrozen(frozen); }
448
449     bool shouldDumpAsAudio() const { return m_dumpAsAudio; } 
450     void setShouldDumpAsAudio(bool dumpAsAudio) { m_dumpAsAudio = dumpAsAudio; } 
451     bool shouldDumpAsText() { return m_dumpAsText; }
452     void setShouldDumpAsText(bool value) { m_dumpAsText = value; }
453     bool shouldDumpEditingCallbacks() { return m_dumpEditingCallbacks; }
454     bool shouldDumpFrameLoadCallbacks() { return m_dumpFrameLoadCallbacks; }
455     void setShouldDumpFrameLoadCallbacks(bool value) { m_dumpFrameLoadCallbacks = value; }
456     bool shouldDumpProgressFinishedCallback() { return m_dumpProgressFinishedCallback; }
457     void setShouldDumpProgressFinishedCallback(bool value) { m_dumpProgressFinishedCallback = value; }
458     bool shouldDumpUserGestureInFrameLoadCallbacks() { return m_dumpUserGestureInFrameLoadCallbacks; }
459     void setShouldDumpUserGestureInFrameLoadCallbacks(bool value) { m_dumpUserGestureInFrameLoadCallbacks = value; }
460     bool shouldDumpResourceLoadCallbacks() {return m_dumpResourceLoadCallbacks; }
461     void setShouldDumpResourceResponseMIMETypes(bool value) { m_dumpResourceResponseMIMETypes = value; }
462     bool shouldDumpResourceResponseMIMETypes() {return m_dumpResourceResponseMIMETypes; }
463     bool shouldDumpStatusCallbacks() { return m_dumpWindowStatusChanges; }
464     bool shouldDumpSelectionRect() { return m_dumpSelectionRect; }
465     bool shouldDumpBackForwardList() { return m_dumpBackForwardList; }
466     bool shouldDumpTitleChanges() { return m_dumpTitleChanges; }
467     bool shouldDumpPermissionClientCallbacks() { return m_dumpPermissionClientCallbacks; }
468     bool shouldDumpChildFrameScrollPositions() { return m_dumpChildFrameScrollPositions; }
469     bool shouldDumpChildFramesAsText() { return m_dumpChildFramesAsText; }
470     bool shouldGeneratePixelResults() { return m_generatePixelResults; }
471     void setShouldGeneratePixelResults(bool value) { m_generatePixelResults = value; }
472     bool shouldDumpCreateView() { return m_dumpCreateView; }
473     bool acceptsEditing() { return m_acceptsEditing; }
474     bool canOpenWindows() { return m_canOpenWindows; }
475     bool shouldAddFileToPasteboard() { return m_shouldAddFileToPasteboard; }
476     bool stopProvisionalFrameLoads() { return m_stopProvisionalFrameLoads; }
477     bool deferMainResourceDataLoad() { return m_deferMainResourceDataLoad; }
478     void setShowDebugLayerTree(bool value) { m_showDebugLayerTree = value; }
479     void setTitleTextDirection(WebKit::WebTextDirection dir)
480     {
481         m_titleTextDirection.set(dir == WebKit::WebTextDirectionLeftToRight ? "ltr" : "rtl");
482     }
483
484     bool shouldInterceptPostMessage()
485     {
486         return m_interceptPostMessage.isBool() && m_interceptPostMessage.toBoolean();
487     }
488
489     void setIsPrinting(bool value) { m_isPrinting = value; }
490     bool isPrinting() { return m_isPrinting; }
491
492     bool testRepaint() const { return m_testRepaint; }
493     bool sweepHorizontally() const { return m_sweepHorizontally; }
494
495     void setHasCustomFullScreenBehavior(const CppArgumentList&, CppVariant*);
496     bool hasCustomFullScreenBehavior() const { return m_hasCustomFullScreenBehavior; }
497
498     // Called by the webview delegate when the toplevel frame load is done.
499     void locationChangeDone();
500
501     // Called by the webview delegate when the policy delegate runs if the
502     // waitForPolicyDelegate was called.
503     void policyDelegateDone();
504
505     // Reinitializes all static values. The reset() method should be called
506     // before the start of each test (currently from TestShell::runFileTest).
507     void reset();
508
509     // A single item in the work queue.
510     class WorkItem {
511     public:
512         virtual ~WorkItem() { }
513
514         // Returns true if this started a load.
515         virtual bool run(TestShell*) = 0;
516     };
517
518     TaskList* taskList() { return &m_taskList; }
519
520     bool shouldStayOnPageAfterHandlingBeforeUnload() const { return m_shouldStayOnPageAfterHandlingBeforeUnload; }
521
522 private:
523     friend class WorkItem;
524     friend class WorkQueue;
525
526     // Helper class for managing events queued by methods like queueLoad or
527     // queueScript.
528     class WorkQueue {
529     public:
530         WorkQueue(LayoutTestController* controller) : m_frozen(false), m_controller(controller) { }
531         virtual ~WorkQueue();
532         void processWorkSoon();
533
534         // Reset the state of the class between tests.
535         void reset();
536
537         void addWork(WorkItem*);
538
539         void setFrozen(bool frozen) { m_frozen = frozen; }
540         bool isEmpty() { return m_queue.isEmpty(); }
541         TaskList* taskList() { return &m_taskList; }
542
543     private:
544         void processWork();
545         class WorkQueueTask: public MethodTask<WorkQueue> {
546         public:
547             WorkQueueTask(WorkQueue* object): MethodTask<WorkQueue>(object) { }
548             virtual void runIfValid() { m_object->processWork(); }
549         };
550
551         TaskList m_taskList;
552         Deque<WorkItem*> m_queue;
553         bool m_frozen;
554         LayoutTestController* m_controller;
555     };
556
557     // Support for overridePreference.
558     bool cppVariantToBool(const CppVariant&);
559     int32_t cppVariantToInt32(const CppVariant&);
560     WebKit::WebString cppVariantToWebString(const CppVariant&);
561     Vector<WebKit::WebString> cppVariantToWebStringArray(const CppVariant&);
562
563     void logErrorToConsole(const std::string&);
564     void completeNotifyDone(bool isTimeout);
565     class NotifyDoneTimedOutTask: public MethodTask<LayoutTestController> {
566     public:
567         NotifyDoneTimedOutTask(LayoutTestController* object): MethodTask<LayoutTestController>(object) { }
568         virtual void runIfValid() { m_object->completeNotifyDone(true); }
569     };
570
571
572     bool pauseAnimationAtTimeOnElementWithId(const WebKit::WebString& animationName, double time, const WebKit::WebString& elementId);
573     bool pauseTransitionAtTimeOnElementWithId(const WebKit::WebString& propertyName, double time, const WebKit::WebString& elementId);
574     bool elementDoesAutoCompleteForElementWithId(const WebKit::WebString&);
575     int numberOfActiveAnimations();
576     void resumeAnimations();
577
578     // Used for test timeouts.
579     TaskList m_taskList;
580
581     // Non-owning pointer. The LayoutTestController is owned by the host.
582     TestShell* m_shell;
583
584     // If true, the test_shell will produce a plain text dump rather than a
585     // text representation of the renderer.
586     bool m_dumpAsText;
587
588     // If true, the test_shell will output a base64 encoded WAVE file.
589     bool m_dumpAsAudio;
590
591     // If true, the test_shell will write a descriptive line for each editing
592     // command.
593     bool m_dumpEditingCallbacks;
594
595     // If true, the test_shell will draw the bounds of the current selection rect
596     // taking possible transforms of the selection rect into account.
597     bool m_dumpSelectionRect;
598
599     // If true, the test_shell will output a descriptive line for each frame
600     // load callback.
601     bool m_dumpFrameLoadCallbacks;
602
603     // If true, the test_shell will output a descriptive line for the progress
604     // finished callback.
605     bool m_dumpProgressFinishedCallback;
606
607     // If true, the test_shell will output a line of the user gesture status
608     // text for some frame load callbacks.
609     bool m_dumpUserGestureInFrameLoadCallbacks;
610
611     // If true, the test_shell will output a descriptive line for each resource
612     // load callback.
613     bool m_dumpResourceLoadCallbacks;
614     
615     // If true, the test_shell will output the MIME type for each resource that 
616     // was loaded.
617     bool m_dumpResourceResponseMIMETypes;
618
619     // If true, the test_shell will produce a dump of the back forward list as
620     // well.
621     bool m_dumpBackForwardList;
622
623     // If true, the test_shell will print out the child frame scroll offsets as
624     // well.
625     bool m_dumpChildFrameScrollPositions;
626
627     // If true and if dump_as_text_ is true, the test_shell will recursively
628     // dump all frames as plain text.
629     bool m_dumpChildFramesAsText;
630
631     // If true, the test_shell will dump all changes to window.status.
632     bool m_dumpWindowStatusChanges;
633
634     // If true, output a message when the page title is changed.
635     bool m_dumpTitleChanges;
636
637     // If true, output a descriptive line each time a permission client
638     // callback is invoked. Currently only implemented for allowImage.
639     bool m_dumpPermissionClientCallbacks;
640
641     // If true, the test_shell will generate pixel results in dumpAsText mode
642     bool m_generatePixelResults;
643
644     // If true, output a descriptive line each time WebViewClient::createView
645     // is invoked.
646     bool m_dumpCreateView;
647
648     // If true, the element will be treated as editable. This value is returned
649     // from various editing callbacks that are called just before edit operations
650     // are allowed.
651     bool m_acceptsEditing;
652
653     // If true, new windows can be opened via javascript or by plugins. By
654     // default, set to false and can be toggled to true using
655     // setCanOpenWindows().
656     bool m_canOpenWindows;
657
658     // When reset is called, go through and close all but the main test shell
659     // window. By default, set to true but toggled to false using
660     // setCloseRemainingWindowsWhenComplete().
661     bool m_closeRemainingWindows;
662
663     // If true, pixel dump will be produced as a series of 1px-tall, view-wide
664     // individual paints over the height of the view.
665     bool m_testRepaint;
666     // If true and test_repaint_ is true as well, pixel dump will be produced as
667     // a series of 1px-wide, view-tall paints across the width of the view.
668     bool m_sweepHorizontally;
669
670     // If true and a drag starts, adds a file to the drag&drop clipboard.
671     bool m_shouldAddFileToPasteboard;
672
673     // If true, stops provisional frame loads during the
674     // DidStartProvisionalLoadForFrame callback.
675     bool m_stopProvisionalFrameLoads;
676
677     // If true, don't dump output until notifyDone is called.
678     bool m_waitUntilDone;
679
680     // If false, all new requests will not defer the main resource data load.
681     bool m_deferMainResourceDataLoad;
682
683     // If true, we will show extended information in the graphics layer tree.
684     bool m_showDebugLayerTree;
685
686     // If true, layout is to target printed pages.
687     bool m_isPrinting;
688
689     WorkQueue m_workQueue;
690
691     CppVariant m_globalFlag;
692
693     // Bound variable counting the number of top URLs visited.
694     CppVariant m_webHistoryItemCount;
695
696     // Bound variable tracking the directionality of the <title> tag.
697     CppVariant m_titleTextDirection;
698
699     // Bound variable to return the name of this platform (chromium).
700     CppVariant m_platformName;
701
702     // Bound variable to set whether postMessages should be intercepted or not
703     CppVariant m_interceptPostMessage;
704
705     WebKit::WebURL m_userStyleSheetLocation;
706
707     // WAV audio data is stored here.
708     WebKit::WebArrayBufferView m_audioData;
709
710     bool m_shouldStayOnPageAfterHandlingBeforeUnload;
711
712     // If true, calls to WebViewHost::enter/exitFullScreenNow will not result in 
713     // calls to Document::will/did/Enter/ExitFullScreen.
714     bool m_hasCustomFullScreenBehavior;
715 };
716
717 #endif // LayoutTestController_h