Remove setDefersLoading infrastructure from WebKit2
[WebKit-https.git] / Tools / WebKitTestRunner / TestInvocation.h
index efc6635..fe17897 100644 (file)
 #ifndef TestInvocation_h
 #define TestInvocation_h
 
-#include <WebKit2/WKRetainPtr.h>
+#include "JSWrappable.h"
+#include "TestOptions.h"
+#include "UIScriptContext.h"
+#include "WhatToDump.h"
+#include <WebKit/WKRetainPtr.h>
+#include <string>
 #include <wtf/Noncopyable.h>
+#include <wtf/Seconds.h>
+#include <wtf/text/StringBuilder.h>
 
 namespace WTR {
 
-class TestInvocation {
+class TestInvocation final : public UIScriptContextDelegate {
     WTF_MAKE_NONCOPYABLE(TestInvocation);
 public:
-    TestInvocation(const char*);
+    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);
 
+    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:
-    void dump(const char*);
+    WKRetainPtr<WKMutableDictionaryRef> createTestSettingsDictionary();
 
+    void dumpResults();
+    static void dump(const char* textToStdout, const char* textToStderr = 0, bool seenError = false);
+    enum class SnapshotResultType { WebView, WebContents };
+    void dumpPixelsAndCompareWithExpected(SnapshotResultType, WKArrayRef repaintRects, WKImageRef = nullptr);
+    void dumpAudio(WKDataRef);
+    bool compareActualHashToExpectedAndDumpResults(const char[33]);
+
+    static void forceRepaintDoneCallback(WKErrorRef, void* context);
+    
+    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;
+    
     WKRetainPtr<WKURLRef> m_url;
-    char* m_pathOrURL;
+    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_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::unique_ptr<UIScriptContext> m_UIScriptContext;
+    UIScriptInvocationData* m_pendingUIScriptInvocationData { nullptr };
 };
 
 } // namespace WTR