123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- /*
- * 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 <WebKit2/WKBundleScriptWorld.h>
- #include <WebKit2/WKRetainPtr.h>
- #include <string>
- #include <wtf/PassRefPtr.h>
- #if PLATFORM(MAC)
- #include <wtf/RetainPtr.h>
- #include <CoreFoundation/CFRunLoop.h>
- typedef RetainPtr<CFRunLoopTimerRef> PlatformTimerRef;
- #elif PLATFORM(WIN)
- typedef UINT_PTR PlatformTimerRef;
- #elif PLATFORM(QT)
- #include <QTimer>
- typedef QTimer PlatformTimerRef;
- #elif PLATFORM(GTK)
- typedef unsigned int PlatformTimerRef;
- #elif PLATFORM(MANX)
- typedef void* PlatformTimerRef;
- #elif PLATFORM(EFL)
- #if USE(EO)
- typedef struct _Eo Ecore_Timer;
- #else
- typedef struct _Ecore_Timer Ecore_Timer;
- #endif
- 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.
- 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 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 setApplicationCacheOriginQuota(unsigned long long);
- 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);
- 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 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(long callId, 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; }
- 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);
- JSRetainPtr<JSStringRef> platformName();
- void setPageVisibility(JSStringRef state);
- void resetPageVisibility();
- bool callShouldCloseOnWebView();
- void setCustomTimeout(int duration);
- // Work queue.
- void queueBackNavigation(unsigned howFarBackward);
- void queueForwardNavigation(unsigned howFarForward);
- void queueLoad(JSStringRef url, JSStringRef target);
- void queueLoadHTMLString(JSStringRef content, JSStringRef baseURL, JSStringRef unreachableURL);
- void queueReload();
- void queueLoadingScript(JSStringRef script);
- void queueNonLoadingScript(JSStringRef script);
- bool secureEventInputIsEnabled() const;
- private:
- static const double waitToDumpWatchdogTimerInterval;
- TestRunner();
- void platformInitialize();
- void initializeWaitToDumpWatchdogTimerIfNeeded();
- 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_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;
- bool m_userStyleSheetEnabled;
- WKRetainPtr<WKStringRef> m_userStyleSheetLocation;
- PlatformTimerRef m_waitToDumpWatchdogTimer;
- };
- } // namespace WTR
- #endif // TestRunner_h
|