[Qt][NRWT] Pass --timeout to DRT/WTR if a test is marked as SLOW.
[WebKit-https.git] / Tools / WebKitTestRunner / InjectedBundle / TestRunner.h
1 /*
2  * Copyright (C) 2010, 2011, 2012 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef TestRunner_h
27 #define TestRunner_h
28
29 #include "JSWrappable.h"
30 #include <JavaScriptCore/JSRetainPtr.h>
31 #include <WebKit2/WKBundleScriptWorld.h>
32 #include <WebKit2/WKRetainPtr.h>
33 #include <string>
34 #include <wtf/PassRefPtr.h>
35
36 #if PLATFORM(MAC)
37 #include <wtf/RetainPtr.h>
38 #include <CoreFoundation/CFRunLoop.h>
39 typedef RetainPtr<CFRunLoopTimerRef> PlatformTimerRef;
40 #elif PLATFORM(WIN)
41 typedef UINT_PTR PlatformTimerRef;
42 #elif PLATFORM(QT)
43 #include <QTimer>
44 typedef QTimer PlatformTimerRef;
45 #elif PLATFORM(GTK)
46 typedef unsigned int PlatformTimerRef;
47 #elif PLATFORM(EFL)
48 #if USE(EO)
49 typedef struct _Eo Ecore_Timer;
50 #else
51 typedef struct _Ecore_Timer Ecore_Timer;
52 #endif
53 typedef Ecore_Timer* PlatformTimerRef;
54 #endif
55
56 namespace WTR {
57
58 class TestRunner : public JSWrappable {
59 public:
60     static PassRefPtr<TestRunner> create();
61     virtual ~TestRunner();
62
63     // JSWrappable
64     virtual JSClassRef wrapperClass();
65
66     void makeWindowObject(JSContextRef, JSObjectRef windowObject, JSValueRef* exception);
67
68     // The basics.
69     void dumpAsText(bool dumpPixels);
70     void waitForPolicyDelegate();
71     void dumpChildFramesAsText() { m_whatToDump = AllFramesText; }
72     void waitUntilDone();
73     void notifyDone();
74     double preciseTime();
75
76     // Other dumping.
77     void dumpBackForwardList() { m_shouldDumpBackForwardListsForAllWindows = true; }
78     void dumpChildFrameScrollPositions() { m_shouldDumpAllFrameScrollPositions = true; }
79     void dumpEditingCallbacks() { m_dumpEditingCallbacks = true; }
80     void dumpSelectionRect() { m_dumpSelectionRect = true; }
81     void dumpStatusCallbacks() { m_dumpStatusCallbacks = true; }
82     void dumpTitleChanges() { m_dumpTitleChanges = true; }
83     void dumpFullScreenCallbacks() { m_dumpFullScreenCallbacks = true; }
84     void dumpFrameLoadCallbacks() { setShouldDumpFrameLoadCallbacks(true); }
85     void dumpProgressFinishedCallback() { setShouldDumpProgressFinishedCallback(true); }
86     void dumpResourceLoadCallbacks() { m_dumpResourceLoadCallbacks = true; }
87     void dumpResourceResponseMIMETypes() { m_dumpResourceResponseMIMETypes = true; }
88     void dumpWillCacheResponse() { m_dumpWillCacheResponse = true; }
89     void dumpApplicationCacheDelegateCallbacks() { m_dumpApplicationCacheDelegateCallbacks = true; }
90     void dumpDatabaseCallbacks() { m_dumpDatabaseCallbacks = true; }
91
92     void setShouldDumpFrameLoadCallbacks(bool value) { m_dumpFrameLoadCallbacks = value; }
93     void setShouldDumpProgressFinishedCallback(bool value) { m_dumpProgressFinishedCallback = value; }
94
95     // Special options.
96     void keepWebHistory();
97     void setAcceptsEditing(bool value) { m_shouldAllowEditing = value; }
98     void setCanOpenWindows(bool);
99     void setCloseRemainingWindowsWhenComplete(bool value) { m_shouldCloseExtraWindows = value; }
100     void setXSSAuditorEnabled(bool);
101     void setAllowUniversalAccessFromFileURLs(bool);
102     void setAllowFileAccessFromFileURLs(bool);
103     void setFrameFlatteningEnabled(bool);
104     void setPluginsEnabled(bool);
105     void setJavaScriptCanAccessClipboard(bool);
106     void setPrivateBrowsingEnabled(bool);
107     void setPopupBlockingEnabled(bool);
108     void setAuthorAndUserStylesEnabled(bool);
109     void setCustomPolicyDelegate(bool enabled, bool permissive = false);
110     void addOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef destinationProtocol, JSStringRef destinationHost, bool allowDestinationSubdomains);
111     void removeOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef destinationProtocol, JSStringRef destinationHost, bool allowDestinationSubdomains);
112     void setUserStyleSheetEnabled(bool);
113     void setUserStyleSheetLocation(JSStringRef);
114     void setMinimumTimerInterval(double seconds); // Interval specified in seconds.
115     void setSpatialNavigationEnabled(bool);
116     void setTabKeyCyclesThroughElements(bool);
117     void setSerializeHTTPLoads();
118     void dispatchPendingLoadRequests();
119     void setCacheModel(int);
120
121     // Special DOM functions.
122     JSValueRef computedStyleIncludingVisitedInfo(JSValueRef element);
123     void clearBackForwardList();
124     void execCommand(JSStringRef name, JSStringRef argument);
125     bool isCommandEnabled(JSStringRef name);
126     JSRetainPtr<JSStringRef> markerTextForListItem(JSValueRef element);
127     unsigned windowCount();
128
129     // Repaint testing.
130     void testRepaint() { m_testRepaint = true; }
131     void repaintSweepHorizontally() { m_testRepaintSweepHorizontally = true; }
132     void display();
133
134     // Animation testing.
135     unsigned numberOfActiveAnimations() const;
136     bool pauseAnimationAtTimeOnElementWithId(JSStringRef animationName, double time, JSStringRef elementId);
137     bool pauseTransitionAtTimeOnElementWithId(JSStringRef propertyName, double time, JSStringRef elementId);
138     void suspendAnimations();
139     
140     // UserContent testing.
141     void addUserScript(JSStringRef source, bool runAtStart, bool allFrames);
142     void addUserStyleSheet(JSStringRef source, bool allFrames);
143
144     // Text search testing.
145     bool findString(JSStringRef, JSValueRef optionsArray);
146
147     // Local storage
148     void clearAllDatabases();
149     void setDatabaseQuota(uint64_t);
150     JSRetainPtr<JSStringRef> pathToLocalResource(JSStringRef);
151
152     // Application Cache
153     void clearAllApplicationCaches();
154     void clearApplicationCacheForOrigin(JSStringRef origin);
155     void setAppCacheMaximumSize(uint64_t);
156     long long applicationCacheDiskUsageForOrigin(JSStringRef origin);
157     void setApplicationCacheOriginQuota(unsigned long long);
158     void disallowIncreaseForApplicationCacheQuota();
159     bool shouldDisallowIncreaseForApplicationCacheQuota() { return m_disallowIncreaseForApplicationCacheQuota; }
160     JSValueRef originsWithApplicationCache();
161
162     // Printing
163     bool isPageBoxVisible(int pageIndex);
164
165     // Authentication
166     void setHandlesAuthenticationChallenges(bool);
167     void setAuthenticationUsername(JSStringRef);
168     void setAuthenticationPassword(JSStringRef);
169
170     void setValueForUser(JSContextRef, JSValueRef element, JSStringRef value);
171
172     // Audio testing.
173     void setAudioData(JSContextRef, JSValueRef data);
174
175     enum WhatToDump { RenderTree, MainFrameText, AllFramesText, Audio };
176     WhatToDump whatToDump() const { return m_whatToDump; }
177
178     bool shouldDumpAllFrameScrollPositions() const { return m_shouldDumpAllFrameScrollPositions; }
179     bool shouldDumpBackForwardListsForAllWindows() const { return m_shouldDumpBackForwardListsForAllWindows; }
180     bool shouldDumpEditingCallbacks() const { return m_dumpEditingCallbacks; }
181     bool shouldDumpMainFrameScrollPosition() const { return m_whatToDump == RenderTree; }
182     bool shouldDumpStatusCallbacks() const { return m_dumpStatusCallbacks; }
183     bool shouldDumpTitleChanges() const { return m_dumpTitleChanges; }
184     bool shouldDumpPixels() const { return m_dumpPixels; }
185     bool shouldDumpFullScreenCallbacks() const { return m_dumpFullScreenCallbacks; }
186     bool shouldDumpFrameLoadCallbacks() const { return m_dumpFrameLoadCallbacks; }
187     bool shouldDumpProgressFinishedCallback() const { return m_dumpProgressFinishedCallback; }
188     bool shouldDumpResourceLoadCallbacks() const { return m_dumpResourceLoadCallbacks; }
189     bool shouldDumpResourceResponseMIMETypes() const { return m_dumpResourceResponseMIMETypes; }
190     bool shouldDumpWillCacheResponse() const { return m_dumpWillCacheResponse; }
191     bool shouldDumpApplicationCacheDelegateCallbacks() const { return m_dumpApplicationCacheDelegateCallbacks; }
192     bool shouldDumpDatabaseCallbacks() const { return m_dumpDatabaseCallbacks; }
193     bool shouldDumpSelectionRect() const { return m_dumpSelectionRect; }
194
195     bool isPolicyDelegateEnabled() const { return m_policyDelegateEnabled; }
196     bool isPolicyDelegatePermissive() const { return m_policyDelegatePermissive; }
197
198     bool waitToDump() const { return m_waitToDump; }
199     void waitToDumpWatchdogTimerFired();
200     void invalidateWaitToDumpWatchdogTimer();
201
202     bool shouldAllowEditing() const { return m_shouldAllowEditing; }
203
204     bool shouldCloseExtraWindowsAfterRunningTest() const { return m_shouldCloseExtraWindows; }
205
206     void evaluateScriptInIsolatedWorld(JSContextRef, unsigned worldID, JSStringRef script);
207     static unsigned worldIDForWorld(WKBundleScriptWorldRef);
208
209     void showWebInspector();
210     void closeWebInspector();
211     void evaluateInWebInspector(long callId, JSStringRef script);
212
213     void setPOSIXLocale(JSStringRef);
214
215     bool willSendRequestReturnsNull() const { return m_willSendRequestReturnsNull; }
216     void setWillSendRequestReturnsNull(bool f) { m_willSendRequestReturnsNull = f; }
217     bool willSendRequestReturnsNullOnRedirect() const { return m_willSendRequestReturnsNullOnRedirect; }
218     void setWillSendRequestReturnsNullOnRedirect(bool f) { m_willSendRequestReturnsNullOnRedirect = f; }
219
220     void setTextDirection(JSStringRef);
221
222     void setShouldStayOnPageAfterHandlingBeforeUnload(bool);
223
224     void setDefersLoading(bool);
225
226     void setStopProvisionalFrameLoads() { m_shouldStopProvisionalFrameLoads = true; }
227     bool shouldStopProvisionalFrameLoads() const { return m_shouldStopProvisionalFrameLoads; }
228     
229     bool globalFlag() const { return m_globalFlag; }
230     void setGlobalFlag(bool value) { m_globalFlag = value; }
231
232     unsigned workerThreadCount();
233     
234     void addChromeInputField(JSValueRef);
235     void removeChromeInputField(JSValueRef);
236     void focusWebView(JSValueRef);
237     void setBackingScaleFactor(double, JSValueRef);
238
239     void setWindowIsKey(bool);
240
241     void callAddChromeInputFieldCallback();
242     void callRemoveChromeInputFieldCallback();
243     void callFocusWebViewCallback();
244     void callSetBackingScaleFactorCallback();
245
246     void overridePreference(JSStringRef preference, JSStringRef value);
247
248     // Web intents testing.
249     void sendWebIntentResponse(JSStringRef reply);
250     void deliverWebIntent(JSStringRef action, JSStringRef type, JSStringRef data);
251
252     // Cookies testing
253     void setAlwaysAcceptCookies(bool);
254
255     // Custom full screen behavior.
256     void setHasCustomFullScreenBehavior(bool value) { m_customFullScreenBehavior = value; }
257     bool hasCustomFullScreenBehavior() const { return m_customFullScreenBehavior; }
258     void setViewModeMediaFeature(JSStringRef);
259
260     // Web notifications.
261     void grantWebNotificationPermission(JSStringRef origin);
262     void denyWebNotificationPermission(JSStringRef origin);
263     void removeAllWebNotificationPermissions();
264     void simulateWebNotificationClick(JSValueRef notification);
265
266     // Geolocation.
267     void setGeolocationPermission(bool);
268     void setMockGeolocationPosition(double latitude, double longitude, double accuracy, JSValueRef altitude, JSValueRef altitudeAccuracy, JSValueRef heading, JSValueRef speed);
269     void setMockGeolocationPositionUnavailableError(JSStringRef message);
270
271     JSRetainPtr<JSStringRef> platformName();
272
273     void setPageVisibility(JSStringRef state);
274     void resetPageVisibility();
275
276     bool callShouldCloseOnWebView();
277
278     void setCustomTimeout(int duration);
279
280     // Work queue.
281     void queueBackNavigation(unsigned howFarBackward);
282     void queueForwardNavigation(unsigned howFarForward);
283     void queueLoad(JSStringRef url, JSStringRef target);
284     void queueLoadHTMLString(JSStringRef content, JSStringRef baseURL, JSStringRef unreachableURL);
285     void queueReload();
286     void queueLoadingScript(JSStringRef script);
287     void queueNonLoadingScript(JSStringRef script);
288
289 private:
290     static const double waitToDumpWatchdogTimerInterval;
291
292     TestRunner();
293
294     void platformInitialize();
295     void initializeWaitToDumpWatchdogTimerIfNeeded();
296
297     WhatToDump m_whatToDump;
298     bool m_shouldDumpAllFrameScrollPositions;
299     bool m_shouldDumpBackForwardListsForAllWindows;
300
301     bool m_shouldAllowEditing;
302     bool m_shouldCloseExtraWindows;
303
304     bool m_dumpEditingCallbacks;
305     bool m_dumpStatusCallbacks;
306     bool m_dumpTitleChanges;
307     bool m_dumpPixels;
308     bool m_dumpSelectionRect;
309     bool m_dumpFullScreenCallbacks;
310     bool m_dumpFrameLoadCallbacks;
311     bool m_dumpProgressFinishedCallback;
312     bool m_dumpResourceLoadCallbacks;
313     bool m_dumpResourceResponseMIMETypes;
314     bool m_dumpWillCacheResponse;
315     bool m_dumpApplicationCacheDelegateCallbacks;
316     bool m_dumpDatabaseCallbacks;
317     bool m_disallowIncreaseForApplicationCacheQuota;
318     bool m_waitToDump; // True if waitUntilDone() has been called, but notifyDone() has not yet been called.
319     bool m_testRepaint;
320     bool m_testRepaintSweepHorizontally;
321
322     bool m_willSendRequestReturnsNull;
323     bool m_willSendRequestReturnsNullOnRedirect;
324     bool m_shouldStopProvisionalFrameLoads;
325
326     bool m_policyDelegateEnabled;
327     bool m_policyDelegatePermissive;
328     
329     bool m_globalFlag;
330     bool m_customFullScreenBehavior;
331
332     int m_timeout;
333
334     bool m_userStyleSheetEnabled;
335     WKRetainPtr<WKStringRef> m_userStyleSheetLocation;
336
337     PlatformTimerRef m_waitToDumpWatchdogTimer;
338 };
339
340 } // namespace WTR
341
342 #endif // TestRunner_h