[Qt] QtTestBrowser should provide option to enable/disable Javascript
[WebKit-https.git] / Tools / QtTestBrowser / launcherwindow.h
1 /*
2  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
3  * Copyright (C) 2009 Girish Ramakrishnan <girish@forwardbias.in>
4  * Copyright (C) 2006 George Staikos <staikos@kde.org>
5  * Copyright (C) 2006 Dirk Mueller <mueller@kde.org>
6  * Copyright (C) 2006 Zack Rusin <zack@kde.org>
7  * Copyright (C) 2006 Simon Hausmann <hausmann@kde.org>
8  *
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in the
18  *    documentation and/or other materials provided with the distribution.
19  *
20  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
21  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
28  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32
33 #ifndef launcherwindow_h
34 #define launcherwindow_h
35
36 #include <QtNetwork/QNetworkRequest>
37
38 #ifndef QT_NO_OPENGL
39 #include <QtOpenGL/QGLWidget>
40 #endif
41
42 #include <QDebug>
43
44 #include <cstdio>
45 #include <qevent.h>
46 #include <qwebelement.h>
47 #include <qwebframe.h>
48 #include <qwebinspector.h>
49 #include <qwebsettings.h>
50
51 #include "mainwindow.h"
52 #include "urlloader.h"
53 #include "utils.h"
54 #include "webinspector.h"
55 #include "webpage.h"
56 #include "webview.h"
57
58 QT_BEGIN_NAMESPACE
59 class QPropertyAnimation;
60 class QLineEdit;
61 QT_END_NAMESPACE
62
63 struct HighlightedElement;
64
65 class WindowOptions {
66 public:
67     WindowOptions()
68         : useGraphicsView(false)
69         , useDiskCache(false)
70         , useCompositing(true)
71         , useTiledBackingStore(false)
72         , useWebGL(false)
73         , useWebAudio(false)
74         , useFrameFlattening(false)
75         , cacheWebView(false)
76         , showFrameRate(false)
77         , resizesToContents(false)
78         , viewportUpdateMode(QGraphicsView::MinimalViewportUpdate)
79         , useLocalStorage(false)
80         , useOfflineStorageDatabase(false)
81         , useOfflineWebApplicationCache(false)
82         , useDiskCookies(true)
83         , enableScrollAnimator(false)
84         , offlineStorageDefaultQuotaSize(0)
85 #ifndef QT_NO_OPENGL
86         , useQGLWidgetViewport(false)
87 #endif
88         , printLoadedUrls(false)
89         , startMaximized(false)
90     {
91     }
92
93     bool useGraphicsView;
94     bool useDiskCache;
95     bool useCompositing;
96     bool useTiledBackingStore;
97     bool useWebGL;
98     bool useWebAudio;
99     bool useFrameFlattening;
100     bool cacheWebView;
101     bool showFrameRate;
102     bool resizesToContents;
103     QGraphicsView::ViewportUpdateMode viewportUpdateMode;
104     bool useLocalStorage;
105     bool useOfflineStorageDatabase;
106     bool useOfflineWebApplicationCache;
107     bool useDiskCookies;
108     bool enableScrollAnimator;
109     quint64 offlineStorageDefaultQuotaSize;
110 #ifndef QT_NO_OPENGL
111     bool useQGLWidgetViewport;
112 #endif
113     bool printLoadedUrls;
114     QUrl inspectorUrl;
115     quint16 remoteInspectorPort;
116     bool startMaximized;
117 };
118
119 class LauncherWindow : public MainWindow {
120     Q_OBJECT
121
122 public:
123     LauncherWindow(WindowOptions* data = 0, QGraphicsScene* sharedScene = 0);
124     virtual ~LauncherWindow();
125
126     void sendTouchEvent();
127
128     bool eventFilter(QObject* obj, QEvent* event);
129
130 protected Q_SLOTS:
131     void loadStarted();
132     void loadFinished();
133
134     void showLinkHover(const QString &link, const QString &toolTip);
135
136     void zoomIn();
137     void zoomOut();
138     void resetZoom();
139     void toggleZoomTextOnly(bool on);
140     void zoomAnimationFinished();
141
142     void print();
143     void screenshot();
144
145     void setEditable(bool on);
146
147     /* void dumpPlugins() */
148     void dumpHtml();
149
150     void loadURLListFromFile();
151
152     void setDiskCache(bool enable);
153     void setTouchMocking(bool on);
154     void toggleWebView(bool graphicsBased);
155     void toggleAcceleratedCompositing(bool toggle);
156     void toggleTiledBackingStore(bool toggle);
157     void toggleResizesToContents(bool toggle);
158     void toggleWebGL(bool toggle);
159     void toggleWebAudio(bool toggle);
160     void toggleSpatialNavigation(bool b);
161     void toggleFullScreenMode(bool enable);
162     void toggleFrameFlattening(bool toggle);
163     void toggleJavaScriptEnabled(bool enable);
164     void toggleInterruptingJavaScriptEnabled(bool enable);
165     void toggleJavascriptCanOpenWindows(bool enable);
166     void toggleAutoLoadImages(bool enable);
167     void setUseDiskCookies(bool enable);
168     void clearCookies();
169     void togglePlugins(bool enable);
170     void toggleLocalStorage(bool toggle);
171     void toggleOfflineStorageDatabase(bool toggle);
172     void toggleOfflineWebApplicationCache(bool toggle);
173     void toggleScrollAnimator(bool toggle);
174     void setOfflineStorageDefaultQuota();
175 #ifndef QT_NO_LINEEDIT
176     void showFindBar();
177     void find(int mode);
178 #endif
179 #ifndef QT_NO_OPENGL
180     void toggleQGLWidgetViewport(bool enable);
181 #endif
182
183     void changeViewportUpdateMode(int mode);
184     void animatedFlip();
185     void animatedYFlip();
186     void selectElements();
187     void clearSelection();
188     void showFPS(bool enable);
189     void showUserAgentDialog();
190
191     void printURL(const QUrl&);
192 #if !defined(QT_NO_FILEDIALOG) && !defined(QT_NO_MESSAGEBOX)
193     void downloadRequest(const QNetworkRequest&);
194     void fileDownloadFinished();
195 #endif
196
197 public Q_SLOTS:
198     LauncherWindow* newWindow();
199     LauncherWindow* cloneWindow();
200     void updateFPS(int fps);
201
202 Q_SIGNALS:
203     void enteredFullScreenMode(bool on);
204
205 private:
206     void init();
207     void initializeView();
208     void createChrome();
209     void applyPrefs();
210     void applyZoom();
211
212     bool isGraphicsBased() const;
213
214 private:
215     static QVector<int> m_zoomLevels;
216     int m_currentZoom;
217
218     UrlLoader* m_urlLoader;
219
220     QWidget* m_view;
221     WebInspector* m_inspector;
222
223     WindowOptions m_windowOptions;
224
225     QAction* m_formatMenuAction;
226
227     QPropertyAnimation* m_zoomAnimation;
228 #if !defined(QT_NO_FILEDIALOG) && !defined(QT_NO_MESSAGEBOX)
229     QNetworkReply* m_reply;
230 #endif
231     QList<QTouchEvent::TouchPoint> m_touchPoints;
232     QList<HighlightedElement> m_highlightedElements;
233     bool m_touchMocking;
234
235     QString m_inputUrl;
236 #ifndef QT_NO_LINEEDIT
237     QToolBar* m_findBar;
238     QLineEdit* m_lineEdit;
239     int m_findFlag;
240     static const int s_findNormalFlag = 0;
241 #endif
242 };
243
244 #endif