1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the QtWebEngine module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39 
40 #ifndef QQUICKWEBENGINEVIEW_P_H
41 #define QQUICKWEBENGINEVIEW_P_H
42 
43 //
44 //  W A R N I N G
45 //  -------------
46 //
47 // This file is not part of the Qt API.  It exists purely as an
48 // implementation detail.  This header file may change from version to
49 // version without notice, or even be removed.
50 //
51 // We mean it.
52 //
53 
54 #include <QtWebEngine/private/qtwebengineglobal_p.h>
55 #include <QQuickItem>
56 #include <QtGui/qcolor.h>
57 
58 #include "qquickwebenginescript.h"
59 
60 QT_BEGIN_NAMESPACE
61 
62 class QQmlWebChannel;
63 class QQuickContextMenuBuilder;
64 class QQuickWebEngineAction;
65 class QQuickWebEngineAuthenticationDialogRequest;
66 class QQuickWebEngineCertificateError;
67 class QQuickWebEngineClientCertificateSelection;
68 class QQuickWebEngineColorDialogRequest;
69 class QQuickWebEngineContextMenuRequest;
70 class QQuickWebEngineFaviconProvider;
71 class QQuickWebEngineFileDialogRequest;
72 class QQuickWebEngineHistory;
73 class QQuickWebEngineJavaScriptDialogRequest;
74 class QQuickWebEngineLoadRequest;
75 class QQuickWebEngineNavigationRequest;
76 class QQuickWebEngineNewViewRequest;
77 class QQuickWebEngineProfile;
78 class QQuickWebEngineSettings;
79 class QQuickWebEngineTooltipRequest;
80 class QQuickWebEngineFormValidationMessageRequest;
81 class QQuickWebEngineViewPrivate;
82 class QWebEngineFindTextResult;
83 class QWebEngineQuotaRequest;
84 class QWebEngineRegisterProtocolHandlerRequest;
85 
86 #if QT_CONFIG(webengine_testsupport)
87 class QQuickWebEngineTestSupport;
88 #endif
89 
90 class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineFullScreenRequest {
91     Q_GADGET
92     Q_PROPERTY(QUrl origin READ origin CONSTANT FINAL)
93     Q_PROPERTY(bool toggleOn READ toggleOn CONSTANT FINAL)
94 public:
95     QQuickWebEngineFullScreenRequest();
96     QQuickWebEngineFullScreenRequest(QQuickWebEngineViewPrivate *viewPrivate, const QUrl &origin, bool toggleOn);
97 
98     Q_INVOKABLE void accept();
99     Q_INVOKABLE void reject();
origin()100     QUrl origin() const { return m_origin; }
toggleOn()101     bool toggleOn() const { return m_toggleOn; }
102 
103 private:
104     QQuickWebEngineViewPrivate *m_viewPrivate;
105     const QUrl m_origin;
106     const bool m_toggleOn;
107 };
108 
109 #define LATEST_WEBENGINEVIEW_REVISION 10
110 
111 class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineView : public QQuickItem {
112     Q_OBJECT
113     Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
114     Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged FINAL)
115     Q_PROPERTY(QUrl icon READ icon NOTIFY iconChanged FINAL)
116     Q_PROPERTY(bool loading READ isLoading NOTIFY loadingChanged FINAL)
117     Q_PROPERTY(int loadProgress READ loadProgress NOTIFY loadProgressChanged FINAL)
118     Q_PROPERTY(QString title READ title NOTIFY titleChanged FINAL)
119     Q_PROPERTY(bool canGoBack READ canGoBack NOTIFY urlChanged FINAL)
120     Q_PROPERTY(bool canGoForward READ canGoForward NOTIFY urlChanged FINAL)
121     Q_PROPERTY(bool isFullScreen READ isFullScreen NOTIFY isFullScreenChanged REVISION 1 FINAL)
122     Q_PROPERTY(qreal zoomFactor READ zoomFactor WRITE setZoomFactor NOTIFY zoomFactorChanged REVISION 1 FINAL)
123     Q_PROPERTY(QQuickWebEngineProfile *profile READ profile WRITE setProfile NOTIFY profileChanged FINAL REVISION 1)
124     Q_PROPERTY(QQuickWebEngineSettings *settings READ settings REVISION 1 CONSTANT FINAL)
125     Q_PROPERTY(QQuickWebEngineHistory *navigationHistory READ navigationHistory CONSTANT FINAL REVISION 1)
126     Q_PROPERTY(QQmlWebChannel *webChannel READ webChannel WRITE setWebChannel NOTIFY webChannelChanged REVISION 1 FINAL)
127     Q_PROPERTY(QQmlListProperty<QQuickWebEngineScript> userScripts READ userScripts FINAL REVISION 1)
128     Q_PROPERTY(bool activeFocusOnPress READ activeFocusOnPress WRITE setActiveFocusOnPress NOTIFY activeFocusOnPressChanged REVISION 2 FINAL)
129     Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor NOTIFY backgroundColorChanged REVISION 2 FINAL)
130     Q_PROPERTY(QSizeF contentsSize READ contentsSize NOTIFY contentsSizeChanged FINAL REVISION 3)
131     Q_PROPERTY(QPointF scrollPosition READ scrollPosition NOTIFY scrollPositionChanged FINAL REVISION 3)
132     Q_PROPERTY(bool audioMuted READ isAudioMuted WRITE setAudioMuted NOTIFY audioMutedChanged FINAL REVISION 3)
133     Q_PROPERTY(bool recentlyAudible READ recentlyAudible NOTIFY recentlyAudibleChanged FINAL REVISION 3)
134     Q_PROPERTY(uint webChannelWorld READ webChannelWorld WRITE setWebChannelWorld NOTIFY webChannelWorldChanged REVISION 3 FINAL)
135 
136     Q_PROPERTY(QQuickWebEngineView *inspectedView READ inspectedView WRITE setInspectedView NOTIFY inspectedViewChanged REVISION 7 FINAL)
137     Q_PROPERTY(QQuickWebEngineView *devToolsView READ devToolsView WRITE setDevToolsView NOTIFY devToolsViewChanged REVISION 7 FINAL)
138 #if QT_CONFIG(webengine_testsupport)
139     Q_PROPERTY(QQuickWebEngineTestSupport *testSupport READ testSupport WRITE setTestSupport NOTIFY testSupportChanged FINAL)
140 #endif
141 
142     Q_PROPERTY(LifecycleState lifecycleState READ lifecycleState WRITE setLifecycleState NOTIFY lifecycleStateChanged REVISION 10 FINAL)
143     Q_PROPERTY(LifecycleState recommendedState READ recommendedState NOTIFY recommendedStateChanged REVISION 10 FINAL)
144 
145     Q_PROPERTY(qint64 renderProcessPid READ renderProcessPid NOTIFY renderProcessPidChanged FINAL REVISION 11)
146 
147 public:
148     QQuickWebEngineView(QQuickItem *parent = 0);
149     ~QQuickWebEngineView();
150 
151     QUrl url() const;
152     void setUrl(const QUrl&);
153     QUrl icon() const;
154     bool isLoading() const;
155     int loadProgress() const;
156     QString title() const;
157     bool canGoBack() const;
158     bool canGoForward() const;
159     bool isFullScreen() const;
160     qreal zoomFactor() const;
161     void setZoomFactor(qreal arg);
162     QColor backgroundColor() const;
163     void setBackgroundColor(const QColor &color);
164     QSizeF contentsSize() const;
165     QPointF scrollPosition() const;
166 
167     // must match WebContentsAdapterClient::NavigationRequestAction
168     enum NavigationRequestAction {
169         AcceptRequest,
170         // Make room in the valid range of the enum so
171         // we can expose extra actions.
172         IgnoreRequest = 0xFF
173     };
174     Q_ENUM(NavigationRequestAction)
175 
176     // must match WebContentsAdapterClient::NavigationType
177     enum NavigationType {
178         LinkClickedNavigation,
179         TypedNavigation,
180         FormSubmittedNavigation,
181         BackForwardNavigation,
182         ReloadNavigation,
183         OtherNavigation,
184         RedirectNavigation,
185     };
186     Q_ENUM(NavigationType)
187 
188     enum LoadStatus {
189         LoadStartedStatus,
190         LoadStoppedStatus,
191         LoadSucceededStatus,
192         LoadFailedStatus
193     };
194     Q_ENUM(LoadStatus)
195 
196     enum ErrorDomain {
197          NoErrorDomain,
198          InternalErrorDomain,
199          ConnectionErrorDomain,
200          CertificateErrorDomain,
201          HttpErrorDomain,
202          FtpErrorDomain,
203          DnsErrorDomain
204     };
205     Q_ENUM(ErrorDomain)
206 
207     enum NewViewDestination {
208         NewViewInWindow,
209         NewViewInTab,
210         NewViewInDialog,
211         NewViewInBackgroundTab
212     };
213     Q_ENUM(NewViewDestination)
214 
215     enum Feature {
216         MediaAudioCapture,
217         MediaVideoCapture,
218         MediaAudioVideoCapture,
219         Geolocation,
220         DesktopVideoCapture,
221         DesktopAudioVideoCapture,
222         Notifications,
223     };
224     Q_ENUM(Feature)
225 
226     enum WebAction {
227         NoWebAction = - 1,
228         Back,
229         Forward,
230         Stop,
231         Reload,
232 
233         Cut,
234         Copy,
235         Paste,
236 
237         Undo,
238         Redo,
239         SelectAll,
240         ReloadAndBypassCache,
241 
242         PasteAndMatchStyle,
243 
244         OpenLinkInThisWindow,
245         OpenLinkInNewWindow,
246         OpenLinkInNewTab,
247         CopyLinkToClipboard,
248         DownloadLinkToDisk,
249 
250         CopyImageToClipboard,
251         CopyImageUrlToClipboard,
252         DownloadImageToDisk,
253 
254         CopyMediaUrlToClipboard,
255         ToggleMediaControls,
256         ToggleMediaLoop,
257         ToggleMediaPlayPause,
258         ToggleMediaMute,
259         DownloadMediaToDisk,
260 
261         InspectElement,
262         ExitFullScreen,
263         RequestClose,
264         Unselect,
265         SavePage,
266         ViewSource,
267 
268         ToggleBold,
269         ToggleItalic,
270         ToggleUnderline,
271         ToggleStrikethrough,
272 
273         AlignLeft,
274         AlignCenter,
275         AlignRight,
276         AlignJustified,
277         Indent,
278         Outdent,
279 
280         InsertOrderedList,
281         InsertUnorderedList,
282 
283         WebActionCount
284     };
285     Q_ENUM(WebAction)
286 
287     // must match WebContentsAdapterClient::JavaScriptConsoleMessageLevel
288     enum JavaScriptConsoleMessageLevel {
289         InfoMessageLevel = 0,
290         WarningMessageLevel,
291         ErrorMessageLevel
292     };
293     Q_ENUM(JavaScriptConsoleMessageLevel)
294 
295     // must match WebContentsAdapterClient::RenderProcessTerminationStatus
296     enum RenderProcessTerminationStatus {
297         NormalTerminationStatus = 0,
298         AbnormalTerminationStatus,
299         CrashedTerminationStatus,
300         KilledTerminationStatus
301     };
302     Q_ENUM(RenderProcessTerminationStatus)
303 
304     enum FindFlag {
305         FindBackward = 1,
306         FindCaseSensitively = 2,
307     };
308     Q_DECLARE_FLAGS(FindFlags, FindFlag)
309     Q_FLAG(FindFlags)
310 
311     // must match QPageSize::PageSizeId
312     enum PrintedPageSizeId {
313         // Existing Qt sizes
314         A4,
315         B5,
316         Letter,
317         Legal,
318         Executive,
319         A0,
320         A1,
321         A2,
322         A3,
323         A5,
324         A6,
325         A7,
326         A8,
327         A9,
328         B0,
329         B1,
330         B10,
331         B2,
332         B3,
333         B4,
334         B6,
335         B7,
336         B8,
337         B9,
338         C5E,
339         Comm10E,
340         DLE,
341         Folio,
342         Ledger,
343         Tabloid,
344         Custom,
345 
346         // New values derived from PPD standard
347         A10,
348         A3Extra,
349         A4Extra,
350         A4Plus,
351         A4Small,
352         A5Extra,
353         B5Extra,
354 
355         JisB0,
356         JisB1,
357         JisB2,
358         JisB3,
359         JisB4,
360         JisB5,
361         JisB6,
362         JisB7,
363         JisB8,
364         JisB9,
365         JisB10,
366 
367         // AnsiA = Letter,
368         // AnsiB = Ledger,
369         AnsiC,
370         AnsiD,
371         AnsiE,
372         LegalExtra,
373         LetterExtra,
374         LetterPlus,
375         LetterSmall,
376         TabloidExtra,
377 
378         ArchA,
379         ArchB,
380         ArchC,
381         ArchD,
382         ArchE,
383 
384         Imperial7x9,
385         Imperial8x10,
386         Imperial9x11,
387         Imperial9x12,
388         Imperial10x11,
389         Imperial10x13,
390         Imperial10x14,
391         Imperial12x11,
392         Imperial15x11,
393 
394         ExecutiveStandard,
395         Note,
396         Quarto,
397         Statement,
398         SuperA,
399         SuperB,
400         Postcard,
401         DoublePostcard,
402         Prc16K,
403         Prc32K,
404         Prc32KBig,
405 
406         FanFoldUS,
407         FanFoldGerman,
408         FanFoldGermanLegal,
409 
410         EnvelopeB4,
411         EnvelopeB5,
412         EnvelopeB6,
413         EnvelopeC0,
414         EnvelopeC1,
415         EnvelopeC2,
416         EnvelopeC3,
417         EnvelopeC4,
418         // EnvelopeC5 = C5E,
419         EnvelopeC6,
420         EnvelopeC65,
421         EnvelopeC7,
422         // EnvelopeDL = DLE,
423 
424         Envelope9,
425         // Envelope10 = Comm10E,
426         Envelope11,
427         Envelope12,
428         Envelope14,
429         EnvelopeMonarch,
430         EnvelopePersonal,
431 
432         EnvelopeChou3,
433         EnvelopeChou4,
434         EnvelopeInvite,
435         EnvelopeItalian,
436         EnvelopeKaku2,
437         EnvelopeKaku3,
438         EnvelopePrc1,
439         EnvelopePrc2,
440         EnvelopePrc3,
441         EnvelopePrc4,
442         EnvelopePrc5,
443         EnvelopePrc6,
444         EnvelopePrc7,
445         EnvelopePrc8,
446         EnvelopePrc9,
447         EnvelopePrc10,
448         EnvelopeYou4,
449 
450         // Last item, with commonly used synynoms from QPagedPrintEngine / QPrinter
451         LastPageSize = EnvelopeYou4,
452         NPageSize = LastPageSize,
453         NPaperSize = LastPageSize,
454 
455         // Convenience overloads for naming consistency
456         AnsiA = Letter,
457         AnsiB = Ledger,
458         EnvelopeC5 = C5E,
459         EnvelopeDL = DLE,
460         Envelope10 = Comm10E
461     };
462     Q_ENUM(PrintedPageSizeId)
463 
464     // must match QPageLayout::Orientation
465     enum PrintedPageOrientation {
466         Portrait,
467         Landscape
468     };
469     Q_ENUM(PrintedPageOrientation)
470 
471     // must match WebContentsAdapterClient::LifecycleState
472     enum class LifecycleState {
473         Active,
474         Frozen,
475         Discarded,
476     };
477     Q_ENUM(LifecycleState)
478 
479     // QmlParserStatus
480     void componentComplete() override;
481 
482     QQuickWebEngineProfile *profile();
483     void setProfile(QQuickWebEngineProfile *);
484     QQmlListProperty<QQuickWebEngineScript> userScripts();
485 
486     QQuickWebEngineSettings *settings();
487     QQmlWebChannel *webChannel();
488     void setWebChannel(QQmlWebChannel *);
489     QQuickWebEngineHistory *navigationHistory() const;
490     uint webChannelWorld() const;
491     void setWebChannelWorld(uint);
492     Q_REVISION(8) Q_INVOKABLE QQuickWebEngineAction *action(WebAction action);
493 
494     bool isAudioMuted() const;
495     void setAudioMuted(bool muted);
496     bool recentlyAudible() const;
497 
498     qint64 renderProcessPid() const;
499 
500 #if QT_CONFIG(webengine_testsupport)
501     QQuickWebEngineTestSupport *testSupport() const;
502     void setTestSupport(QQuickWebEngineTestSupport *testSupport);
503 #endif
504 
505     bool activeFocusOnPress() const;
506 
507     void setInspectedView(QQuickWebEngineView *);
508     QQuickWebEngineView *inspectedView() const;
509     void setDevToolsView(QQuickWebEngineView *);
510     QQuickWebEngineView *devToolsView() const;
511 
512     LifecycleState lifecycleState() const;
513     void setLifecycleState(LifecycleState state);
514 
515     LifecycleState recommendedState() const;
516 
517 public Q_SLOTS:
518     void runJavaScript(const QString&, const QJSValue & = QJSValue());
519     Q_REVISION(3) void runJavaScript(const QString&, quint32 worldId, const QJSValue & = QJSValue());
520     void loadHtml(const QString &html, const QUrl &baseUrl = QUrl());
521     void goBack();
522     void goForward();
523     Q_REVISION(1) void goBackOrForward(int index);
524     void reload();
525     Q_REVISION(1) void reloadAndBypassCache();
526     void stop();
527     Q_REVISION(1) void findText(const QString &subString, FindFlags options = { }, const QJSValue &callback = QJSValue());
528     Q_REVISION(1) void fullScreenCancelled();
529     Q_REVISION(1) void grantFeaturePermission(const QUrl &securityOrigin, Feature, bool granted);
530     Q_REVISION(2) void setActiveFocusOnPress(bool arg);
531     Q_REVISION(2) void triggerWebAction(WebAction action);
532     Q_REVISION(3) void printToPdf(const QString &filePath, PrintedPageSizeId pageSizeId = PrintedPageSizeId::A4, PrintedPageOrientation orientation = PrintedPageOrientation::Portrait);
533     Q_REVISION(3) void printToPdf(const QJSValue &callback, PrintedPageSizeId pageSizeId = PrintedPageSizeId::A4, PrintedPageOrientation orientation = PrintedPageOrientation::Portrait);
534     Q_REVISION(4) void replaceMisspelledWord(const QString &replacement);
535 
536 private Q_SLOTS:
537     void lazyInitialize();
538 
539 Q_SIGNALS:
540     void titleChanged();
541     void urlChanged();
542     void iconChanged();
543     void loadingChanged(QQuickWebEngineLoadRequest *loadRequest);
544     void loadProgressChanged();
545     void linkHovered(const QUrl &hoveredUrl);
546     void navigationRequested(QQuickWebEngineNavigationRequest *request);
547     void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString &message, int lineNumber, const QString &sourceID);
548     Q_REVISION(1) void certificateError(QQuickWebEngineCertificateError *error);
549     Q_REVISION(1) void fullScreenRequested(const QQuickWebEngineFullScreenRequest &request);
550     Q_REVISION(1) void isFullScreenChanged();
551     Q_REVISION(1) void featurePermissionRequested(const QUrl &securityOrigin, Feature feature);
552     Q_REVISION(1) void newViewRequested(QQuickWebEngineNewViewRequest *request);
553     Q_REVISION(1) void zoomFactorChanged(qreal arg);
554     Q_REVISION(1) void profileChanged();
555     Q_REVISION(1) void webChannelChanged();
556     Q_REVISION(2) void activeFocusOnPressChanged(bool);
557     Q_REVISION(2) void backgroundColorChanged();
558     Q_REVISION(2) void renderProcessTerminated(RenderProcessTerminationStatus terminationStatus, int exitCode);
559     Q_REVISION(2) void windowCloseRequested();
560     Q_REVISION(3) void contentsSizeChanged(const QSizeF& size);
561     Q_REVISION(3) void scrollPositionChanged(const QPointF& position);
562     Q_REVISION(3) void audioMutedChanged(bool muted);
563     Q_REVISION(3) void recentlyAudibleChanged(bool recentlyAudible);
564     Q_REVISION(3) void webChannelWorldChanged(uint);
565     Q_REVISION(4) void contextMenuRequested(QQuickWebEngineContextMenuRequest *request);
566     Q_REVISION(4) void authenticationDialogRequested(QQuickWebEngineAuthenticationDialogRequest *request);
567     Q_REVISION(4) void javaScriptDialogRequested(QQuickWebEngineJavaScriptDialogRequest *request);
568     Q_REVISION(4) void colorDialogRequested(QQuickWebEngineColorDialogRequest *request);
569     Q_REVISION(4) void fileDialogRequested(QQuickWebEngineFileDialogRequest *request);
570     Q_REVISION(4) void formValidationMessageRequested(QQuickWebEngineFormValidationMessageRequest *request);
571     Q_REVISION(5) void pdfPrintingFinished(const QString &filePath, bool success);
572     Q_REVISION(7) void quotaRequested(const QWebEngineQuotaRequest &request);
573     Q_REVISION(7) void geometryChangeRequested(const QRect &geometry, const QRect &frameGeometry);
574     Q_REVISION(7) void inspectedViewChanged();
575     Q_REVISION(7) void devToolsViewChanged();
576     Q_REVISION(7) void registerProtocolHandlerRequested(const QWebEngineRegisterProtocolHandlerRequest &request);
577     Q_REVISION(8) void printRequested();
578     Q_REVISION(9) void selectClientCertificate(QQuickWebEngineClientCertificateSelection *clientCertSelection);
579     Q_REVISION(10) void tooltipRequested(QQuickWebEngineTooltipRequest *request);
580     Q_REVISION(10) void lifecycleStateChanged(LifecycleState state);
581     Q_REVISION(10) void recommendedStateChanged(LifecycleState state);
582     Q_REVISION(10) void findTextFinished(const QWebEngineFindTextResult &result);
583     Q_REVISION(11) void renderProcessPidChanged(qint64 pid);
584 
585 #if QT_CONFIG(webengine_testsupport)
586     void testSupportChanged();
587 #endif
588 
589 protected:
590     void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override;
591     void itemChange(ItemChange, const ItemChangeData &) override;
592 #if QT_CONFIG(draganddrop)
593     void dragEnterEvent(QDragEnterEvent *e) override;
594     void dragLeaveEvent(QDragLeaveEvent *e) override;
595     void dragMoveEvent(QDragMoveEvent *e) override;
596     void dropEvent(QDropEvent *e) override;
597 #endif // QT_CONFIG(draganddrop)
598 
599 private:
600     Q_DECLARE_PRIVATE(QQuickWebEngineView)
601     QScopedPointer<QQuickWebEngineViewPrivate> d_ptr;
602 
603     friend class QQuickContextMenuBuilder;
604     friend class QQuickWebEngineNewViewRequest;
605     friend class QQuickWebEngineFaviconProvider;
606 #ifndef QT_NO_ACCESSIBILITY
607     friend class QQuickWebEngineViewAccessible;
608 #endif // QT_NO_ACCESSIBILITY
609 };
610 
611 QT_END_NAMESPACE
612 
613 QML_DECLARE_TYPE(QQuickWebEngineView)
614 Q_DECLARE_METATYPE(QQuickWebEngineFullScreenRequest)
615 
616 #endif // QQUICKWEBENGINEVIEW_P_H
617