summaryrefslogtreecommitdiff
path: root/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/WebKitTestRunner/InjectedBundle/TestRunner.h')
-rw-r--r--Tools/WebKitTestRunner/InjectedBundle/TestRunner.h345
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