2010-10-07 Balazs Kelemen <kbalazs@webkit.org>
[WebKit-https.git] / WebKitTools / WebKitTestRunner / InjectedBundle / LayoutTestController.h
1 /*
2  * Copyright (C) 2010 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef LayoutTestController_h
27 #define LayoutTestController_h
28
29 #include "JSWrappable.h"
30 #include <JavaScriptCore/JSRetainPtr.h>
31 #include <string>
32 #include <wtf/PassRefPtr.h>
33
34 #if PLATFORM(MAC)
35 #include <wtf/RetainPtr.h>
36 typedef RetainPtr<CFRunLoopTimerRef> PlatformTimerRef;
37 #elif PLATFORM(WIN)
38 typedef UINT_PTR PlatformTimerRef;
39 #elif PLATFORM(QT)
40 #include <QTimer>
41 typedef QTimer PlatformTimerRef;
42 #endif
43
44 namespace WTR {
45
46 class LayoutTestController : public JSWrappable {
47 public:
48     static PassRefPtr<LayoutTestController> create();
49     virtual ~LayoutTestController();
50
51     // JSWrappable
52     virtual JSClassRef wrapperClass();
53
54     void makeWindowObject(JSContextRef, JSObjectRef windowObject, JSValueRef* exception);
55
56     // The basics.
57     void dumpAsText() { m_whatToDump = MainFrameText; }
58     void dumpChildFramesAsText() { m_whatToDump = AllFramesText; }
59     void waitUntilDone();
60     void notifyDone();
61
62     // Other dumping.
63     void dumpChildFrameScrollPositions() { m_shouldDumpAllFrameScrollPositions = true; }
64     void dumpEditingCallbacks() { m_dumpEditingCallbacks = true; }
65     void dumpSelectionRect() { } // Will need to do something when we support pixel tests.
66     void dumpStatusCallbacks() { m_dumpStatusCallbacks = true; }
67     void dumpTitleChanges() { m_dumpTitleChanges = true; }
68
69     // Special options.
70     void keepWebHistory();
71     void setAcceptsEditing(bool value) { m_shouldAllowEditing = value; }
72     void setCanOpenWindows(bool);
73     void setCloseRemainingWindowsWhenComplete(bool value) { m_shouldCloseExtraWindows = value; }
74     void setXSSAuditorEnabled(bool);
75     unsigned windowCount();
76
77     // Special DOM functions.
78     JSValueRef computedStyleIncludingVisitedInfo(JSValueRef element);
79     JSRetainPtr<JSStringRef> counterValueForElementById(JSStringRef elementId);
80     JSRetainPtr<JSStringRef> markerTextForListItem(JSValueRef element);
81     void execCommand(JSStringRef name, JSStringRef argument);
82     bool isCommandEnabled(JSStringRef name);
83
84     // Repaint testing.
85     void testRepaint() { m_testRepaint = true; }
86     void repaintSweepHorizontally() { m_testRepaintSweepHorizontally = true; }
87     void display();
88
89     // Animation testing.
90     unsigned numberOfActiveAnimations() const;
91     bool pauseAnimationAtTimeOnElementWithId(JSStringRef animationName, double time, JSStringRef elementId);
92
93     // UserContent testing.
94     void addUserScript(JSStringRef source, bool runAtStart, bool allFrames);
95     void addUserStyleSheet(JSStringRef source, bool allFrames);
96
97     enum WhatToDump { RenderTree, MainFrameText, AllFramesText };
98     WhatToDump whatToDump() const { return m_whatToDump; }
99
100     bool shouldDumpAllFrameScrollPositions() const { return m_shouldDumpAllFrameScrollPositions; }
101     bool shouldDumpEditingCallbacks() const { return m_dumpEditingCallbacks; }
102     bool shouldDumpMainFrameScrollPosition() const { return m_whatToDump == RenderTree; }
103
104     bool shouldDumpStatusCallbacks() const { return m_dumpStatusCallbacks; }
105     bool shouldDumpTitleChanges() const { return m_dumpTitleChanges; }
106
107     bool waitToDump() const { return m_waitToDump; }
108     void waitToDumpWatchdogTimerFired();
109     void invalidateWaitToDumpWatchdogTimer();
110
111     bool shouldAllowEditing() const { return m_shouldAllowEditing; }
112
113     bool shouldCloseExtraWindowsAfterRunningTest() const { return m_shouldCloseExtraWindows; }
114
115 private:
116     static const double waitToDumpWatchdogTimerInterval;
117
118     LayoutTestController();
119
120     void platformInitialize();
121     void initializeWaitToDumpWatchdogTimerIfNeeded();
122
123     WhatToDump m_whatToDump;
124     bool m_shouldDumpAllFrameScrollPositions;
125
126     bool m_shouldAllowEditing;
127     bool m_shouldCloseExtraWindows;
128
129     bool m_dumpEditingCallbacks;
130     bool m_dumpStatusCallbacks;
131     bool m_dumpTitleChanges;
132     bool m_waitToDump; // True if waitUntilDone() has been called, but notifyDone() has not yet been called.
133     bool m_testRepaint;
134     bool m_testRepaintSweepHorizontally;
135
136     PlatformTimerRef m_waitToDumpWatchdogTimer;
137 };
138
139 } // namespace WTR
140
141 #endif // LayoutTestController_h