|
1 /* |
|
2 Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
|
3 Copyright (C) 2007 Staikos Computing Services Inc. |
|
4 |
|
5 This library is free software; you can redistribute it and/or |
|
6 modify it under the terms of the GNU Library General Public |
|
7 License as published by the Free Software Foundation; either |
|
8 version 2 of the License, or (at your option) any later version. |
|
9 |
|
10 This library is distributed in the hope that it will be useful, |
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
13 Library General Public License for more details. |
|
14 |
|
15 You should have received a copy of the GNU Library General Public License |
|
16 along with this library; see the file COPYING.LIB. If not, write to |
|
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
|
18 Boston, MA 02110-1301, USA. |
|
19 */ |
|
20 |
|
21 #ifndef QWEBPAGE_H |
|
22 #define QWEBPAGE_H |
|
23 |
|
24 #include "qwebsettings.h" |
|
25 #include "qwebkitglobal.h" |
|
26 |
|
27 #include <QtCore/qobject.h> |
|
28 #include <QtCore/qurl.h> |
|
29 #include <QtGui/qwidget.h> |
|
30 |
|
31 QT_BEGIN_NAMESPACE |
|
32 class QNetworkProxy; |
|
33 class QUndoStack; |
|
34 class QMenu; |
|
35 class QNetworkRequest; |
|
36 class QNetworkReply; |
|
37 class QNetworkAccessManager; |
|
38 QT_END_NAMESPACE |
|
39 |
|
40 class QWebElement; |
|
41 class QWebFrame; |
|
42 class QWebNetworkRequest; |
|
43 class QWebHistory; |
|
44 |
|
45 class QWebFrameData; |
|
46 class QWebHistoryItem; |
|
47 class QWebHitTestResult; |
|
48 class QWebNetworkInterface; |
|
49 class QWebPagePrivate; |
|
50 class QWebPluginFactory; |
|
51 class QtViewportHintsPrivate; |
|
52 |
|
53 namespace WebCore { |
|
54 class ChromeClientQt; |
|
55 class EditorClientQt; |
|
56 class FrameLoaderClientQt; |
|
57 class InspectorClientQt; |
|
58 class InspectorFrontendClientQt; |
|
59 class NotificationPresenterClientQt; |
|
60 class ResourceHandle; |
|
61 class HitTestResult; |
|
62 class QNetworkReplyHandler; |
|
63 |
|
64 struct FrameLoadRequest; |
|
65 } |
|
66 |
|
67 class QWEBKIT_EXPORT QWebPage : public QObject { |
|
68 Q_OBJECT |
|
69 |
|
70 Q_PROPERTY(bool modified READ isModified) |
|
71 Q_PROPERTY(QString selectedText READ selectedText) |
|
72 Q_PROPERTY(QSize viewportSize READ viewportSize WRITE setViewportSize) |
|
73 Q_PROPERTY(QSize preferredContentsSize READ preferredContentsSize WRITE setPreferredContentsSize) |
|
74 Q_PROPERTY(bool forwardUnsupportedContent READ forwardUnsupportedContent WRITE setForwardUnsupportedContent) |
|
75 Q_PROPERTY(LinkDelegationPolicy linkDelegationPolicy READ linkDelegationPolicy WRITE setLinkDelegationPolicy) |
|
76 Q_PROPERTY(QPalette palette READ palette WRITE setPalette) |
|
77 Q_PROPERTY(bool contentEditable READ isContentEditable WRITE setContentEditable) |
|
78 Q_ENUMS(LinkDelegationPolicy NavigationType WebAction) |
|
79 public: |
|
80 enum NavigationType { |
|
81 NavigationTypeLinkClicked, |
|
82 NavigationTypeFormSubmitted, |
|
83 NavigationTypeBackOrForward, |
|
84 NavigationTypeReload, |
|
85 NavigationTypeFormResubmitted, |
|
86 NavigationTypeOther |
|
87 }; |
|
88 |
|
89 enum WebAction { |
|
90 NoWebAction = - 1, |
|
91 |
|
92 OpenLink, |
|
93 |
|
94 OpenLinkInNewWindow, |
|
95 OpenFrameInNewWindow, |
|
96 |
|
97 DownloadLinkToDisk, |
|
98 CopyLinkToClipboard, |
|
99 |
|
100 OpenImageInNewWindow, |
|
101 DownloadImageToDisk, |
|
102 CopyImageToClipboard, |
|
103 |
|
104 Back, |
|
105 Forward, |
|
106 Stop, |
|
107 Reload, |
|
108 |
|
109 Cut, |
|
110 Copy, |
|
111 Paste, |
|
112 |
|
113 Undo, |
|
114 Redo, |
|
115 MoveToNextChar, |
|
116 MoveToPreviousChar, |
|
117 MoveToNextWord, |
|
118 MoveToPreviousWord, |
|
119 MoveToNextLine, |
|
120 MoveToPreviousLine, |
|
121 MoveToStartOfLine, |
|
122 MoveToEndOfLine, |
|
123 MoveToStartOfBlock, |
|
124 MoveToEndOfBlock, |
|
125 MoveToStartOfDocument, |
|
126 MoveToEndOfDocument, |
|
127 SelectNextChar, |
|
128 SelectPreviousChar, |
|
129 SelectNextWord, |
|
130 SelectPreviousWord, |
|
131 SelectNextLine, |
|
132 SelectPreviousLine, |
|
133 SelectStartOfLine, |
|
134 SelectEndOfLine, |
|
135 SelectStartOfBlock, |
|
136 SelectEndOfBlock, |
|
137 SelectStartOfDocument, |
|
138 SelectEndOfDocument, |
|
139 DeleteStartOfWord, |
|
140 DeleteEndOfWord, |
|
141 |
|
142 SetTextDirectionDefault, |
|
143 SetTextDirectionLeftToRight, |
|
144 SetTextDirectionRightToLeft, |
|
145 |
|
146 ToggleBold, |
|
147 ToggleItalic, |
|
148 ToggleUnderline, |
|
149 |
|
150 InspectElement, |
|
151 |
|
152 InsertParagraphSeparator, |
|
153 InsertLineSeparator, |
|
154 |
|
155 SelectAll, |
|
156 ReloadAndBypassCache, |
|
157 |
|
158 PasteAndMatchStyle, |
|
159 RemoveFormat, |
|
160 |
|
161 ToggleStrikethrough, |
|
162 ToggleSubscript, |
|
163 ToggleSuperscript, |
|
164 InsertUnorderedList, |
|
165 InsertOrderedList, |
|
166 Indent, |
|
167 Outdent, |
|
168 |
|
169 AlignCenter, |
|
170 AlignJustified, |
|
171 AlignLeft, |
|
172 AlignRight, |
|
173 |
|
174 StopScheduledPageRefresh, |
|
175 |
|
176 WebActionCount |
|
177 }; |
|
178 |
|
179 enum FindFlag { |
|
180 FindBackward = 1, |
|
181 FindCaseSensitively = 2, |
|
182 FindWrapsAroundDocument = 4, |
|
183 HighlightAllOccurrences = 8 |
|
184 }; |
|
185 Q_DECLARE_FLAGS(FindFlags, FindFlag) |
|
186 |
|
187 enum LinkDelegationPolicy { |
|
188 DontDelegateLinks, |
|
189 DelegateExternalLinks, |
|
190 DelegateAllLinks |
|
191 }; |
|
192 |
|
193 enum WebWindowType { |
|
194 WebBrowserWindow, |
|
195 WebModalDialog |
|
196 }; |
|
197 |
|
198 enum PermissionPolicy { |
|
199 PermissionGranted, |
|
200 PermissionUnknown, |
|
201 PermissionDenied |
|
202 }; |
|
203 |
|
204 enum PermissionDomain { |
|
205 NotificationsPermissionDomain |
|
206 }; |
|
207 |
|
208 class ViewportHints { |
|
209 public: |
|
210 ViewportHints(); |
|
211 ViewportHints(const QWebPage::ViewportHints& other); |
|
212 |
|
213 ~ViewportHints(); |
|
214 |
|
215 QWebPage::ViewportHints& operator=(const QWebPage::ViewportHints& other); |
|
216 |
|
217 inline qreal initialScaleFactor() const { return m_initialScaleFactor; }; |
|
218 inline qreal minimumScaleFactor() const { return m_minimumScaleFactor; }; |
|
219 inline qreal maximumScaleFactor() const { return m_maximumScaleFactor; }; |
|
220 inline bool isUserScalable() const { return m_isUserScalable; }; |
|
221 inline bool isValid() const { return m_isValid; }; |
|
222 inline QSize size() const { return m_size; }; |
|
223 |
|
224 private: |
|
225 QSharedDataPointer<QtViewportHintsPrivate> d; |
|
226 qreal m_initialScaleFactor; |
|
227 qreal m_minimumScaleFactor; |
|
228 qreal m_maximumScaleFactor; |
|
229 bool m_isUserScalable; |
|
230 bool m_isValid; |
|
231 QSize m_size; |
|
232 |
|
233 friend class WebCore::ChromeClientQt; |
|
234 }; |
|
235 |
|
236 |
|
237 explicit QWebPage(QObject *parent = 0); |
|
238 ~QWebPage(); |
|
239 |
|
240 QWebFrame *mainFrame() const; |
|
241 QWebFrame *currentFrame() const; |
|
242 QWebFrame* frameAt(const QPoint& pos) const; |
|
243 |
|
244 QWebHistory *history() const; |
|
245 QWebSettings *settings() const; |
|
246 |
|
247 void setView(QWidget *view); |
|
248 QWidget *view() const; |
|
249 |
|
250 bool isModified() const; |
|
251 #ifndef QT_NO_UNDOSTACK |
|
252 QUndoStack *undoStack() const; |
|
253 #endif |
|
254 |
|
255 void setNetworkAccessManager(QNetworkAccessManager *manager); |
|
256 QNetworkAccessManager *networkAccessManager() const; |
|
257 |
|
258 void setPluginFactory(QWebPluginFactory *factory); |
|
259 QWebPluginFactory *pluginFactory() const; |
|
260 |
|
261 quint64 totalBytes() const; |
|
262 quint64 bytesReceived() const; |
|
263 |
|
264 QString selectedText() const; |
|
265 |
|
266 #ifndef QT_NO_ACTION |
|
267 QAction *action(WebAction action) const; |
|
268 #endif |
|
269 virtual void triggerAction(WebAction action, bool checked = false); |
|
270 |
|
271 QSize viewportSize() const; |
|
272 void setViewportSize(const QSize &size) const; |
|
273 |
|
274 QSize preferredContentsSize() const; |
|
275 void setPreferredContentsSize(const QSize &size) const; |
|
276 |
|
277 virtual bool event(QEvent*); |
|
278 bool focusNextPrevChild(bool next); |
|
279 |
|
280 QVariant inputMethodQuery(Qt::InputMethodQuery property) const; |
|
281 |
|
282 bool findText(const QString &subString, FindFlags options = 0); |
|
283 |
|
284 void setForwardUnsupportedContent(bool forward); |
|
285 bool forwardUnsupportedContent() const; |
|
286 |
|
287 void setLinkDelegationPolicy(LinkDelegationPolicy policy); |
|
288 LinkDelegationPolicy linkDelegationPolicy() const; |
|
289 |
|
290 void setPalette(const QPalette &palette); |
|
291 QPalette palette() const; |
|
292 |
|
293 void setContentEditable(bool editable); |
|
294 bool isContentEditable() const; |
|
295 |
|
296 #ifndef QT_NO_CONTEXTMENU |
|
297 bool swallowContextMenuEvent(QContextMenuEvent *event); |
|
298 #endif |
|
299 void updatePositionDependentActions(const QPoint &pos); |
|
300 |
|
301 QMenu *createStandardContextMenu(); |
|
302 |
|
303 void setUserPermission(QWebFrame* frame, PermissionDomain domain, PermissionPolicy policy); |
|
304 |
|
305 enum Extension { |
|
306 ChooseMultipleFilesExtension, |
|
307 ErrorPageExtension |
|
308 }; |
|
309 class ExtensionOption |
|
310 {}; |
|
311 class ExtensionReturn |
|
312 {}; |
|
313 |
|
314 class ChooseMultipleFilesExtensionOption : public ExtensionOption { |
|
315 public: |
|
316 QWebFrame *parentFrame; |
|
317 QStringList suggestedFileNames; |
|
318 }; |
|
319 |
|
320 class ChooseMultipleFilesExtensionReturn : public ExtensionReturn { |
|
321 public: |
|
322 QStringList fileNames; |
|
323 }; |
|
324 |
|
325 enum ErrorDomain { QtNetwork, Http, WebKit }; |
|
326 class ErrorPageExtensionOption : public ExtensionOption { |
|
327 public: |
|
328 QUrl url; |
|
329 QWebFrame* frame; |
|
330 ErrorDomain domain; |
|
331 int error; |
|
332 QString errorString; |
|
333 }; |
|
334 |
|
335 class ErrorPageExtensionReturn : public ExtensionReturn { |
|
336 public: |
|
337 ErrorPageExtensionReturn() : contentType(QLatin1String("text/html")), encoding(QLatin1String("utf-8")) {}; |
|
338 QString contentType; |
|
339 QString encoding; |
|
340 QUrl baseUrl; |
|
341 QByteArray content; |
|
342 }; |
|
343 |
|
344 |
|
345 virtual bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0); |
|
346 virtual bool supportsExtension(Extension extension) const; |
|
347 |
|
348 inline QWebPagePrivate* handle() const { return d; } |
|
349 |
|
350 public Q_SLOTS: |
|
351 bool shouldInterruptJavaScript(); |
|
352 bool allowGeolocationRequest(QWebFrame *frame); |
|
353 |
|
354 Q_SIGNALS: |
|
355 void loadStarted(); |
|
356 void loadProgress(int progress); |
|
357 void loadFinished(bool ok); |
|
358 |
|
359 void linkHovered(const QString &link, const QString &title, const QString &textContent); |
|
360 void statusBarMessage(const QString& text); |
|
361 void selectionChanged(); |
|
362 void frameCreated(QWebFrame *frame); |
|
363 void geometryChangeRequested(const QRect& geom); |
|
364 void repaintRequested(const QRect& dirtyRect); |
|
365 void scrollRequested(int dx, int dy, const QRect& scrollViewRect); |
|
366 void windowCloseRequested(); |
|
367 void printRequested(QWebFrame *frame); |
|
368 void linkClicked(const QUrl &url); |
|
369 |
|
370 void toolBarVisibilityChangeRequested(bool visible); |
|
371 void statusBarVisibilityChangeRequested(bool visible); |
|
372 void menuBarVisibilityChangeRequested(bool visible); |
|
373 |
|
374 void unsupportedContent(QNetworkReply *reply); |
|
375 void downloadRequested(const QNetworkRequest &request); |
|
376 |
|
377 void microFocusChanged(); |
|
378 void contentsChanged(); |
|
379 void databaseQuotaExceeded(QWebFrame* frame, QString databaseName); |
|
380 |
|
381 void saveFrameStateRequested(QWebFrame* frame, QWebHistoryItem* item); |
|
382 void restoreFrameStateRequested(QWebFrame* frame); |
|
383 |
|
384 void viewportChangeRequested(const QWebPage::ViewportHints& hints); |
|
385 |
|
386 void requestPermissionFromUser(QWebFrame* frame, QWebPage::PermissionDomain domain); |
|
387 void checkPermissionFromUser(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy); |
|
388 void cancelRequestsForPermission(QWebFrame* frame, QWebPage::PermissionDomain domain); |
|
389 |
|
390 protected: |
|
391 virtual QWebPage *createWindow(WebWindowType type); |
|
392 virtual QObject *createPlugin(const QString &classid, const QUrl &url, const QStringList ¶mNames, const QStringList ¶mValues); |
|
393 |
|
394 virtual bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type); |
|
395 virtual QString chooseFile(QWebFrame *originatingFrame, const QString& oldFile); |
|
396 virtual void javaScriptAlert(QWebFrame *originatingFrame, const QString& msg); |
|
397 virtual bool javaScriptConfirm(QWebFrame *originatingFrame, const QString& msg); |
|
398 virtual bool javaScriptPrompt(QWebFrame *originatingFrame, const QString& msg, const QString& defaultValue, QString* result); |
|
399 virtual void javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID); |
|
400 |
|
401 virtual QString userAgentForUrl(const QUrl& url) const; |
|
402 |
|
403 private: |
|
404 Q_PRIVATE_SLOT(d, void _q_onLoadProgressChanged(int)) |
|
405 #ifndef QT_NO_ACTION |
|
406 Q_PRIVATE_SLOT(d, void _q_webActionTriggered(bool checked)) |
|
407 #endif |
|
408 Q_PRIVATE_SLOT(d, void _q_cleanupLeakMessages()) |
|
409 |
|
410 QWebPagePrivate *d; |
|
411 |
|
412 friend class QWebFrame; |
|
413 friend class QWebPagePrivate; |
|
414 friend class QWebView; |
|
415 friend class QWebViewPrivate; |
|
416 friend class QGraphicsWebView; |
|
417 friend class QGraphicsWebViewPrivate; |
|
418 friend class QWebInspector; |
|
419 friend class WebCore::ChromeClientQt; |
|
420 friend class WebCore::EditorClientQt; |
|
421 friend class WebCore::FrameLoaderClientQt; |
|
422 friend class WebCore::InspectorClientQt; |
|
423 friend class WebCore::InspectorFrontendClientQt; |
|
424 friend class WebCore::NotificationPresenterClientQt; |
|
425 friend class WebCore::ResourceHandle; |
|
426 friend class WebCore::QNetworkReplyHandler; |
|
427 friend class DumpRenderTreeSupportQt; |
|
428 }; |
|
429 |
|
430 Q_DECLARE_OPERATORS_FOR_FLAGS(QWebPage::FindFlags) |
|
431 |
|
432 #endif |