Clean up ChunkedUpdateDrawingAreaProxy
[WebKit-https.git] / WebKitTools / DumpRenderTree / LayoutTestController.h
1 /*
2  * Copyright (C) 2007, 2008, 2009 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  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer. 
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution. 
13  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14  *     its contributors may be used to endorse or promote products derived
15  *     from this software without specific prior written permission. 
16  *
17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28  
29 #ifndef LayoutTestController_h
30 #define LayoutTestController_h
31
32 #include <JavaScriptCore/JSObjectRef.h>
33 #include <JavaScriptCore/JSRetainPtr.h>
34 #include <set>
35 #include <string>
36 #include <vector>
37 #include <wtf/PassRefPtr.h>
38 #include <wtf/RefCounted.h>
39
40 class LayoutTestController : public RefCounted<LayoutTestController> {
41 public:
42     static PassRefPtr<LayoutTestController> create(const std::string& testPathOrURL, const std::string& expectedPixelHash);
43     ~LayoutTestController();
44
45     void makeWindowObject(JSContextRef context, JSObjectRef windowObject, JSValueRef* exception);
46
47     void addDisallowedURL(JSStringRef url);
48     void clearAllApplicationCaches();
49     void clearAllDatabases();
50     void clearBackForwardList();
51     void clearPersistentUserStyleSheet();
52     bool callShouldCloseOnWebView();
53     JSStringRef copyDecodedHostName(JSStringRef name);
54     JSStringRef copyEncodedHostName(JSStringRef name);
55     JSRetainPtr<JSStringRef> counterValueForElementById(JSStringRef id);
56     void disableImageLoading();
57     void dispatchPendingLoadRequests();
58     void display();
59     void execCommand(JSStringRef name, JSStringRef value);
60     bool findString(JSContextRef, JSStringRef, JSObjectRef optionsArray);
61     bool isCommandEnabled(JSStringRef name);
62     void keepWebHistory();
63     JSValueRef computedStyleIncludingVisitedInfo(JSContextRef, JSValueRef);
64     JSValueRef nodesFromRect(JSContextRef, JSValueRef, int x, int y, unsigned top, unsigned right, unsigned bottom, unsigned left, bool ignoreClipping);
65     void notifyDone();
66     int numberOfPages(float pageWidthInPixels, float pageHeightInPixels);
67     void overridePreference(JSStringRef key, JSStringRef value);
68     int pageNumberForElementById(JSStringRef id, float pageWidthInPixels, float pageHeightInPixels);
69     JSRetainPtr<JSStringRef> pageProperty(const char* propertyName, int pageNumber) const;
70     JSRetainPtr<JSStringRef> pageSizeAndMarginsInPixels(int pageNumber, int width, int height, int marginTop, int marginRight, int marginBottom, int marginLeft) const;
71     bool isPageBoxVisible(int pageNumber) const;
72     JSStringRef pathToLocalResource(JSContextRef, JSStringRef url);
73     void queueBackNavigation(int howFarBackward);
74     void queueForwardNavigation(int howFarForward);
75     void queueLoad(JSStringRef url, JSStringRef target);
76     void queueLoadHTMLString(JSStringRef content, JSStringRef baseURL);
77     void queueLoadingScript(JSStringRef script);
78     void queueNonLoadingScript(JSStringRef script);
79     void queueReload();
80     void removeAllVisitedLinks();
81     void setAcceptsEditing(bool acceptsEditing);
82     void setAllowUniversalAccessFromFileURLs(bool);
83     void setAllowFileAccessFromFileURLs(bool);
84     void setAppCacheMaximumSize(unsigned long long quota);
85     void setApplicationCacheOriginQuota(unsigned long long quota);
86     void setAuthorAndUserStylesEnabled(bool);
87     void setCacheModel(int);
88     void setCustomPolicyDelegate(bool setDelegate, bool permissive);
89     void setDatabaseQuota(unsigned long long quota);
90     void setDomainRelaxationForbiddenForURLScheme(bool forbidden, JSStringRef scheme);
91     void setIconDatabaseEnabled(bool iconDatabaseEnabled);
92     void setJavaScriptProfilingEnabled(bool profilingEnabled);
93     void setJavaScriptCanAccessClipboard(bool flag);
94     void setMainFrameIsFirstResponder(bool flag);
95     void setMockDeviceOrientation(bool canProvideAlpha, double alpha, bool canProvideBeta, double beta, bool canProvideGamma, double gamma);
96     void setMockGeolocationError(int code, JSStringRef message);
97     void setMockGeolocationPosition(double latitude, double longitude, double accuracy);
98     void addMockSpeechInputResult(JSStringRef result, double confidence, JSStringRef language);
99     void setPersistentUserStyleSheetLocation(JSStringRef path);
100     void setPluginsEnabled(bool flag);
101     void setPopupBlockingEnabled(bool flag);
102     void setPrivateBrowsingEnabled(bool flag);
103     void setSelectTrailingWhitespaceEnabled(bool flag);
104     void setSmartInsertDeleteEnabled(bool flag);
105     void setTabKeyCyclesThroughElements(bool cycles);
106     void setUseDashboardCompatibilityMode(bool flag);
107     void setUserStyleSheetEnabled(bool flag);
108     void setUserStyleSheetLocation(JSStringRef path);
109     void setViewModeMediaFeature(JSStringRef mode);
110     void setXSSAuditorEnabled(bool flag);
111     void setFrameFlatteningEnabled(bool enable);
112     void setSpatialNavigationEnabled(bool enable);
113     void setScrollbarPolicy(JSStringRef orientation, JSStringRef policy);
114     void setEditingBehavior(const char* editingBehavior);
115
116     void waitForPolicyDelegate();
117     size_t webHistoryItemCount();
118     unsigned workerThreadCount() const;
119     int windowCount();
120     
121     void grantDesktopNotificationPermission(JSStringRef origin);
122     bool checkDesktopNotificationPermission(JSStringRef origin);
123
124     bool elementDoesAutoCompleteForElementWithId(JSStringRef id);
125
126     bool dumpAsPDF() const { return m_dumpAsPDF; }
127     void setDumpAsPDF(bool dumpAsPDF) { m_dumpAsPDF = dumpAsPDF; }
128
129     bool dumpAsText() const { return m_dumpAsText; }
130     void setDumpAsText(bool dumpAsText) { m_dumpAsText = dumpAsText; }
131
132     bool generatePixelResults() const { return m_generatePixelResults; }
133     void setGeneratePixelResults(bool generatePixelResults) { m_generatePixelResults = generatePixelResults; }
134
135     bool dumpApplicationCacheDelegateCallbacks() const { return m_dumpApplicationCacheDelegateCallbacks; }
136     void setDumpApplicationCacheDelegateCallbacks(bool dumpCallbacks) { m_dumpApplicationCacheDelegateCallbacks = dumpCallbacks; }
137
138     bool dumpBackForwardList() const { return m_dumpBackForwardList; }
139     void setDumpBackForwardList(bool dumpBackForwardList) { m_dumpBackForwardList = dumpBackForwardList; }
140
141     bool dumpChildFrameScrollPositions() const { return m_dumpChildFrameScrollPositions; }
142     void setDumpChildFrameScrollPositions(bool dumpChildFrameScrollPositions) { m_dumpChildFrameScrollPositions = dumpChildFrameScrollPositions; }
143
144     bool dumpChildFramesAsText() const { return m_dumpChildFramesAsText; }
145     void setDumpChildFramesAsText(bool dumpChildFramesAsText) { m_dumpChildFramesAsText = dumpChildFramesAsText; }
146
147     bool dumpDatabaseCallbacks() const { return m_dumpDatabaseCallbacks; }
148     void setDumpDatabaseCallbacks(bool dumpDatabaseCallbacks) { m_dumpDatabaseCallbacks = dumpDatabaseCallbacks; }
149
150     bool dumpDOMAsWebArchive() const { return m_dumpDOMAsWebArchive; }
151     void setDumpDOMAsWebArchive(bool dumpDOMAsWebArchive) { m_dumpDOMAsWebArchive = dumpDOMAsWebArchive; }
152
153     bool dumpEditingCallbacks() const { return m_dumpEditingCallbacks; }
154     void setDumpEditingCallbacks(bool dumpEditingCallbacks) { m_dumpEditingCallbacks = dumpEditingCallbacks; }
155
156     bool dumpFrameLoadCallbacks() const { return m_dumpFrameLoadCallbacks; }
157     void setDumpFrameLoadCallbacks(bool dumpFrameLoadCallbacks) { m_dumpFrameLoadCallbacks = dumpFrameLoadCallbacks; }
158     
159     bool dumpUserGestureInFrameLoadCallbacks() const { return m_dumpUserGestureInFrameLoadCallbacks; }
160     void setDumpUserGestureInFrameLoadCallbacks(bool dumpUserGestureInFrameLoadCallbacks) { m_dumpUserGestureInFrameLoadCallbacks = dumpUserGestureInFrameLoadCallbacks; }    
161
162     bool dumpHistoryDelegateCallbacks() const { return m_dumpHistoryDelegateCallbacks; }
163     void setDumpHistoryDelegateCallbacks(bool dumpHistoryDelegateCallbacks) { m_dumpHistoryDelegateCallbacks = dumpHistoryDelegateCallbacks; }
164     
165     bool dumpResourceLoadCallbacks() const { return m_dumpResourceLoadCallbacks; }
166     void setDumpResourceLoadCallbacks(bool dumpResourceLoadCallbacks) { m_dumpResourceLoadCallbacks = dumpResourceLoadCallbacks; }
167     
168     bool dumpResourceResponseMIMETypes() const { return m_dumpResourceResponseMIMETypes; }
169     void setDumpResourceResponseMIMETypes(bool dumpResourceResponseMIMETypes) { m_dumpResourceResponseMIMETypes = dumpResourceResponseMIMETypes; }
170
171     bool dumpSelectionRect() const { return m_dumpSelectionRect; }
172     void setDumpSelectionRect(bool dumpSelectionRect) { m_dumpSelectionRect = dumpSelectionRect; }
173
174     bool dumpSourceAsWebArchive() const { return m_dumpSourceAsWebArchive; }
175     void setDumpSourceAsWebArchive(bool dumpSourceAsWebArchive) { m_dumpSourceAsWebArchive = dumpSourceAsWebArchive; }
176
177     bool dumpStatusCallbacks() const { return m_dumpStatusCallbacks; }
178     void setDumpStatusCallbacks(bool dumpStatusCallbacks) { m_dumpStatusCallbacks = dumpStatusCallbacks; }
179
180     bool dumpTitleChanges() const { return m_dumpTitleChanges; }
181     void setDumpTitleChanges(bool dumpTitleChanges) { m_dumpTitleChanges = dumpTitleChanges; }
182
183     bool dumpIconChanges() const { return m_dumpIconChanges; }
184     void setDumpIconChanges(bool dumpIconChanges) { m_dumpIconChanges = dumpIconChanges; }
185
186     bool dumpVisitedLinksCallback() const { return m_dumpVisitedLinksCallback; }
187     void setDumpVisitedLinksCallback(bool dumpVisitedLinksCallback) { m_dumpVisitedLinksCallback = dumpVisitedLinksCallback; }
188     
189     bool dumpWillCacheResponse() const { return m_dumpWillCacheResponse; }
190     void setDumpWillCacheResponse(bool dumpWillCacheResponse) { m_dumpWillCacheResponse = dumpWillCacheResponse; }
191     
192     bool callCloseOnWebViews() const { return m_callCloseOnWebViews; }
193     void setCallCloseOnWebViews(bool callCloseOnWebViews) { m_callCloseOnWebViews = callCloseOnWebViews; }
194
195     bool canOpenWindows() const { return m_canOpenWindows; }
196     void setCanOpenWindows(bool canOpenWindows) { m_canOpenWindows = canOpenWindows; }
197
198     bool closeRemainingWindowsWhenComplete() const { return m_closeRemainingWindowsWhenComplete; }
199     void setCloseRemainingWindowsWhenComplete(bool closeRemainingWindowsWhenComplete) { m_closeRemainingWindowsWhenComplete = closeRemainingWindowsWhenComplete; }
200     
201     bool newWindowsCopyBackForwardList() const { return m_newWindowsCopyBackForwardList; }
202     void setNewWindowsCopyBackForwardList(bool newWindowsCopyBackForwardList) { m_newWindowsCopyBackForwardList = newWindowsCopyBackForwardList; }
203     
204     bool stopProvisionalFrameLoads() const { return m_stopProvisionalFrameLoads; }
205     void setStopProvisionalFrameLoads(bool stopProvisionalFrameLoads) { m_stopProvisionalFrameLoads = stopProvisionalFrameLoads; }
206
207     bool testOnscreen() const { return m_testOnscreen; }
208     void setTestOnscreen(bool testOnscreen) { m_testOnscreen = testOnscreen; }
209
210     bool testRepaint() const { return m_testRepaint; }
211     void setTestRepaint(bool testRepaint) { m_testRepaint = testRepaint; }
212
213     bool testRepaintSweepHorizontally() const { return m_testRepaintSweepHorizontally; }
214     void setTestRepaintSweepHorizontally(bool testRepaintSweepHorizontally) { m_testRepaintSweepHorizontally = testRepaintSweepHorizontally; }
215
216     bool waitToDump() const { return m_waitToDump; }
217     void setWaitToDump(bool waitToDump);
218     void waitToDumpWatchdogTimerFired();
219
220     const std::set<std::string>& willSendRequestClearHeaders() const { return m_willSendRequestClearHeaders; }
221     void setWillSendRequestClearHeader(std::string header) { m_willSendRequestClearHeaders.insert(header); }
222
223     bool willSendRequestReturnsNull() const { return m_willSendRequestReturnsNull; }
224     void setWillSendRequestReturnsNull(bool returnsNull) { m_willSendRequestReturnsNull = returnsNull; }
225
226     bool willSendRequestReturnsNullOnRedirect() const { return m_willSendRequestReturnsNullOnRedirect; }
227     void setWillSendRequestReturnsNullOnRedirect(bool returnsNull) { m_willSendRequestReturnsNullOnRedirect = returnsNull; }
228
229     bool windowIsKey() const { return m_windowIsKey; }
230     void setWindowIsKey(bool windowIsKey);
231
232     bool alwaysAcceptCookies() const { return m_alwaysAcceptCookies; }
233     void setAlwaysAcceptCookies(bool alwaysAcceptCookies);
234     
235     bool handlesAuthenticationChallenges() const { return m_handlesAuthenticationChallenges; }
236     void setHandlesAuthenticationChallenges(bool handlesAuthenticationChallenges) { m_handlesAuthenticationChallenges = handlesAuthenticationChallenges; }
237     
238     bool isPrinting() const { return m_isPrinting; }
239     void setIsPrinting(bool isPrinting) { m_isPrinting = isPrinting; }
240
241     const std::string& authenticationUsername() const { return m_authenticationUsername; }
242     void setAuthenticationUsername(std::string username) { m_authenticationUsername = username; }
243     
244     const std::string& authenticationPassword() const { return m_authenticationPassword; }
245     void setAuthenticationPassword(std::string password) { m_authenticationPassword = password; }
246
247     bool globalFlag() const { return m_globalFlag; }
248     void setGlobalFlag(bool globalFlag) { m_globalFlag = globalFlag; }
249     
250     bool deferMainResourceDataLoad() const { return m_deferMainResourceDataLoad; }
251     void setDeferMainResourceDataLoad(bool flag) { m_deferMainResourceDataLoad = flag; }
252
253     const std::string& testPathOrURL() const { return m_testPathOrURL; }
254     const std::string& expectedPixelHash() const { return m_expectedPixelHash; }
255     
256     bool pauseAnimationAtTimeOnElementWithId(JSStringRef animationName, double time, JSStringRef elementId);
257     bool pauseTransitionAtTimeOnElementWithId(JSStringRef propertyName, double time, JSStringRef elementId);
258     bool sampleSVGAnimationForElementAtTime(JSStringRef animationId, double time, JSStringRef elementId);
259     unsigned numberOfActiveAnimations() const;
260     void suspendAnimations() const;
261     void resumeAnimations() const;
262
263     void addOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef destinationProtocol, JSStringRef destinationHost, bool allowDestinationSubdomains);
264     void removeOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef destinationProtocol, JSStringRef destinationHost, bool allowDestinationSubdomains);
265
266     void addUserScript(JSStringRef source, bool runAtStart, bool allFrames);
267     void addUserStyleSheet(JSStringRef source, bool allFrames);
268
269     void setGeolocationPermission(bool allow);
270     bool isGeolocationPermissionSet() const { return m_isGeolocationPermissionSet; }
271     bool geolocationPermission() const { return m_geolocationPermission; }
272
273     void setDeveloperExtrasEnabled(bool);
274     void setAsynchronousSpellCheckingEnabled(bool);
275     void showWebInspector();
276     void closeWebInspector();
277     void setTimelineProfilingEnabled(bool enabled);
278     void evaluateInWebInspector(long callId, JSStringRef script);
279     void evaluateScriptInIsolatedWorld(unsigned worldId, JSObjectRef globalObject, JSStringRef script);
280
281     void setPOSIXLocale(JSStringRef locale);
282
283     void setWebViewEditable(bool);
284
285     void abortModal();
286
287     bool hasSpellingMarker(int from, int length);
288
289     void dumpConfigurationForViewport(int availableWidth, int availableHeight);
290     
291     static void setSerializeHTTPLoads(bool serialize);
292
293     // The following API test functions should probably be moved to platform-specific 
294     // unit tests outside of DRT once they exist.
295     void apiTestNewWindowDataLoadBaseURL(JSStringRef utf8Data, JSStringRef baseURL);
296     void apiTestGoToCurrentBackForwardItem();
297
298     // Simulate a request an embedding application could make, populating per-session credential storage.
299     void authenticateSession(JSStringRef url, JSStringRef username, JSStringRef password);
300
301     JSRetainPtr<JSStringRef> layerTreeAsText() const;
302
303     JSRetainPtr<JSStringRef> markerTextForListItem(JSContextRef context, JSValueRef nodeObject) const;
304
305     static const unsigned maxViewWidth;
306     static const unsigned maxViewHeight;
307
308 private:
309     LayoutTestController(const std::string& testPathOrURL, const std::string& expectedPixelHash);
310
311     void setGeolocationPermissionCommon(bool allow);
312
313     bool m_dumpApplicationCacheDelegateCallbacks;
314     bool m_dumpAsPDF;
315     bool m_dumpAsText;
316     bool m_dumpBackForwardList;
317     bool m_dumpChildFrameScrollPositions;
318     bool m_dumpChildFramesAsText;
319     bool m_dumpDOMAsWebArchive;
320     bool m_dumpDatabaseCallbacks;
321     bool m_dumpEditingCallbacks;
322     bool m_dumpFrameLoadCallbacks;
323     bool m_dumpUserGestureInFrameLoadCallbacks;
324     bool m_dumpHistoryDelegateCallbacks;
325     bool m_dumpResourceLoadCallbacks;
326     bool m_dumpResourceResponseMIMETypes;
327     bool m_dumpSelectionRect;
328     bool m_dumpSourceAsWebArchive;
329     bool m_dumpStatusCallbacks;
330     bool m_dumpTitleChanges;
331     bool m_dumpIconChanges;
332     bool m_dumpVisitedLinksCallback;
333     bool m_dumpWillCacheResponse;
334     bool m_generatePixelResults;
335     bool m_callCloseOnWebViews;
336     bool m_canOpenWindows;
337     bool m_closeRemainingWindowsWhenComplete;
338     bool m_newWindowsCopyBackForwardList;
339     bool m_stopProvisionalFrameLoads;
340     bool m_testOnscreen;
341     bool m_testRepaint;
342     bool m_testRepaintSweepHorizontally;
343     bool m_waitToDump; // True if waitUntilDone() has been called, but notifyDone() has not yet been called.
344     bool m_willSendRequestReturnsNull;
345     bool m_willSendRequestReturnsNullOnRedirect;
346     bool m_windowIsKey;
347     bool m_alwaysAcceptCookies;
348     bool m_globalFlag;
349     bool m_isGeolocationPermissionSet;
350     bool m_geolocationPermission;
351     bool m_handlesAuthenticationChallenges;
352     bool m_isPrinting;
353     bool m_deferMainResourceDataLoad;
354
355     std::string m_authenticationUsername;
356     std::string m_authenticationPassword; 
357     std::string m_testPathOrURL;
358     std::string m_expectedPixelHash;    // empty string if no hash
359
360     std::set<std::string> m_willSendRequestClearHeaders;
361     
362     // origins which have been granted desktop notification access
363     std::vector<JSStringRef> m_desktopNotificationAllowedOrigins;
364     
365     static JSClassRef getJSClass();
366     static JSStaticValue* staticValues();
367     static JSStaticFunction* staticFunctions();
368 };
369
370 #endif // LayoutTestController_h