1dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/*
2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2010 Google Inc. All rights reserved.
3dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *
4dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Redistribution and use in source and binary forms, with or without
5dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * modification, are permitted provided that the following conditions are
6dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * met:
7dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *
8dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *     * Redistributions of source code must retain the above copyright
9dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * notice, this list of conditions and the following disclaimer.
10dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *     * Redistributions in binary form must reproduce the above
11dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * copyright notice, this list of conditions and the following disclaimer
12dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * in the documentation and/or other materials provided with the
13dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * distribution.
14dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *     * Neither the name of Google Inc. nor the names of its
15dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * contributors may be used to endorse or promote products derived from
16dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * this software without specific prior written permission.
17dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *
18dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */
30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
31e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#ifndef TestShell_h
32e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#define TestShell_h
33e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "AccessibilityController.h"
35dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "EventSender.h"
36dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "LayoutTestController.h"
376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "NotificationPresenter.h"
38dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "PlainTextController.h"
395af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#include "TestEventPrinter.h"
40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "TextInputController.h"
4168513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "WebPreferences.h"
42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "WebViewHost.h"
43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <string>
44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/OwnPtr.h>
45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/Vector.h>
46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block// TestShell is a container of global variables and has bridge functions between
48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block// various objects. Only one instance is created in one DRT process.
49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
50dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocknamespace WebKit {
51e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeclass WebDevToolsAgentClient;
52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass WebFrame;
536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenclass WebNotificationPresenter;
54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass WebView;
55dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass WebURL;
56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
58e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeclass DRTDevToolsAgent;
59e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeclass DRTDevToolsCallArgs;
60e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeclass DRTDevToolsClient;
61e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstruct TestParams {
63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool dumpTree;
64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool dumpPixels;
652bde8e466a4451c7319e3a072d118917957d6554Steve Block    bool debugRenderTree;
662bde8e466a4451c7319e3a072d118917957d6554Steve Block    bool debugLayerTree;
67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool printSeparators;
68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WebKit::WebURL testUrl;
69e14391e94c850b8bd03680c23b38978db68687a8John Reck    // Resultant image file name. Required only if the test_shell mode.
70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    std::string pixelFileName;
71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    std::string pixelHash;
72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    TestParams()
74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        : dumpTree(true)
75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        , dumpPixels(false)
762bde8e466a4451c7319e3a072d118917957d6554Steve Block        , debugRenderTree(false)
772bde8e466a4451c7319e3a072d118917957d6554Steve Block        , debugLayerTree(false)
78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        , printSeparators(false) {}
79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block};
80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass TestShell {
82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockpublic:
835af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    TestShell(bool testShellMode);
84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    ~TestShell();
85e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // The main WebView.
87dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WebKit::WebView* webView() const { return m_webView; }
88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Returns the host for the main WebView.
89dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WebViewHost* webViewHost() const { return m_webViewHost; }
90dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    LayoutTestController* layoutTestController() const { return m_layoutTestController.get(); }
916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    EventSender* eventSender() const { return m_eventSender.get(); }
92dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    AccessibilityController* accessibilityController() const { return m_accessibilityController.get(); }
936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    NotificationPresenter* notificationPresenter() const { return m_notificationPresenter.get(); }
945af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    TestEventPrinter* printer() const { return m_printer.get(); }
95dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
9668513a70bcd92384395513322f1b801e7bf9c729Steve Block    WebPreferences* preferences() { return &m_prefs; }
9768513a70bcd92384395513322f1b801e7bf9c729Steve Block    void applyPreferences() { m_prefs.applyTo(m_webView); }
9868513a70bcd92384395513322f1b801e7bf9c729Steve Block
99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void bindJSObjectsToWindow(WebKit::WebFrame*);
100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void runFileTest(const TestParams&);
101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void callJSGC();
102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void resetTestController();
103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void waitTestFinished();
104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Operations to the main window.
106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void loadURL(const WebKit::WebURL& url);
107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void reload();
108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void goToOffset(int offset);
109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    int navigationEntryCount() const;
110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void setFocus(WebKit::WebWidget*, bool enable);
112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool shouldDumpFrameLoadCallbacks() const { return (m_testIsPreparing || m_testIsPending) && layoutTestController()->shouldDumpFrameLoadCallbacks(); }
113e14391e94c850b8bd03680c23b38978db68687a8John Reck    bool shouldDumpUserGestureInFrameLoadCallbacks() const { return (m_testIsPreparing || m_testIsPending) && layoutTestController()->shouldDumpUserGestureInFrameLoadCallbacks(); }
114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool shouldDumpResourceLoadCallbacks() const  { return (m_testIsPreparing || m_testIsPending) && layoutTestController()->shouldDumpResourceLoadCallbacks(); }
11568513a70bcd92384395513322f1b801e7bf9c729Steve Block    bool shouldDumpResourceResponseMIMETypes() const  { return (m_testIsPreparing || m_testIsPending) && layoutTestController()->shouldDumpResourceResponseMIMETypes(); }
116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void setIsLoading(bool flag) { m_isLoading = flag; }
117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Called by the LayoutTestController to signal test completion.
119dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void testFinished();
120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Called by LayoutTestController when a test hits the timeout, but does not
121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // cause a hang. We can avoid killing TestShell in this case and still dump
122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // the test results.
123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void testTimedOut();
124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
12506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    bool allowExternalPages() const { return m_allowExternalPages; }
12606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    void setAllowExternalPages(bool allowExternalPages) { m_allowExternalPages = allowExternalPages; }
12706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
128a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    void setAcceleratedCompositingEnabled(bool enabled) { m_acceleratedCompositingEnabled = enabled; }
1292bde8e466a4451c7319e3a072d118917957d6554Steve Block    void setForceCompositingMode(bool enabled) { m_forceCompositingMode = enabled; }
130bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    void setAccelerated2dCanvasEnabled(bool enabled) { m_accelerated2dCanvasEnabled = enabled; }
131bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
132dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if defined(OS_WIN)
133dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Access to the finished event.  Used by the static WatchDog thread.
134dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    HANDLE finishedEvent() { return m_finishedEvent; }
135dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
136dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Get the timeout for running a test in milliseconds.
1385af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    int layoutTestTimeout() { return m_timeout; }
1395af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    int layoutTestTimeoutForWatchDog() { return layoutTestTimeout() + 1000; }
1405af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    void setLayoutTestTimeout(int timeout) { m_timeout = timeout; }
141dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
142cad810f21b803229eb11403f9209855525a25d57Steve Block    // V8 JavaScript stress test options.
143cad810f21b803229eb11403f9209855525a25d57Steve Block    int stressOpt() { return m_stressOpt; }
144cad810f21b803229eb11403f9209855525a25d57Steve Block    void setStressOpt(bool stressOpt) { m_stressOpt = stressOpt; }
145cad810f21b803229eb11403f9209855525a25d57Steve Block    int stressDeopt() { return m_stressDeopt; }
146cad810f21b803229eb11403f9209855525a25d57Steve Block    void setStressDeopt(int stressDeopt) { m_stressDeopt = stressDeopt; }
147e14391e94c850b8bd03680c23b38978db68687a8John Reck
148cad810f21b803229eb11403f9209855525a25d57Steve Block    // The JavaScript flags specified as a strings.
149cad810f21b803229eb11403f9209855525a25d57Steve Block    std::string javaScriptFlags() { return m_javaScriptFlags; }
150cad810f21b803229eb11403f9209855525a25d57Steve Block    void setJavaScriptFlags(std::string javaScriptFlags) { m_javaScriptFlags = javaScriptFlags; }
151e14391e94c850b8bd03680c23b38978db68687a8John Reck
152e14391e94c850b8bd03680c23b38978db68687a8John Reck    // Set whether to dump when the loaded page has finished processing. This is used with multiple load
153e14391e94c850b8bd03680c23b38978db68687a8John Reck    // testing where we only want to have the output from the last load.
154e14391e94c850b8bd03680c23b38978db68687a8John Reck    void setDumpWhenFinished(bool dumpWhenFinished) { m_dumpWhenFinished = dumpWhenFinished; }
155e14391e94c850b8bd03680c23b38978db68687a8John Reck
156dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WebViewHost* createNewWindow(const WebKit::WebURL&);
157dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void closeWindow(WebViewHost*);
158dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void closeRemainingWindows();
159dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    int windowCount();
160dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    static void resizeWindowForTest(WebViewHost*, const WebKit::WebURL&);
161e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
162e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    void showDevTools();
163e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    void closeDevTools();
164e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
165e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    DRTDevToolsAgent* drtDevToolsAgent() { return m_drtDevToolsAgent.get(); }
166e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    DRTDevToolsClient* drtDevToolsClient() { return m_drtDevToolsClient.get(); }
167f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    WebViewHost* devToolsWebView() { return m_devTools; }
168dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
169dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    static const int virtualWindowBorder = 3;
170dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    typedef Vector<WebViewHost*> WindowList;
17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WindowList windowList() const { return m_windowList; }
17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
174dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockprivate:
175cad810f21b803229eb11403f9209855525a25d57Steve Block    WebViewHost* createNewWindow(const WebKit::WebURL&, DRTDevToolsAgent*);
176cad810f21b803229eb11403f9209855525a25d57Steve Block    void createMainWindow();
177e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    void createDRTDevToolsClient(DRTDevToolsAgent*);
178e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
17968513a70bcd92384395513322f1b801e7bf9c729Steve Block    void resetWebSettings(WebKit::WebView&);
180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void dump();
181dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    std::string dumpAllBackForwardLists();
1822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void dumpImage(SkCanvas*) const;
183dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
184dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool m_testIsPending;
185dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool m_testIsPreparing;
186dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    bool m_isLoading;
187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WebKit::WebView* m_webView;
188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WebKit::WebWidget* m_focusedWidget;
1895af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    bool m_testShellMode;
190dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WebViewHost* m_webViewHost;
191e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    WebViewHost* m_devTools;
192e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    OwnPtr<DRTDevToolsAgent> m_drtDevToolsAgent;
193e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    OwnPtr<DRTDevToolsClient> m_drtDevToolsClient;
19406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    OwnPtr<AccessibilityController> m_accessibilityController;
19506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    OwnPtr<EventSender> m_eventSender;
19606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    OwnPtr<LayoutTestController> m_layoutTestController;
19706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    OwnPtr<PlainTextController> m_plainTextController;
19806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    OwnPtr<TextInputController> m_textInputController;
19906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    OwnPtr<NotificationPresenter> m_notificationPresenter;
20006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    OwnPtr<TestEventPrinter> m_printer;
201dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    TestParams m_params;
2025af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    int m_timeout; // timeout value in millisecond
20306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    bool m_allowExternalPages;
204a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    bool m_acceleratedCompositingEnabled;
2052bde8e466a4451c7319e3a072d118917957d6554Steve Block    bool m_forceCompositingMode;
206bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    bool m_accelerated2dCanvasEnabled;
20768513a70bcd92384395513322f1b801e7bf9c729Steve Block    WebPreferences m_prefs;
208cad810f21b803229eb11403f9209855525a25d57Steve Block    bool m_stressOpt;
209cad810f21b803229eb11403f9209855525a25d57Steve Block    bool m_stressDeopt;
210cad810f21b803229eb11403f9209855525a25d57Steve Block    std::string m_javaScriptFlags;
211e14391e94c850b8bd03680c23b38978db68687a8John Reck    bool m_dumpWhenFinished;
212e14391e94c850b8bd03680c23b38978db68687a8John Reck
213dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
214dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // List of all windows in this process.
215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // The main window should be put into windowList[0].
216dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    WindowList m_windowList;
217dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
218dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if defined(OS_WIN)
219dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Used by the watchdog to know when it's finished.
220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    HANDLE m_finishedEvent;
221dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
222dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block};
223e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
224db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockvoid platformInit(int*, char***);
225dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid openStartupDialog();
2265abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickbool checkLayoutTestSystemDependencies();
227e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
228e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#endif // TestShell_h
229