[GTK] Remove the remaining uses of GMainLoopSource
[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 <WebKit/WKBundleScriptWorld.h>
32 #include <WebKit/WKRetainPtr.h>
33 #include <string>
34 #include <wtf/PassRefPtr.h>
35
36 #if PLATFORM(COCOA)
37 #include <wtf/RetainPtr.h>
38 #include <CoreFoundation/CFRunLoop.h>
39 typedef RetainPtr<CFRunLoopTimerRef> PlatformTimerRef;
40 #elif PLATFORM(GTK)
41 #include <wtf/RunLoop.h>
42 namespace WTR {
43 class TestRunner;
44 typedef RunLoop::Timer<TestRunner> PlatformTimerRef;
45 }
46 #elif PLATFORM(EFL)
47 typedef Ecore_Timer* PlatformTimerRef;
48 #endif
49
50 namespace WTR {
51
52 class TestRunner : public JSWrappable {
53 public:
54     static PassRefPtr<TestRunner> create();
55     virtual ~TestRunner();
56
57     // JSWrappable
58     virtual JSClassRef wrapperClass();
59
60     void makeWindowObject(JSContextRef, JSObjectRef windowObject, JSValueRef* exception);
61
62     // The basics.
63     WKURLRef testURL() const { return m_testURL.get(); }
64     void setTestURL(WKURLRef url) { m_testURL = url; }
65     void dumpAsText(bool dumpPixels);
66     void waitForPolicyDelegate();
67     void dumpChildFramesAsText() { m_whatToDump = AllFramesText; }
68     void waitUntilDone();
69     void notifyDone();
70     double preciseTime();
71
72     // Other dumping.
73     void dumpBackForwardList() { m_shouldDumpBackForwardListsForAllWindows = true; }
74     void dumpChildFrameScrollPositions() { m_shouldDumpAllFrameScrollPositions = true; }
75     void dumpEditingCallbacks() { m_dumpEditingCallbacks = true; }
76     void dumpSelectionRect() { m_dumpSelectionRect = true; }
77     void dumpStatusCallbacks() { m_dumpStatusCallbacks = true; }
78     void dumpTitleChanges() { m_dumpTitleChanges = true; }
79     void dumpFullScreenCallbacks() { m_dumpFullScreenCallbacks = true; }
80     void dumpFrameLoadCallbacks() { setShouldDumpFrameLoadCallbacks(true); }
81     void dumpProgressFinishedCallback() { setShouldDumpProgressFinishedCallback(true); }
82     void dumpResourceLoadCallbacks() { m_dumpResourceLoadCallbacks = true; }
83     void dumpResourceResponseMIMETypes() { m_dumpResourceResponseMIMETypes = true; }
84     void dumpWillCacheResponse() { m_dumpWillCacheResponse = true; }
85     void dumpApplicationCacheDelegateCallbacks() { m_dumpApplicationCacheDelegateCallbacks = true; }
86     void dumpDatabaseCallbacks() { m_dumpDatabaseCallbacks = true; }
87     void dumpDOMAsWebArchive() { m_whatToDump = DOMAsWebArchive; }
88     void dumpPolicyDelegateCallbacks() { m_dumpPolicyCallbacks = true; }
89
90     void setShouldDumpFrameLoadCallbacks(bool value) { m_dumpFrameLoadCallbacks = value; }
91     void setShouldDumpProgressFinishedCallback(bool value) { m_dumpProgressFinishedCallback = value; }
92
93     // Special options.
94     void keepWebHistory();
95     void setAcceptsEditing(bool value) { m_shouldAllowEditing = value; }
96     void setCanOpenWindows(bool);
97     void setCloseRemainingWindowsWhenComplete(bool value) { m_shouldCloseExtraWindows = value; }
98     void setXSSAuditorEnabled(bool);
99     void setAllowUniversalAccessFromFileURLs(bool);
100     void setAllowFileAccessFromFileURLs(bool);
101     void setPluginsEnabled(bool);
102     void setJavaScriptCanAccessClipboard(bool);
103     void setPrivateBrowsingEnabled(bool);
104     void setPopupBlockingEnabled(bool);
105     void setAuthorAndUserStylesEnabled(bool);
106     void setCustomPolicyDelegate(bool enabled, bool permissive = false);
107     void addOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef destinationProtocol, JSStringRef destinationHost, bool allowDestinationSubdomains);
108     void removeOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef destinationProtocol, JSStringRef destinationHost, bool allowDestinationSubdomains);
109     void setUserStyleSheetEnabled(bool);
110     void setUserStyleSheetLocation(JSStringRef);
111     void setSpatialNavigationEnabled(bool);
112     void setTabKeyCyclesThroughElements(bool);
113     void setSerializeHTTPLoads();
114     void dispatchPendingLoadRequests();
115     void setCacheModel(int);
116     void setAsynchronousSpellCheckingEnabled(bool);
117
118     // Special DOM functions.
119     void clearBackForwardList();
120     void execCommand(JSStringRef name, JSStringRef argument);
121     bool isCommandEnabled(JSStringRef name);
122     unsigned windowCount();
123
124     // Repaint testing.
125     void testRepaint() { m_testRepaint = true; }
126     void repaintSweepHorizontally() { m_testRepaintSweepHorizontally = true; }
127     void display();
128     
129     // UserContent testing.
130     void addUserScript(JSStringRef source, bool runAtStart, bool allFrames);
131     void addUserStyleSheet(JSStringRef source, bool allFrames);
132
133     // Text search testing.
134     bool findString(JSStringRef, JSValueRef optionsArray);
135
136     // Local storage
137     void clearAllDatabases();
138     void setDatabaseQuota(uint64_t);
139     JSRetainPtr<JSStringRef> pathToLocalResource(JSStringRef);
140
141     // Application Cache
142     void clearAllApplicationCaches();
143     void clearApplicationCacheForOrigin(JSStringRef origin);
144     void setAppCacheMaximumSize(uint64_t);
145     long long applicationCacheDiskUsageForOrigin(JSStringRef origin);
146     void disallowIncreaseForApplicationCacheQuota();
147     bool shouldDisallowIncreaseForApplicationCacheQuota() { return m_disallowIncreaseForApplicationCacheQuota; }
148     JSValueRef originsWithApplicationCache();
149
150     // Printing
151     bool isPageBoxVisible(int pageIndex);
152     bool isPrinting() { return m_isPrinting; }
153     void setPrinting() { m_isPrinting = true; }
154
155     // Authentication
156     void setHandlesAuthenticationChallenges(bool);
157     void setAuthenticationUsername(JSStringRef);
158     void setAuthenticationPassword(JSStringRef);
159
160     void setValueForUser(JSContextRef, JSValueRef element, JSStringRef value);
161
162     // Audio testing.
163     void setAudioResult(JSContextRef, JSValueRef data);
164
165     void setBlockAllPlugins(bool shouldBlock);
166
167     enum WhatToDump { RenderTree, MainFrameText, AllFramesText, Audio, DOMAsWebArchive };
168     WhatToDump whatToDump() const { return m_whatToDump; }
169
170     bool shouldDumpAllFrameScrollPositions() const { return m_shouldDumpAllFrameScrollPositions; }
171     bool shouldDumpBackForwardListsForAllWindows() const { return m_shouldDumpBackForwardListsForAllWindows; }
172     bool shouldDumpEditingCallbacks() const { return m_dumpEditingCallbacks; }
173     bool shouldDumpMainFrameScrollPosition() const { return m_whatToDump == RenderTree; }
174     bool shouldDumpStatusCallbacks() const { return m_dumpStatusCallbacks; }
175     bool shouldDumpTitleChanges() const { return m_dumpTitleChanges; }
176     bool shouldDumpPixels() const { return m_dumpPixels; }
177     bool shouldDumpFullScreenCallbacks() const { return m_dumpFullScreenCallbacks; }
178     bool shouldDumpFrameLoadCallbacks() const { return m_dumpFrameLoadCallbacks; }
179     bool shouldDumpProgressFinishedCallback() const { return m_dumpProgressFinishedCallback; }
180     bool shouldDumpResourceLoadCallbacks() const { return m_dumpResourceLoadCallbacks; }
181     bool shouldDumpResourceResponseMIMETypes() const { return m_dumpResourceResponseMIMETypes; }
182     bool shouldDumpWillCacheResponse() const { return m_dumpWillCacheResponse; }
183     bool shouldDumpApplicationCacheDelegateCallbacks() const { return m_dumpApplicationCacheDelegateCallbacks; }
184     bool shouldDumpDatabaseCallbacks() const { return m_dumpDatabaseCallbacks; }
185     bool shouldDumpSelectionRect() const { return m_dumpSelectionRect; }
186     bool shouldDumpPolicyCallbacks() const { return m_dumpPolicyCallbacks; }
187
188     bool isPolicyDelegateEnabled() const { return m_policyDelegateEnabled; }
189     bool isPolicyDelegatePermissive() const { return m_policyDelegatePermissive; }
190
191     bool waitToDump() const { return m_waitToDump; }
192     void waitToDumpWatchdogTimerFired();
193     void invalidateWaitToDumpWatchdogTimer();
194
195     bool shouldAllowEditing() const { return m_shouldAllowEditing; }
196
197     bool shouldCloseExtraWindowsAfterRunningTest() const { return m_shouldCloseExtraWindows; }
198
199     void evaluateScriptInIsolatedWorld(JSContextRef, unsigned worldID, JSStringRef script);
200     static unsigned worldIDForWorld(WKBundleScriptWorldRef);
201
202     void showWebInspector();
203     void closeWebInspector();
204     void evaluateInWebInspector(JSStringRef script);
205     JSRetainPtr<JSStringRef> inspectorTestStubURL();
206
207     void setPOSIXLocale(JSStringRef);
208
209     bool willSendRequestReturnsNull() const { return m_willSendRequestReturnsNull; }
210     void setWillSendRequestReturnsNull(bool f) { m_willSendRequestReturnsNull = f; }
211     bool willSendRequestReturnsNullOnRedirect() const { return m_willSendRequestReturnsNullOnRedirect; }
212     void setWillSendRequestReturnsNullOnRedirect(bool f) { m_willSendRequestReturnsNullOnRedirect = f; }
213
214     void setTextDirection(JSStringRef);
215
216     void setShouldStayOnPageAfterHandlingBeforeUnload(bool);
217
218     void setDefersLoading(bool);
219
220     void setStopProvisionalFrameLoads() { m_shouldStopProvisionalFrameLoads = true; }
221     bool shouldStopProvisionalFrameLoads() const { return m_shouldStopProvisionalFrameLoads; }
222     
223     bool globalFlag() const { return m_globalFlag; }
224     void setGlobalFlag(bool value) { m_globalFlag = value; }
225
226     double databaseDefaultQuota() const { return m_databaseDefaultQuota; }
227     void setDatabaseDefaultQuota(double quota) { m_databaseDefaultQuota = quota; }
228
229     double databaseMaxQuota() const { return m_databaseMaxQuota; }
230     void setDatabaseMaxQuota(double quota) { m_databaseMaxQuota = quota; }
231
232     void addChromeInputField(JSValueRef);
233     void removeChromeInputField(JSValueRef);
234     void focusWebView(JSValueRef);
235     void setBackingScaleFactor(double, JSValueRef);
236
237     void setWindowIsKey(bool);
238
239     void callAddChromeInputFieldCallback();
240     void callRemoveChromeInputFieldCallback();
241     void callFocusWebViewCallback();
242     void callSetBackingScaleFactorCallback();
243
244     void overridePreference(JSStringRef preference, JSStringRef value);
245
246     // Cookies testing
247     void setAlwaysAcceptCookies(bool);
248
249     // Custom full screen behavior.
250     void setHasCustomFullScreenBehavior(bool value) { m_customFullScreenBehavior = value; }
251     bool hasCustomFullScreenBehavior() const { return m_customFullScreenBehavior; }
252
253     // Web notifications.
254     void grantWebNotificationPermission(JSStringRef origin);
255     void denyWebNotificationPermission(JSStringRef origin);
256     void removeAllWebNotificationPermissions();
257     void simulateWebNotificationClick(JSValueRef notification);
258
259     // Geolocation.
260     void setGeolocationPermission(bool);
261     void setMockGeolocationPosition(double latitude, double longitude, double accuracy, JSValueRef altitude, JSValueRef altitudeAccuracy, JSValueRef heading, JSValueRef speed);
262     void setMockGeolocationPositionUnavailableError(JSStringRef message);
263     bool isGeolocationProviderActive();
264
265     // MediaStream
266     void setUserMediaPermission(bool);
267
268     void setPageVisibility(JSStringRef state);
269     void resetPageVisibility();
270
271     bool callShouldCloseOnWebView();
272
273     void setCustomTimeout(int duration) { m_timeout = duration; }
274
275     // Work queue.
276     void queueBackNavigation(unsigned howFarBackward);
277     void queueForwardNavigation(unsigned howFarForward);
278     void queueLoad(JSStringRef url, JSStringRef target, bool shouldOpenExternalURLs);
279     void queueLoadHTMLString(JSStringRef content, JSStringRef baseURL, JSStringRef unreachableURL);
280     void queueReload();
281     void queueLoadingScript(JSStringRef script);
282     void queueNonLoadingScript(JSStringRef script);
283
284     bool secureEventInputIsEnabled() const;
285     
286     JSValueRef failNextNewCodeBlock();
287     JSValueRef numberOfDFGCompiles(JSValueRef theFunction);
288     JSValueRef neverInlineFunction(JSValueRef theFunction);
289
290     bool shouldDecideNavigationPolicyAfterDelay() const { return m_shouldDecideNavigationPolicyAfterDelay; }
291     void setShouldDecideNavigationPolicyAfterDelay(bool);
292     void setNavigationGesturesEnabled(bool);
293
294     void runUIScript(JSStringRef script, JSValueRef callback);
295     void runUIScriptCallback(unsigned callbackID, JSStringRef result);
296
297     void installDidBeginSwipeCallback(JSValueRef);
298     void installWillEndSwipeCallback(JSValueRef);
299     void installDidEndSwipeCallback(JSValueRef);
300     void installDidRemoveSwipeSnapshotCallback(JSValueRef);
301     void callDidBeginSwipeCallback();
302     void callWillEndSwipeCallback();
303     void callDidEndSwipeCallback();
304     void callDidRemoveSwipeSnapshotCallback();
305
306     void clearTestRunnerCallbacks();
307
308 private:
309     TestRunner();
310
311     void platformInitialize();
312     void initializeWaitToDumpWatchdogTimerIfNeeded();
313
314     WKRetainPtr<WKURLRef> m_testURL; // Set by InjectedBundlePage once provisional load starts.
315
316     WhatToDump m_whatToDump;
317     bool m_shouldDumpAllFrameScrollPositions;
318     bool m_shouldDumpBackForwardListsForAllWindows;
319
320     bool m_shouldAllowEditing;
321     bool m_shouldCloseExtraWindows;
322
323     bool m_dumpEditingCallbacks;
324     bool m_dumpStatusCallbacks;
325     bool m_dumpTitleChanges;
326     bool m_dumpPixels;
327     bool m_dumpSelectionRect;
328     bool m_dumpFullScreenCallbacks;
329     bool m_dumpFrameLoadCallbacks;
330     bool m_dumpProgressFinishedCallback;
331     bool m_dumpResourceLoadCallbacks;
332     bool m_dumpResourceResponseMIMETypes;
333     bool m_dumpWillCacheResponse;
334     bool m_dumpApplicationCacheDelegateCallbacks;
335     bool m_dumpDatabaseCallbacks;
336     bool m_dumpPolicyCallbacks { false };
337     bool m_disallowIncreaseForApplicationCacheQuota;
338     bool m_waitToDump; // True if waitUntilDone() has been called, but notifyDone() has not yet been called.
339     bool m_testRepaint;
340     bool m_testRepaintSweepHorizontally;
341     bool m_isPrinting;
342
343     bool m_willSendRequestReturnsNull;
344     bool m_willSendRequestReturnsNullOnRedirect;
345     bool m_shouldStopProvisionalFrameLoads;
346
347     bool m_policyDelegateEnabled;
348     bool m_policyDelegatePermissive;
349     
350     bool m_globalFlag;
351     bool m_customFullScreenBehavior;
352
353     int m_timeout;
354
355     double m_databaseDefaultQuota;
356     double m_databaseMaxQuota;
357
358     bool m_shouldDecideNavigationPolicyAfterDelay { false };
359
360     bool m_userStyleSheetEnabled;
361     WKRetainPtr<WKStringRef> m_userStyleSheetLocation;
362
363     WKRetainPtr<WKArrayRef> m_allowedHosts;
364
365     PlatformTimerRef m_waitToDumpWatchdogTimer;
366 };
367
368 } // namespace WTR
369
370 #endif // TestRunner_h