diff options
Diffstat (limited to 'Tools/WebKitTestRunner/InjectedBundle/TestRunner.h')
-rw-r--r-- | Tools/WebKitTestRunner/InjectedBundle/TestRunner.h | 345 |
1 files changed, 345 insertions, 0 deletions
diff --git a/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h b/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h new file mode 100644 index 000000000..41406b316 --- /dev/null +++ b/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h @@ -0,0 +1,345 @@ +/* + * Copyright (C) 2010, 2011, 2012 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef TestRunner_h +#define TestRunner_h + +#include "JSWrappable.h" +#include <JavaScriptCore/JSRetainPtr.h> +#include <WebKit/WKBundleScriptWorld.h> +#include <WebKit/WKRetainPtr.h> +#include <string> +#include <wtf/PassRefPtr.h> + +#if PLATFORM(COCOA) +#include <wtf/RetainPtr.h> +#include <CoreFoundation/CFRunLoop.h> +typedef RetainPtr<CFRunLoopTimerRef> PlatformTimerRef; +#elif PLATFORM(GTK) +#include <wtf/glib/GMainLoopSource.h> +typedef GMainLoopSource PlatformTimerRef; +#elif PLATFORM(EFL) +typedef Ecore_Timer* PlatformTimerRef; +#endif + +namespace WTR { + +class TestRunner : public JSWrappable { +public: + static PassRefPtr<TestRunner> create(); + virtual ~TestRunner(); + + // JSWrappable + virtual JSClassRef wrapperClass(); + + void makeWindowObject(JSContextRef, JSObjectRef windowObject, JSValueRef* exception); + + // The basics. + WKURLRef testURL() const { return m_testURL.get(); } + void setTestURL(WKURLRef url) { m_testURL = url; } + void dumpAsText(bool dumpPixels); + void waitForPolicyDelegate(); + void dumpChildFramesAsText() { m_whatToDump = AllFramesText; } + void waitUntilDone(); + void notifyDone(); + double preciseTime(); + + // Other dumping. + void dumpBackForwardList() { m_shouldDumpBackForwardListsForAllWindows = true; } + void dumpChildFrameScrollPositions() { m_shouldDumpAllFrameScrollPositions = true; } + void dumpEditingCallbacks() { m_dumpEditingCallbacks = true; } + void dumpSelectionRect() { m_dumpSelectionRect = true; } + void dumpStatusCallbacks() { m_dumpStatusCallbacks = true; } + void dumpTitleChanges() { m_dumpTitleChanges = true; } + void dumpFullScreenCallbacks() { m_dumpFullScreenCallbacks = true; } + void dumpFrameLoadCallbacks() { setShouldDumpFrameLoadCallbacks(true); } + void dumpProgressFinishedCallback() { setShouldDumpProgressFinishedCallback(true); } + void dumpResourceLoadCallbacks() { m_dumpResourceLoadCallbacks = true; } + void dumpResourceResponseMIMETypes() { m_dumpResourceResponseMIMETypes = true; } + void dumpWillCacheResponse() { m_dumpWillCacheResponse = true; } + void dumpApplicationCacheDelegateCallbacks() { m_dumpApplicationCacheDelegateCallbacks = true; } + void dumpDatabaseCallbacks() { m_dumpDatabaseCallbacks = true; } + void dumpDOMAsWebArchive() { m_whatToDump = DOMAsWebArchive; } + void dumpPolicyDelegateCallbacks() { m_dumpPolicyCallbacks = true; } + + void setShouldDumpFrameLoadCallbacks(bool value) { m_dumpFrameLoadCallbacks = value; } + void setShouldDumpProgressFinishedCallback(bool value) { m_dumpProgressFinishedCallback = value; } + + // Special options. + void keepWebHistory(); + void setAcceptsEditing(bool value) { m_shouldAllowEditing = value; } + void setCanOpenWindows(bool); + void setCloseRemainingWindowsWhenComplete(bool value) { m_shouldCloseExtraWindows = value; } + void setXSSAuditorEnabled(bool); + void setAllowUniversalAccessFromFileURLs(bool); + void setAllowFileAccessFromFileURLs(bool); + void setPluginsEnabled(bool); + void setJavaScriptCanAccessClipboard(bool); + void setPrivateBrowsingEnabled(bool); + void setPopupBlockingEnabled(bool); + void setAuthorAndUserStylesEnabled(bool); + void setCustomPolicyDelegate(bool enabled, bool permissive = false); + void addOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef destinationProtocol, JSStringRef destinationHost, bool allowDestinationSubdomains); + void removeOriginAccessWhitelistEntry(JSStringRef sourceOrigin, JSStringRef destinationProtocol, JSStringRef destinationHost, bool allowDestinationSubdomains); + void setUserStyleSheetEnabled(bool); + void setUserStyleSheetLocation(JSStringRef); + void setSpatialNavigationEnabled(bool); + void setTabKeyCyclesThroughElements(bool); + void setSerializeHTTPLoads(); + void dispatchPendingLoadRequests(); + void setCacheModel(int); + void setAsynchronousSpellCheckingEnabled(bool); + + // Special DOM functions. + void clearBackForwardList(); + void execCommand(JSStringRef name, JSStringRef argument); + bool isCommandEnabled(JSStringRef name); + unsigned windowCount(); + + // Repaint testing. + void testRepaint() { m_testRepaint = true; } + void repaintSweepHorizontally() { m_testRepaintSweepHorizontally = true; } + void display(); + + // UserContent testing. + void addUserScript(JSStringRef source, bool runAtStart, bool allFrames); + void addUserStyleSheet(JSStringRef source, bool allFrames); + + // Text search testing. + bool findString(JSStringRef, JSValueRef optionsArray); + + // Local storage + void clearAllDatabases(); + void setDatabaseQuota(uint64_t); + JSRetainPtr<JSStringRef> pathToLocalResource(JSStringRef); + + // Application Cache + void clearAllApplicationCaches(); + void clearApplicationCacheForOrigin(JSStringRef origin); + void setAppCacheMaximumSize(uint64_t); + long long applicationCacheDiskUsageForOrigin(JSStringRef origin); + void disallowIncreaseForApplicationCacheQuota(); + bool shouldDisallowIncreaseForApplicationCacheQuota() { return m_disallowIncreaseForApplicationCacheQuota; } + JSValueRef originsWithApplicationCache(); + + // Printing + bool isPageBoxVisible(int pageIndex); + bool isPrinting() { return m_isPrinting; } + void setPrinting() { m_isPrinting = true; } + + // Authentication + void setHandlesAuthenticationChallenges(bool); + void setAuthenticationUsername(JSStringRef); + void setAuthenticationPassword(JSStringRef); + + void setValueForUser(JSContextRef, JSValueRef element, JSStringRef value); + + // Audio testing. + void setAudioResult(JSContextRef, JSValueRef data); + + void setBlockAllPlugins(bool shouldBlock); + + enum WhatToDump { RenderTree, MainFrameText, AllFramesText, Audio, DOMAsWebArchive }; + WhatToDump whatToDump() const { return m_whatToDump; } + + bool shouldDumpAllFrameScrollPositions() const { return m_shouldDumpAllFrameScrollPositions; } + bool shouldDumpBackForwardListsForAllWindows() const { return m_shouldDumpBackForwardListsForAllWindows; } + bool shouldDumpEditingCallbacks() const { return m_dumpEditingCallbacks; } + bool shouldDumpMainFrameScrollPosition() const { return m_whatToDump == RenderTree; } + bool shouldDumpStatusCallbacks() const { return m_dumpStatusCallbacks; } + bool shouldDumpTitleChanges() const { return m_dumpTitleChanges; } + bool shouldDumpPixels() const { return m_dumpPixels; } + bool shouldDumpFullScreenCallbacks() const { return m_dumpFullScreenCallbacks; } + bool shouldDumpFrameLoadCallbacks() const { return m_dumpFrameLoadCallbacks; } + bool shouldDumpProgressFinishedCallback() const { return m_dumpProgressFinishedCallback; } + bool shouldDumpResourceLoadCallbacks() const { return m_dumpResourceLoadCallbacks; } + bool shouldDumpResourceResponseMIMETypes() const { return m_dumpResourceResponseMIMETypes; } + bool shouldDumpWillCacheResponse() const { return m_dumpWillCacheResponse; } + bool shouldDumpApplicationCacheDelegateCallbacks() const { return m_dumpApplicationCacheDelegateCallbacks; } + bool shouldDumpDatabaseCallbacks() const { return m_dumpDatabaseCallbacks; } + bool shouldDumpSelectionRect() const { return m_dumpSelectionRect; } + bool shouldDumpPolicyCallbacks() const { return m_dumpPolicyCallbacks; } + + bool isPolicyDelegateEnabled() const { return m_policyDelegateEnabled; } + bool isPolicyDelegatePermissive() const { return m_policyDelegatePermissive; } + + bool waitToDump() const { return m_waitToDump; } + void waitToDumpWatchdogTimerFired(); + void invalidateWaitToDumpWatchdogTimer(); + + bool shouldAllowEditing() const { return m_shouldAllowEditing; } + + bool shouldCloseExtraWindowsAfterRunningTest() const { return m_shouldCloseExtraWindows; } + + void evaluateScriptInIsolatedWorld(JSContextRef, unsigned worldID, JSStringRef script); + static unsigned worldIDForWorld(WKBundleScriptWorldRef); + + void showWebInspector(); + void closeWebInspector(); + void evaluateInWebInspector(JSStringRef script); + + void setPOSIXLocale(JSStringRef); + + bool willSendRequestReturnsNull() const { return m_willSendRequestReturnsNull; } + void setWillSendRequestReturnsNull(bool f) { m_willSendRequestReturnsNull = f; } + bool willSendRequestReturnsNullOnRedirect() const { return m_willSendRequestReturnsNullOnRedirect; } + void setWillSendRequestReturnsNullOnRedirect(bool f) { m_willSendRequestReturnsNullOnRedirect = f; } + + void setTextDirection(JSStringRef); + + void setShouldStayOnPageAfterHandlingBeforeUnload(bool); + + void setDefersLoading(bool); + + void setStopProvisionalFrameLoads() { m_shouldStopProvisionalFrameLoads = true; } + bool shouldStopProvisionalFrameLoads() const { return m_shouldStopProvisionalFrameLoads; } + + bool globalFlag() const { return m_globalFlag; } + void setGlobalFlag(bool value) { m_globalFlag = value; } + + double databaseDefaultQuota() const { return m_databaseDefaultQuota; } + void setDatabaseDefaultQuota(double quota) { m_databaseDefaultQuota = quota; } + + double databaseMaxQuota() const { return m_databaseMaxQuota; } + void setDatabaseMaxQuota(double quota) { m_databaseMaxQuota = quota; } + + void addChromeInputField(JSValueRef); + void removeChromeInputField(JSValueRef); + void focusWebView(JSValueRef); + void setBackingScaleFactor(double, JSValueRef); + + void setWindowIsKey(bool); + + void callAddChromeInputFieldCallback(); + void callRemoveChromeInputFieldCallback(); + void callFocusWebViewCallback(); + void callSetBackingScaleFactorCallback(); + + void overridePreference(JSStringRef preference, JSStringRef value); + + // Cookies testing + void setAlwaysAcceptCookies(bool); + + // Custom full screen behavior. + void setHasCustomFullScreenBehavior(bool value) { m_customFullScreenBehavior = value; } + bool hasCustomFullScreenBehavior() const { return m_customFullScreenBehavior; } + + // Web notifications. + void grantWebNotificationPermission(JSStringRef origin); + void denyWebNotificationPermission(JSStringRef origin); + void removeAllWebNotificationPermissions(); + void simulateWebNotificationClick(JSValueRef notification); + + // Geolocation. + void setGeolocationPermission(bool); + void setMockGeolocationPosition(double latitude, double longitude, double accuracy, JSValueRef altitude, JSValueRef altitudeAccuracy, JSValueRef heading, JSValueRef speed); + void setMockGeolocationPositionUnavailableError(JSStringRef message); + bool isGeolocationProviderActive(); + + // MediaStream + void setUserMediaPermission(bool); + + void setPageVisibility(JSStringRef state); + void resetPageVisibility(); + + bool callShouldCloseOnWebView(); + + void setCustomTimeout(int duration) { m_timeout = duration; } + + // Work queue. + void queueBackNavigation(unsigned howFarBackward); + void queueForwardNavigation(unsigned howFarForward); + void queueLoad(JSStringRef url, JSStringRef target, bool shouldOpenExternalURLs); + void queueLoadHTMLString(JSStringRef content, JSStringRef baseURL, JSStringRef unreachableURL); + void queueReload(); + void queueLoadingScript(JSStringRef script); + void queueNonLoadingScript(JSStringRef script); + + bool secureEventInputIsEnabled() const; + + JSValueRef numberOfDFGCompiles(JSValueRef theFunction); + JSValueRef neverInlineFunction(JSValueRef theFunction); + +private: + TestRunner(); + + void platformInitialize(); + void initializeWaitToDumpWatchdogTimerIfNeeded(); + + WKRetainPtr<WKURLRef> m_testURL; // Set by InjectedBundlePage once provisional load starts. + + WhatToDump m_whatToDump; + bool m_shouldDumpAllFrameScrollPositions; + bool m_shouldDumpBackForwardListsForAllWindows; + + bool m_shouldAllowEditing; + bool m_shouldCloseExtraWindows; + + bool m_dumpEditingCallbacks; + bool m_dumpStatusCallbacks; + bool m_dumpTitleChanges; + bool m_dumpPixels; + bool m_dumpSelectionRect; + bool m_dumpFullScreenCallbacks; + bool m_dumpFrameLoadCallbacks; + bool m_dumpProgressFinishedCallback; + bool m_dumpResourceLoadCallbacks; + bool m_dumpResourceResponseMIMETypes; + bool m_dumpWillCacheResponse; + bool m_dumpApplicationCacheDelegateCallbacks; + bool m_dumpDatabaseCallbacks; + bool m_dumpPolicyCallbacks { false }; + bool m_disallowIncreaseForApplicationCacheQuota; + bool m_waitToDump; // True if waitUntilDone() has been called, but notifyDone() has not yet been called. + bool m_testRepaint; + bool m_testRepaintSweepHorizontally; + bool m_isPrinting; + + bool m_willSendRequestReturnsNull; + bool m_willSendRequestReturnsNullOnRedirect; + bool m_shouldStopProvisionalFrameLoads; + + bool m_policyDelegateEnabled; + bool m_policyDelegatePermissive; + + bool m_globalFlag; + bool m_customFullScreenBehavior; + + int m_timeout; + + double m_databaseDefaultQuota; + double m_databaseMaxQuota; + + bool m_userStyleSheetEnabled; + WKRetainPtr<WKStringRef> m_userStyleSheetLocation; + + WKRetainPtr<WKArrayRef> m_allowedHosts; + + PlatformTimerRef m_waitToDumpWatchdogTimer; +}; + +} // namespace WTR + +#endif // TestRunner_h |