Remove setDefersLoading infrastructure from WebKit2
[WebKit-https.git] / Tools / WebKitTestRunner / TestInvocation.h
index 6a1631e..fe17897 100644 (file)
 #ifndef TestInvocation_h
 #define TestInvocation_h
 
+#include "JSWrappable.h"
+#include "TestOptions.h"
+#include "UIScriptContext.h"
+#include "WhatToDump.h"
+#include <WebKit/WKRetainPtr.h>
 #include <string>
-#include <WebKit2/WKRetainPtr.h>
 #include <wtf/Noncopyable.h>
-#include <wtf/OwnPtr.h>
+#include <wtf/Seconds.h>
 #include <wtf/text/StringBuilder.h>
 
 namespace WTR {
 
-class TestInvocation {
+class TestInvocation final : public UIScriptContextDelegate {
     WTF_MAKE_NONCOPYABLE(TestInvocation);
 public:
-    explicit TestInvocation(const std::string& pathOrURL);
+    explicit TestInvocation(WKURLRef, const TestOptions&);
     ~TestInvocation();
 
+    WKURLRef url() const;
+    bool urlContains(const char*) const;
+    
+    const TestOptions& options() const { return m_options; }
+
     void setIsPixelTest(const std::string& expectedPixelHash);
 
+    void setCustomTimeout(WTF::Seconds duration) { m_timeout = duration; }
+    void setDumpJSConsoleLogInStdErr(bool value) { m_dumpJSConsoleLogInStdErr = value; }
+
+    WTF::Seconds shortTimeout() const;
+
     void invoke();
     void didReceiveMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody);
     WKRetainPtr<WKTypeRef> didReceiveSynchronousMessageFromInjectedBundle(WKStringRef messageName, WKTypeRef messageBody);
 
-    void dumpWebProcessUnresponsiveness();
+    static void dumpWebProcessUnresponsiveness(const char* errorMessage);
     void outputText(const WTF::String&);
+
+    void didBeginSwipe();
+    void willEndSwipe();
+    void didEndSwipe();
+    void didRemoveSwipeSnapshot();
+
+    void notifyDownloadDone();
+
+    void didClearStatisticsThroughWebsiteDataRemoval();
+    void didResetStatisticsToConsistentState();
+    void didSetBlockCookiesForHost();
+    void didSetStatisticsDebugMode();
+    void didSetPrevalentResourceForDebugMode();
+    void didSetLastSeen();
+    void didSetPrevalentResource();
+    void didSetVeryPrevalentResource();
+    void didSetHasHadUserInteraction();
+    void didReceiveAllStorageAccessEntries(Vector<String>& domains);
+
+    void didRemoveAllSessionCredentials();
+    
+    void dumpResourceLoadStatistics();
+
+    bool canOpenWindows() const { return m_canOpenWindows; }
+    
 private:
+    WKRetainPtr<WKMutableDictionaryRef> createTestSettingsDictionary();
+
     void dumpResults();
     static void dump(const char* textToStdout, const char* textToStderr = 0, bool seenError = false);
-    void dumpPixelsAndCompareWithExpected(WKImageRef, WKArrayRef repaintRects);
+    enum class SnapshotResultType { WebView, WebContents };
+    void dumpPixelsAndCompareWithExpected(SnapshotResultType, WKArrayRef repaintRects, WKImageRef = nullptr);
     void dumpAudio(WKDataRef);
     bool compareActualHashToExpectedAndDumpResults(const char[33]);
 
-#if PLATFORM(QT) || PLATFORM(EFL)
     static void forceRepaintDoneCallback(WKErrorRef, void* context);
-#endif
     
-    WKRetainPtr<WKURLRef> m_url;
-    std::string m_pathOrURL;
+    struct UIScriptInvocationData {
+        unsigned callbackID;
+        WebKit::WKRetainPtr<WKStringRef> scriptString;
+        TestInvocation* testInvocation;
+    };
+    static void runUISideScriptAfterUpdateCallback(WKErrorRef, void* context);
+
+    bool shouldLogHistoryClientCallbacks() const;
+
+    void runUISideScript(WKStringRef, unsigned callbackID);
+    // UIScriptContextDelegate
+    void uiScriptDidComplete(const String& result, unsigned callbackID) override;
+
+    const TestOptions m_options;
     
-    bool m_dumpPixels;
+    WKRetainPtr<WKURLRef> m_url;
+    WTF::String m_urlString;
+
     std::string m_expectedPixelHash;
 
+    WTF::Seconds m_timeout;
+    bool m_dumpJSConsoleLogInStdErr { false };
+
     // Invocation state
-    bool m_gotInitialResponse;
-    bool m_gotFinalMessage;
-    bool m_gotRepaint;
-    bool m_error;
+    bool m_startedTesting { false };
+    bool m_gotInitialResponse { false };
+    bool m_gotFinalMessage { false };
+    bool m_gotRepaint { false };
+    bool m_error { false };
+
+    bool m_waitUntilDone { false };
+    bool m_dumpFrameLoadCallbacks { false };
+    bool m_dumpPixels { false };
+    bool m_pixelResultIsPending { false };
+    bool m_shouldDumpResourceLoadStatistics { false };
+    bool m_canOpenWindows { false };
+    WhatToDump m_whatToDump { WhatToDump::RenderTree };
 
     StringBuilder m_textOutput;
+    String m_savedResourceLoadStatistics;
     WKRetainPtr<WKDataRef> m_audioResult;
     WKRetainPtr<WKImageRef> m_pixelResult;
     WKRetainPtr<WKArrayRef> m_repaintRects;
-    std::string m_errorMessage;
-    bool m_webProcessIsUnresponsive;
-
+    
+    std::unique_ptr<UIScriptContext> m_UIScriptContext;
+    UIScriptInvocationData* m_pendingUIScriptInvocationData { nullptr };
 };
 
 } // namespace WTR