diff options
Diffstat (limited to 'src/webengine')
18 files changed, 569 insertions, 167 deletions
diff --git a/src/webengine/api/qquickwebenginedownloaditem.cpp b/src/webengine/api/qquickwebenginedownloaditem.cpp index 5afb19531..8d7550d6c 100644 --- a/src/webengine/api/qquickwebenginedownloaditem.cpp +++ b/src/webengine/api/qquickwebenginedownloaditem.cpp @@ -101,7 +101,7 @@ QQuickWebEngineDownloadItemPrivate::QQuickWebEngineDownloadItemPrivate(QQuickWeb , downloadId(-1) , downloadState(QQuickWebEngineDownloadItem::DownloadCancelled) , savePageFormat(QQuickWebEngineDownloadItem::UnknownSaveFormat) - , type(QQuickWebEngineDownloadItem::Attachment) + , isSavePageDownload(false) , interruptReason(QQuickWebEngineDownloadItem::NoReason) , totalBytes(-1) , receivedBytes(0) @@ -397,26 +397,33 @@ void QQuickWebEngineDownloadItem::setSavePageFormat(QQuickWebEngineDownloadItem: \qmlproperty enumeration WebEngineDownloadItem::type \readonly \since QtWebEngine 1.4 + \obsolete Describes the requested download's type. - \value WebEngineDownloadItem.Attachment The web server's response includes a - \c Content-Disposition header with the \c attachment directive. If \c Content-Disposition - is present in the reply, the web server is indicating that the client should prompt the - user to save the content regardless of the content type. - See \l {RFC 2616 section 19.5.1} for details. - \value WebEngineDownloadItem.DownloadAttribute The user clicked a link with the \c download - attribute. See \l {HTML download attribute} for details. - \value WebEngineDownloadItem.UserRequested The user initiated the download, for example by - selecting a web action. - \value WebEngineDownloadItem.SavePage Saving of the current page was requested (for example by - the \l{WebEngineView::WebAction}{WebEngineView.SavePage} web action). + Unfortunately, this property only ever worked correctly for \c SavePage + downloads. In other cases, it followed the documented semantics rather + loosely, sometimes non-deterministically. Use \l isSavePageDownload instead. */ QQuickWebEngineDownloadItem::DownloadType QQuickWebEngineDownloadItem::type() const { + return isSavePageDownload() ? SavePage : UserRequested; +} + +/*! + \qmlproperty bool WebEngineDownloadItem::isSavePageDownload + \readonly + \since QtWebEngine 1.7 + + Whether this is a download request for saving a web page or a file. + + \sa savePageFormat +*/ +bool QQuickWebEngineDownloadItem::isSavePageDownload() const +{ Q_D(const QQuickWebEngineDownloadItem); - return d->type; + return d->isSavePageDownload; } /*! diff --git a/src/webengine/api/qquickwebenginedownloaditem_p.h b/src/webengine/api/qquickwebenginedownloaditem_p.h index 972b130aa..1699ee9dc 100644 --- a/src/webengine/api/qquickwebenginedownloaditem_p.h +++ b/src/webengine/api/qquickwebenginedownloaditem_p.h @@ -133,6 +133,7 @@ public: Q_PROPERTY(QString interruptReasonString READ interruptReasonString NOTIFY interruptReasonChanged REVISION 4 FINAL) Q_PROPERTY(bool isFinished READ isFinished NOTIFY isFinishedChanged REVISION 5 FINAL) Q_PROPERTY(bool isPaused READ isPaused NOTIFY isPausedChanged REVISION 5 FINAL) + Q_PROPERTY(bool isSavePageDownload READ isSavePageDownload CONSTANT REVISION 6 FINAL) Q_INVOKABLE void accept(); Q_INVOKABLE void cancel(); @@ -148,11 +149,12 @@ public: void setPath(QString path); SavePageFormat savePageFormat() const; void setSavePageFormat(SavePageFormat format); - DownloadType type() const; + DownloadType Q_DECL_DEPRECATED type() const; DownloadInterruptReason interruptReason() const; QString interruptReasonString() const; bool isFinished() const; bool isPaused() const; + bool isSavePageDownload() const; Q_SIGNALS: void stateChanged(); diff --git a/src/webengine/api/qquickwebenginedownloaditem_p_p.h b/src/webengine/api/qquickwebenginedownloaditem_p_p.h index 6b4f7c8d3..922b0379c 100644 --- a/src/webengine/api/qquickwebenginedownloaditem_p_p.h +++ b/src/webengine/api/qquickwebenginedownloaditem_p_p.h @@ -73,7 +73,7 @@ public: quint32 downloadId; QQuickWebEngineDownloadItem::DownloadState downloadState; QQuickWebEngineDownloadItem::SavePageFormat savePageFormat; - QQuickWebEngineDownloadItem::DownloadType type; + bool isSavePageDownload; QQuickWebEngineDownloadItem::DownloadInterruptReason interruptReason; qint64 totalBytes; qint64 receivedBytes; diff --git a/src/webengine/api/qquickwebengineprofile.cpp b/src/webengine/api/qquickwebengineprofile.cpp index 7f591efe3..728f0b4a4 100644 --- a/src/webengine/api/qquickwebengineprofile.cpp +++ b/src/webengine/api/qquickwebengineprofile.cpp @@ -192,7 +192,7 @@ void QQuickWebEngineProfilePrivate::downloadRequested(DownloadItemInfo &info) itemPrivate->downloadPath = info.path; itemPrivate->savePageFormat = static_cast<QQuickWebEngineDownloadItem::SavePageFormat>( info.savePageFormat); - itemPrivate->type = static_cast<QQuickWebEngineDownloadItem::DownloadType>(info.downloadType); + itemPrivate->isSavePageDownload = info.isSavePageDownload; QQuickWebEngineDownloadItem *download = new QQuickWebEngineDownloadItem(itemPrivate, q); diff --git a/src/webengine/api/qquickwebengineprofile_p.h b/src/webengine/api/qquickwebengineprofile_p.h index 660433fd9..61968bf77 100644 --- a/src/webengine/api/qquickwebengineprofile_p.h +++ b/src/webengine/api/qquickwebengineprofile_p.h @@ -78,8 +78,8 @@ public: void cancelDownload(quint32 downloadId); void downloadDestroyed(quint32 downloadId); - void downloadRequested(DownloadItemInfo &info) Q_DECL_OVERRIDE; - void downloadUpdated(const DownloadItemInfo &info) Q_DECL_OVERRIDE; + void downloadRequested(DownloadItemInfo &info) override; + void downloadUpdated(const DownloadItemInfo &info) override; // QQmlListPropertyHelpers static void userScripts_append(QQmlListProperty<QQuickWebEngineScript> *p, QQuickWebEngineScript *script); diff --git a/src/webengine/api/qquickwebenginesettings.cpp b/src/webengine/api/qquickwebenginesettings.cpp index 3ce53337c..71b0deeca 100644 --- a/src/webengine/api/qquickwebenginesettings.cpp +++ b/src/webengine/api/qquickwebenginesettings.cpp @@ -73,6 +73,22 @@ QQuickWebEngineSettings::~QQuickWebEngineSettings() { } /*! + \enum QQuickWebEngineSettings::UnknownUrlSchemePolicy + \since WebEngine 1.7 + + This enum describes how navigation requests to URLs with unknown schemes are handled. + + \value DisallowUnknownUrlSchemes + Disallows all navigation requests to URLs with unknown schemes. + \value AllowUnknownUrlSchemesFromUserInteraction + Allows navigation requests to URLs with unknown schemes that are issued from + user-interaction (like a mouse-click), whereas other navigation requests (for example + from JavaScript) are suppressed. + \value AllowAllUnknownUrlSchemes + Allows all navigation requests to URLs with unknown schemes. +*/ + +/*! \qmlproperty bool WebEngineSettings::autoLoadImages Automatically loads images on web pages. @@ -382,6 +398,34 @@ bool QQuickWebEngineSettings::showScrollBars() const } /*! + \qmlproperty bool WebEngineSettings::playbackRequiresUserGesture + \since QtWebEngine 1.7 + Inhibits playback of media content until the user interacts with + the page. Disabled by default. + + \note The behavior is similar to Chrome on Android when enabled, + and similar to Chrome on desktops when disabled (default). +*/ +bool QQuickWebEngineSettings::playbackRequiresUserGesture() const +{ + return d_ptr->testAttribute(WebEngineSettings::PlaybackRequiresUserGesture); +} + +/*! + \qmlproperty bool WebEngineSettings::webRTCPublicInterfacesOnly + \since QtWebEngine 1.7 + Limits WebRTC to public IP addresses only. When disabled WebRTC may also use + local network IP addresses, but remote hosts can also see your local network + IP address. + + Disabled by default. +*/ +bool QQuickWebEngineSettings::webRTCPublicInterfacesOnly() const +{ + return d_ptr->testAttribute(WebEngineSettings::WebRTCPublicInterfacesOnly); +} + +/*! \qmlproperty string WebEngineSettings::defaultTextEncoding \since QtWebEngine 1.2 @@ -395,6 +439,22 @@ QString QQuickWebEngineSettings::defaultTextEncoding() const return d_ptr->defaultTextEncoding(); } +ASSERT_ENUMS_MATCH(QQuickWebEngineSettings::DisallowUnknownUrlSchemes, WebEngineSettings::DisallowUnknownUrlSchemes) +ASSERT_ENUMS_MATCH(QQuickWebEngineSettings::AllowUnknownUrlSchemesFromUserInteraction, WebEngineSettings::AllowUnknownUrlSchemesFromUserInteraction) +ASSERT_ENUMS_MATCH(QQuickWebEngineSettings::AllowAllUnknownUrlSchemes, WebEngineSettings::AllowAllUnknownUrlSchemes) + +/*! + \qmlproperty WebEngineSettings::UnknownUrlSchemePolicy WebEngineSettings::unknownUrlSchemePolicy + \since QtWebEngine 1.7 + Specifies how navigation requests to URLs with unknown schemes are handled. + + Default is \l{QWebEngineSettings::UnknownUrlSchemePolicy}{WebEngineSettings.AllowUnknownUrlSchemesFromUserInteraction}. +*/ +QQuickWebEngineSettings::UnknownUrlSchemePolicy QQuickWebEngineSettings::unknownUrlSchemePolicy() const +{ + return static_cast<QQuickWebEngineSettings::UnknownUrlSchemePolicy>(d_ptr->unknownUrlSchemePolicy()); +} + void QQuickWebEngineSettings::setAutoLoadImages(bool on) { bool wasOn = d_ptr->testAttribute(WebEngineSettings::AutoLoadImages); @@ -599,6 +659,31 @@ void QQuickWebEngineSettings::setShowScrollBars(bool on) Q_EMIT showScrollBarsChanged(); } +void QQuickWebEngineSettings::setPlaybackRequiresUserGesture(bool on) +{ + bool wasOn = d_ptr->testAttribute(WebEngineSettings::PlaybackRequiresUserGesture); + d_ptr->setAttribute(WebEngineSettings::PlaybackRequiresUserGesture, on); + if (wasOn != on) + Q_EMIT playbackRequiresUserGestureChanged(); +} + +void QQuickWebEngineSettings::setUnknownUrlSchemePolicy(QQuickWebEngineSettings::UnknownUrlSchemePolicy policy) +{ + WebEngineSettings::UnknownUrlSchemePolicy oldPolicy = d_ptr->unknownUrlSchemePolicy(); + WebEngineSettings::UnknownUrlSchemePolicy newPolicy = static_cast<WebEngineSettings::UnknownUrlSchemePolicy>(policy); + d_ptr->setUnknownUrlSchemePolicy(newPolicy); + if (oldPolicy != newPolicy) + Q_EMIT unknownUrlSchemePolicyChanged(); +} + +void QQuickWebEngineSettings::setWebRTCPublicInterfacesOnly(bool on) +{ + bool wasOn = d_ptr->testAttribute(WebEngineSettings::WebRTCPublicInterfacesOnly); + d_ptr->setAttribute(WebEngineSettings::WebRTCPublicInterfacesOnly, on); + if (wasOn != on) + Q_EMIT webRTCPublicInterfacesOnlyChanged(); +} + void QQuickWebEngineSettings::setParentSettings(QQuickWebEngineSettings *parentSettings) { d_ptr->setParentSettings(parentSettings->d_ptr.data()); diff --git a/src/webengine/api/qquickwebenginesettings_p.h b/src/webengine/api/qquickwebenginesettings_p.h index a8b11c769..60baa7323 100644 --- a/src/webengine/api/qquickwebenginesettings_p.h +++ b/src/webengine/api/qquickwebenginesettings_p.h @@ -88,8 +88,19 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineSettings : public QObject { Q_PROPERTY(bool allowGeolocationOnInsecureOrigins READ allowGeolocationOnInsecureOrigins WRITE setAllowGeolocationOnInsecureOrigins NOTIFY allowGeolocationOnInsecureOriginsChanged REVISION 4 FINAL) Q_PROPERTY(bool allowWindowActivationFromJavaScript READ allowWindowActivationFromJavaScript WRITE setAllowWindowActivationFromJavaScript NOTIFY allowWindowActivationFromJavaScriptChanged REVISION 5 FINAL) Q_PROPERTY(bool showScrollBars READ showScrollBars WRITE setShowScrollBars NOTIFY showScrollBarsChanged REVISION 5 FINAL) + Q_PROPERTY(UnknownUrlSchemePolicy unknownUrlSchemePolicy READ unknownUrlSchemePolicy WRITE setUnknownUrlSchemePolicy NOTIFY unknownUrlSchemePolicyChanged REVISION 6 FINAL) + Q_PROPERTY(bool playbackRequiresUserGesture READ playbackRequiresUserGesture WRITE setPlaybackRequiresUserGesture NOTIFY playbackRequiresUserGestureChanged REVISION 6 FINAL) + Q_PROPERTY(bool webRTCPublicInterfacesOnly READ webRTCPublicInterfacesOnly WRITE setWebRTCPublicInterfacesOnly NOTIFY webRTCPublicInterfacesOnlyChanged REVISION 6 FINAL) public: + enum UnknownUrlSchemePolicy { + DisallowUnknownUrlSchemes = 1, + AllowUnknownUrlSchemesFromUserInteraction, + AllowAllUnknownUrlSchemes + }; + + Q_ENUM(UnknownUrlSchemePolicy) + ~QQuickWebEngineSettings(); bool autoLoadImages() const; @@ -117,6 +128,9 @@ public: bool allowGeolocationOnInsecureOrigins() const; bool allowWindowActivationFromJavaScript() const; bool showScrollBars() const; + UnknownUrlSchemePolicy unknownUrlSchemePolicy() const; + bool playbackRequiresUserGesture() const; + bool webRTCPublicInterfacesOnly() const; void setAutoLoadImages(bool on); void setJavascriptEnabled(bool on); @@ -143,6 +157,9 @@ public: void setAllowGeolocationOnInsecureOrigins(bool on); void setAllowWindowActivationFromJavaScript(bool on); void setShowScrollBars(bool on); + void setUnknownUrlSchemePolicy(UnknownUrlSchemePolicy policy); + void setPlaybackRequiresUserGesture(bool on); + void setWebRTCPublicInterfacesOnly(bool on); signals: void autoLoadImagesChanged(); @@ -170,6 +187,9 @@ signals: Q_REVISION(4) void allowGeolocationOnInsecureOriginsChanged(); Q_REVISION(5) void allowWindowActivationFromJavaScriptChanged(); Q_REVISION(5) void showScrollBarsChanged(); + Q_REVISION(6) void unknownUrlSchemePolicyChanged(); + Q_REVISION(6) void playbackRequiresUserGestureChanged(); + Q_REVISION(6) void webRTCPublicInterfacesOnlyChanged(); private: explicit QQuickWebEngineSettings(QQuickWebEngineSettings *parentSettings = 0); diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index cb21f4b15..d32627373 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -45,6 +45,7 @@ #include "certificate_error_controller.h" #include "file_picker_controller.h" #include "javascript_dialog_controller.h" +#include "quota_permission_controller.h" #include "qquickwebenginehistory_p.h" #include "qquickwebenginecertificateerror_p.h" #include "qquickwebenginecontextmenurequest_p.h" @@ -489,6 +490,7 @@ void QQuickWebEngineViewPrivate::loadStarted(const QUrl &provisionalUrl, bool is QTimer::singleShot(0, q, [q, provisionalUrl]() { QQuickWebEngineLoadRequest loadRequest(provisionalUrl, QQuickWebEngineView::LoadStartedStatus); + emit q->loadingChanged(&loadRequest); }); } @@ -694,6 +696,13 @@ void QQuickWebEngineViewPrivate::runMouseLockPermissionRequest(const QUrl &secur adapter->grantMouseLockPermission(false); } +void QQuickWebEngineViewPrivate::runQuotaPermissionRequest(QSharedPointer<QtWebEngineCore::QuotaPermissionController> controller) +{ + Q_Q(QQuickWebEngineView); + QQuickWebEngineQuotaPermissionRequest request(controller); + Q_EMIT q->quotaPermissionRequested(request); +} + QObject *QQuickWebEngineViewPrivate::accessibilityParentObject() { Q_Q(QQuickWebEngineView); @@ -819,6 +828,11 @@ void QQuickWebEngineViewPrivate::adoptWebContents(WebContentsAdapter *webContent if (m_webChannel) adapter->setWebChannel(m_webChannel, m_webChannelWorld); + if (devToolsView && devToolsView->d_ptr->adapter) + adapter->openDevToolsFrontend(devToolsView->d_ptr->adapter); + else if (inspectedView && inspectedView->d_ptr->adapter) + inspectedView->d_ptr->adapter->openDevToolsFrontend(adapter); + // set initial background color if non-default if (m_backgroundColor != Qt::white) adapter->backgroundColorChanged(); @@ -878,6 +892,8 @@ void QQuickWebEngineViewPrivate::ensureContentsAdapter() adapter->setWebChannel(m_webChannel, m_webChannelWorld); if (explicitUrl.isValid()) adapter->load(explicitUrl); + if (inspectedView) + inspectedView->d_ptr->adapter->openDevToolsFrontend(adapter); // push down the page's user scripts Q_FOREACH (QQuickWebEngineScript *script, m_userScripts) script->d_func()->bind(browserContextAdapter()->userResourceController(), adapter.data()); @@ -1154,6 +1170,12 @@ void QQuickWebEngineViewPrivate::renderProcessTerminated( renderProcessExitStatus(terminationStatus)), exitCode); } +void QQuickWebEngineViewPrivate::requestGeometryChange(const QRect &geometry, const QRect &frameGeometry) +{ + Q_Q(QQuickWebEngineView); + Q_EMIT q->geometryChangeRequested(geometry, frameGeometry); +} + void QQuickWebEngineViewPrivate::startDragging(const content::DropData &dropData, Qt::DropActions allowedActions, const QPixmap &pixmap, const QPoint &offset) @@ -1409,6 +1431,54 @@ void QQuickWebEngineView::setWebChannelWorld(uint webChannelWorld) Q_EMIT webChannelWorldChanged(webChannelWorld); } +QQuickWebEngineView *QQuickWebEngineView::inspectedView() const +{ + Q_D(const QQuickWebEngineView); + return d->inspectedView; +} + +void QQuickWebEngineView::setInspectedView(QQuickWebEngineView *view) +{ + Q_D(QQuickWebEngineView); + if (d->inspectedView == view) + return; + QQuickWebEngineView *oldView = d->inspectedView; + d->inspectedView = nullptr; + if (oldView) + oldView->setDevToolsView(nullptr); + d->inspectedView = view; + if (view) + view->setDevToolsView(this); + Q_EMIT inspectedViewChanged(); +} + +QQuickWebEngineView *QQuickWebEngineView::devToolsView() const +{ + Q_D(const QQuickWebEngineView); + return d->devToolsView; +} + +void QQuickWebEngineView::setDevToolsView(QQuickWebEngineView *devToolsView) +{ + Q_D(QQuickWebEngineView); + if (d->devToolsView == devToolsView) + return; + QQuickWebEngineView *oldView = d->devToolsView; + d->devToolsView = nullptr; + if (oldView) + oldView->setInspectedView(nullptr); + d->devToolsView = devToolsView; + if (devToolsView) + devToolsView->setInspectedView(this); + if (d->adapter) { + if (devToolsView) + d->adapter->openDevToolsFrontend(devToolsView->d_ptr->adapter); + else + d->adapter->closeDevToolsFrontend(); + } + Q_EMIT devToolsViewChanged(); +} + void QQuickWebEngineView::grantFeaturePermission(const QUrl &securityOrigin, QQuickWebEngineView::Feature feature, bool granted) { if (!d_ptr->adapter) @@ -1833,5 +1903,34 @@ void QQuickWebEngineFullScreenRequest::reject() m_viewPrivate->setFullScreenMode(!m_toggleOn); } +QQuickWebEngineQuotaPermissionRequest::QQuickWebEngineQuotaPermissionRequest(QSharedPointer<QtWebEngineCore::QuotaPermissionController> controller) + : d_ptr(controller) +{ +} + +QQuickWebEngineQuotaPermissionRequest::~QQuickWebEngineQuotaPermissionRequest() +{ +} + +void QQuickWebEngineQuotaPermissionRequest::accept() +{ + d_ptr->accept(); +} + +void QQuickWebEngineQuotaPermissionRequest::reject() +{ + d_ptr->cancel(); +} + +QUrl QQuickWebEngineQuotaPermissionRequest::origin() const +{ + return d_ptr->origin(); +} + +qint64 QQuickWebEngineQuotaPermissionRequest::requestedSize() const +{ + return d_ptr->requestedSize(); +} + QT_END_NAMESPACE diff --git a/src/webengine/api/qquickwebengineview_p.h b/src/webengine/api/qquickwebengineview_p.h index ae0523460..275503d14 100644 --- a/src/webengine/api/qquickwebengineview_p.h +++ b/src/webengine/api/qquickwebengineview_p.h @@ -56,6 +56,12 @@ #include <QQuickItem> #include <QtGui/qcolor.h> + +namespace QtWebEngineCore { + class QuotaPermissionController; +} + + QT_BEGIN_NAMESPACE class QQmlWebChannel; @@ -98,6 +104,26 @@ private: const bool m_toggleOn; }; +class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineQuotaPermissionRequest { + Q_GADGET + Q_PROPERTY(QUrl origin READ origin CONSTANT FINAL) + Q_PROPERTY(qint64 requestedSize READ requestedSize CONSTANT FINAL) +public: + QQuickWebEngineQuotaPermissionRequest() {} + QQuickWebEngineQuotaPermissionRequest(QSharedPointer<QtWebEngineCore::QuotaPermissionController> controller); + ~QQuickWebEngineQuotaPermissionRequest(); + + Q_INVOKABLE void accept(); + Q_INVOKABLE void reject(); + QUrl origin() const; + qint64 requestedSize() const; + +private: + QSharedPointer<QtWebEngineCore::QuotaPermissionController> d_ptr; +}; + +#define LATEST_WEBENGINEVIEW_REVISION 7 + class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineView : public QQuickItem { Q_OBJECT Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged FINAL) @@ -122,6 +148,8 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineView : public QQuickItem { Q_PROPERTY(bool recentlyAudible READ recentlyAudible NOTIFY recentlyAudibleChanged FINAL REVISION 3) Q_PROPERTY(uint webChannelWorld READ webChannelWorld WRITE setWebChannelWorld NOTIFY webChannelWorldChanged REVISION 3 FINAL) + Q_PROPERTY(QQuickWebEngineView *inspectedView READ inspectedView WRITE setInspectedView NOTIFY inspectedViewChanged REVISION 7 FINAL) + Q_PROPERTY(QQuickWebEngineView *devToolsView READ devToolsView WRITE setDevToolsView NOTIFY devToolsViewChanged REVISION 7 FINAL) #ifdef ENABLE_QML_TESTSUPPORT_API Q_PROPERTY(QQuickWebEngineTestSupport *testSupport READ testSupport WRITE setTestSupport NOTIFY testSupportChanged FINAL) #endif @@ -450,7 +478,7 @@ public: Q_ENUM(PrintedPageOrientation) // QmlParserStatus - virtual void componentComplete() Q_DECL_OVERRIDE; + void componentComplete() override; QQuickWebEngineProfile *profile() const; void setProfile(QQuickWebEngineProfile *); @@ -474,6 +502,11 @@ public: bool activeFocusOnPress() const; + void setInspectedView(QQuickWebEngineView *); + QQuickWebEngineView *inspectedView() const; + void setDevToolsView(QQuickWebEngineView *); + QQuickWebEngineView *devToolsView() const; + public Q_SLOTS: void runJavaScript(const QString&, const QJSValue & = QJSValue()); Q_REVISION(3) void runJavaScript(const QString&, quint32 worldId, const QJSValue & = QJSValue()); @@ -529,18 +562,22 @@ Q_SIGNALS: Q_REVISION(4) void fileDialogRequested(QQuickWebEngineFileDialogRequest *request); Q_REVISION(4) void formValidationMessageRequested(QQuickWebEngineFormValidationMessageRequest *request); Q_REVISION(5) void pdfPrintingFinished(const QString &filePath, bool success); + Q_REVISION(7) void quotaPermissionRequested(const QQuickWebEngineQuotaPermissionRequest &request); + Q_REVISION(7) void geometryChangeRequested(const QRect &geometry, const QRect &frameGeometry); + Q_REVISION(7) void inspectedViewChanged(); + Q_REVISION(7) void devToolsViewChanged(); #ifdef ENABLE_QML_TESTSUPPORT_API void testSupportChanged(); #endif protected: - void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE; - void itemChange(ItemChange, const ItemChangeData &) Q_DECL_OVERRIDE; - void dragEnterEvent(QDragEnterEvent *e) Q_DECL_OVERRIDE; - void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE; - void dragMoveEvent(QDragMoveEvent *e) Q_DECL_OVERRIDE; - void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE; + void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override; + void itemChange(ItemChange, const ItemChangeData &) override; + void dragEnterEvent(QDragEnterEvent *e) override; + void dragLeaveEvent(QDragLeaveEvent *e) override; + void dragMoveEvent(QDragMoveEvent *e) override; + void dropEvent(QDropEvent *e) override; private: Q_DECLARE_PRIVATE(QQuickWebEngineView) @@ -557,5 +594,6 @@ QT_END_NAMESPACE QML_DECLARE_TYPE(QQuickWebEngineView) Q_DECLARE_METATYPE(QQuickWebEngineFullScreenRequest) +Q_DECLARE_METATYPE(QQuickWebEngineQuotaPermissionRequest) #endif // QQUICKWEBENGINEVIEW_P_H diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h index 1b8edc800..baa89718d 100644 --- a/src/webengine/api/qquickwebengineview_p_p.h +++ b/src/webengine/api/qquickwebengineview_p_p.h @@ -54,6 +54,7 @@ #include "qquickwebengineview_p.h" #include "web_contents_adapter_client.h" +#include <QPointer> #include <QScopedPointer> #include <QSharedData> #include <QString> @@ -89,66 +90,66 @@ public: QtWebEngineCore::UIDelegatesManager *ui(); - virtual QtWebEngineCore::RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegate(QtWebEngineCore::RenderWidgetHostViewQtDelegateClient *client) Q_DECL_OVERRIDE; - virtual QtWebEngineCore::RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegateForPopup(QtWebEngineCore::RenderWidgetHostViewQtDelegateClient *client) Q_DECL_OVERRIDE; - virtual void titleChanged(const QString&) Q_DECL_OVERRIDE; - virtual void urlChanged(const QUrl&) Q_DECL_OVERRIDE; - virtual void iconChanged(const QUrl&) Q_DECL_OVERRIDE; - virtual void loadProgressChanged(int progress) Q_DECL_OVERRIDE; - virtual void didUpdateTargetURL(const QUrl&) Q_DECL_OVERRIDE; - virtual void selectionChanged() Q_DECL_OVERRIDE { } - virtual void recentlyAudibleChanged(bool recentlyAudible) Q_DECL_OVERRIDE; - virtual QRectF viewportRect() const Q_DECL_OVERRIDE; - virtual qreal dpiScale() const Q_DECL_OVERRIDE; - virtual QColor backgroundColor() const Q_DECL_OVERRIDE; - virtual void loadStarted(const QUrl &provisionalUrl, bool isErrorPage = false) Q_DECL_OVERRIDE; - virtual void loadCommitted() Q_DECL_OVERRIDE; - virtual void loadVisuallyCommitted() Q_DECL_OVERRIDE; - virtual void loadFinished(bool success, const QUrl &url, bool isErrorPage = false, int errorCode = 0, const QString &errorDescription = QString()) Q_DECL_OVERRIDE; - virtual void focusContainer() Q_DECL_OVERRIDE; - virtual void unhandledKeyEvent(QKeyEvent *event) Q_DECL_OVERRIDE; - virtual void adoptNewWindow(QSharedPointer<QtWebEngineCore::WebContentsAdapter> newWebContents, WindowOpenDisposition disposition, bool userGesture, const QRect &, const QUrl &targetUrl) Q_DECL_OVERRIDE; - virtual bool isBeingAdopted() Q_DECL_OVERRIDE; - virtual void close() Q_DECL_OVERRIDE; - virtual void windowCloseRejected() Q_DECL_OVERRIDE; - virtual void requestFullScreenMode(const QUrl &origin, bool fullscreen) Q_DECL_OVERRIDE; - virtual bool isFullScreenMode() const Q_DECL_OVERRIDE; - virtual void contextMenuRequested(const QtWebEngineCore::WebEngineContextMenuData &) Q_DECL_OVERRIDE; - virtual void navigationRequested(int navigationType, const QUrl &url, int &navigationRequestAction, bool isMainFrame) Q_DECL_OVERRIDE; - virtual void javascriptDialog(QSharedPointer<QtWebEngineCore::JavaScriptDialogController>) Q_DECL_OVERRIDE; - virtual void runFileChooser(QSharedPointer<QtWebEngineCore::FilePickerController>) Q_DECL_OVERRIDE; - virtual void showColorDialog(QSharedPointer<QtWebEngineCore::ColorChooserController>) Q_DECL_OVERRIDE; - virtual void didRunJavaScript(quint64, const QVariant&) Q_DECL_OVERRIDE; - virtual void didFetchDocumentMarkup(quint64, const QString&) Q_DECL_OVERRIDE { } - virtual void didFetchDocumentInnerText(quint64, const QString&) Q_DECL_OVERRIDE { } - virtual void didFindText(quint64, int) Q_DECL_OVERRIDE; - virtual void didPrintPage(quint64 requestId, const QByteArray &result) Q_DECL_OVERRIDE; - virtual void didPrintPageToPdf(const QString &filePath, bool success) Q_DECL_OVERRIDE; - virtual void passOnFocus(bool reverse) Q_DECL_OVERRIDE; - virtual void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) Q_DECL_OVERRIDE; - virtual void authenticationRequired(QSharedPointer<QtWebEngineCore::AuthenticationDialogController>) Q_DECL_OVERRIDE; - virtual void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) Q_DECL_OVERRIDE; - virtual void runMouseLockPermissionRequest(const QUrl &securityOrigin) Q_DECL_OVERRIDE; - virtual QObject *accessibilityParentObject() Q_DECL_OVERRIDE; - virtual QtWebEngineCore::WebEngineSettings *webEngineSettings() const Q_DECL_OVERRIDE; - virtual void allowCertificateError(const QSharedPointer<CertificateErrorController> &errorController) Q_DECL_OVERRIDE; - virtual void runGeolocationPermissionRequest(QUrl const&) Q_DECL_OVERRIDE; - virtual void showValidationMessage(const QRect &anchor, const QString &mainText, const QString &subText) Q_DECL_OVERRIDE; - virtual void hideValidationMessage() Q_DECL_OVERRIDE; - virtual void moveValidationMessage(const QRect &anchor) Q_DECL_OVERRIDE; - virtual void renderProcessTerminated(RenderProcessTerminationStatus terminationStatus, - int exitCode) Q_DECL_OVERRIDE; - virtual void requestGeometryChange(const QRect &geometry) Q_DECL_OVERRIDE { Q_UNUSED(geometry); } - virtual void updateScrollPosition(const QPointF &position) Q_DECL_OVERRIDE; - virtual void updateContentsSize(const QSizeF &size) Q_DECL_OVERRIDE; + QtWebEngineCore::RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegate(QtWebEngineCore::RenderWidgetHostViewQtDelegateClient *client) override; + QtWebEngineCore::RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegateForPopup(QtWebEngineCore::RenderWidgetHostViewQtDelegateClient *client) override; + void titleChanged(const QString&) override; + void urlChanged(const QUrl&) override; + void iconChanged(const QUrl&) override; + void loadProgressChanged(int progress) override; + void didUpdateTargetURL(const QUrl&) override; + void selectionChanged() override { } + void recentlyAudibleChanged(bool recentlyAudible) override; + QRectF viewportRect() const override; + qreal dpiScale() const override; + QColor backgroundColor() const override; + void loadStarted(const QUrl &provisionalUrl, bool isErrorPage = false) override; + void loadCommitted() override; + void loadVisuallyCommitted() override; + void loadFinished(bool success, const QUrl &url, bool isErrorPage = false, int errorCode = 0, const QString &errorDescription = QString()) override; + void focusContainer() override; + void unhandledKeyEvent(QKeyEvent *event) override; + void adoptNewWindow(QSharedPointer<QtWebEngineCore::WebContentsAdapter> newWebContents, WindowOpenDisposition disposition, bool userGesture, const QRect &, const QUrl &targetUrl) override; + bool isBeingAdopted() override; + void close() override; + void windowCloseRejected() override; + void requestFullScreenMode(const QUrl &origin, bool fullscreen) override; + bool isFullScreenMode() const override; + void contextMenuRequested(const QtWebEngineCore::WebEngineContextMenuData &) override; + void navigationRequested(int navigationType, const QUrl &url, int &navigationRequestAction, bool isMainFrame) override; + void javascriptDialog(QSharedPointer<QtWebEngineCore::JavaScriptDialogController>) override; + void runFileChooser(QSharedPointer<QtWebEngineCore::FilePickerController>) override; + void showColorDialog(QSharedPointer<QtWebEngineCore::ColorChooserController>) override; + void didRunJavaScript(quint64, const QVariant&) override; + void didFetchDocumentMarkup(quint64, const QString&) override { } + void didFetchDocumentInnerText(quint64, const QString&) override { } + void didFindText(quint64, int) override; + void didPrintPage(quint64 requestId, const QByteArray &result) override; + void didPrintPageToPdf(const QString &filePath, bool success) override; + void passOnFocus(bool reverse) override; + void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) override; + void authenticationRequired(QSharedPointer<QtWebEngineCore::AuthenticationDialogController>) override; + void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) override; + void runMouseLockPermissionRequest(const QUrl &securityOrigin) override; + void runQuotaPermissionRequest(QSharedPointer<QtWebEngineCore::QuotaPermissionController>) override; + QObject *accessibilityParentObject() override; + QtWebEngineCore::WebEngineSettings *webEngineSettings() const override; + void allowCertificateError(const QSharedPointer<CertificateErrorController> &errorController) override; + void runGeolocationPermissionRequest(QUrl const&) override; + void showValidationMessage(const QRect &anchor, const QString &mainText, const QString &subText) override; + void hideValidationMessage() override; + void moveValidationMessage(const QRect &anchor) override; + void renderProcessTerminated(RenderProcessTerminationStatus terminationStatus, int exitCode) override; + void requestGeometryChange(const QRect &geometry, const QRect &frameGeometry) override; + void updateScrollPosition(const QPointF &position) override; + void updateContentsSize(const QSizeF &size) override; void startDragging(const content::DropData &dropData, Qt::DropActions allowedActions, - const QPixmap &pixmap, const QPoint &offset) Q_DECL_OVERRIDE; - virtual bool isEnabled() const Q_DECL_OVERRIDE; - virtual void setToolTip(const QString &toolTipText) Q_DECL_OVERRIDE; - const QObject *holdingQObject() const Q_DECL_OVERRIDE; + const QPixmap &pixmap, const QPoint &offset) override; + bool isEnabled() const override; + void setToolTip(const QString &toolTipText) override; + const QObject *holdingQObject() const override; - virtual QSharedPointer<QtWebEngineCore::BrowserContextAdapter> browserContextAdapter() Q_DECL_OVERRIDE; - QtWebEngineCore::WebContentsAdapter *webContentsAdapter() Q_DECL_OVERRIDE; + QSharedPointer<QtWebEngineCore::BrowserContextAdapter> browserContextAdapter() override; + QtWebEngineCore::WebContentsAdapter *webContentsAdapter() override; void setDevicePixelRatio(qreal); void adoptWebContents(QtWebEngineCore::WebContentsAdapter *webContents); @@ -184,6 +185,8 @@ public: QMap<quint64, QJSValue> m_callbacks; QList<QSharedPointer<CertificateErrorController> > m_certificateErrorControllers; QQmlWebChannel *m_webChannel; + QPointer<QQuickWebEngineView> inspectedView; + QPointer<QQuickWebEngineView> devToolsView; uint m_webChannelWorld; private: @@ -200,13 +203,13 @@ class QQuickWebEngineViewAccessible : public QAccessibleObject { public: QQuickWebEngineViewAccessible(QQuickWebEngineView *o); - QAccessibleInterface *parent() const Q_DECL_OVERRIDE; - int childCount() const Q_DECL_OVERRIDE; - QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE; - int indexOfChild(const QAccessibleInterface*) const Q_DECL_OVERRIDE; - QString text(QAccessible::Text) const Q_DECL_OVERRIDE; - QAccessible::Role role() const Q_DECL_OVERRIDE; - QAccessible::State state() const Q_DECL_OVERRIDE; + QAccessibleInterface *parent() const override; + int childCount() const override; + QAccessibleInterface *child(int index) const override; + int indexOfChild(const QAccessibleInterface*) const override; + QString text(QAccessible::Text) const override; + QAccessible::Role role() const override; + QAccessible::State state() const override; private: QQuickWebEngineView *engineView() const { return static_cast<QQuickWebEngineView*>(object()); } diff --git a/src/webengine/doc/src/external-resources.qdoc b/src/webengine/doc/src/external-resources.qdoc index 6cced588c..c2faaa8d4 100644 --- a/src/webengine/doc/src/external-resources.qdoc +++ b/src/webengine/doc/src/external-resources.qdoc @@ -113,11 +113,6 @@ */ /*! - \externalpage https://www.w3.org/TR/html5/links.html#downloading-resources - \title HTML download attribute -*/ - -/*! \externalpage https://www.iana.org/assignments/uri-schemes/prov/view-source \title view-source URI scheme */ diff --git a/src/webengine/doc/src/qtwebengine-platform-notes.qdoc b/src/webengine/doc/src/qtwebengine-platform-notes.qdoc index 068d395b6..6a9330583 100644 --- a/src/webengine/doc/src/qtwebengine-platform-notes.qdoc +++ b/src/webengine/doc/src/qtwebengine-platform-notes.qdoc @@ -112,6 +112,20 @@ \note Qt WebEngine cannot be built for the 32-bit mode of \macos (using the \c macx-clang-32 \c mkspec). + \section1 Using Earlier Qt Versions to Build Qt WebEngine + + Building Qt WebEngine with earlier Qt versions (down to the last LTS + version) is supported. It means that Qt WebEngine 5.11 can be built with + Qt 5.9.x, Qt 5.10.x, and Qt 5.11. + + To use an earlier Qt version to build Qt Webengine: + + \list 1 + \li Download the qtwebengine sources. + \li From the earlier Qt version, run + \c {qmake && make (&& make install)}. + \endlist + \section1 Mac App Store Compatibility Applications using Qt WebEngine are not compatible with the Mac App Store, because: diff --git a/src/webengine/doc/src/webengineview_lgpl.qdoc b/src/webengine/doc/src/webengineview_lgpl.qdoc index 9cd7e3f27..fadce39ad 100644 --- a/src/webengine/doc/src/webengineview_lgpl.qdoc +++ b/src/webengine/doc/src/webengineview_lgpl.qdoc @@ -1297,3 +1297,105 @@ /*! \qmlsignal WebEngineView::navigationRequested(WebEngineNavigationRequest request) This signal is emitted when the navigation request \a request is issued. */ + +/*! + \qmlsignal WebEngineView::quotaPermissionRequested(QuotaPermissionRequest request) + \since QtWebEngine 1.7 + + This signal is emitted when the web page requests larger persistent storage + than the application's current allocation in File System API. The default quota + is 0 bytes. + + \sa QuotaPermissionRequest +*/ + +/*! + \qmltype QuotaPermissionRequest + \instantiates QQuickWebEngineQuotaPermissionRequest + \inqmlmodule QtWebEngine + \since QtWebEngine 1.7 + + \brief A utility type for the WebEngineView::quotaPermissionRequested() signal. + + \sa WebEngineView::quotaPermissionRequested() +*/ + +/*! + \qmlproperty url QuotaPermissionRequest::origin + \readonly + + The URL of the web page that issued the quota permission request. +*/ + +/*! + \qmlproperty qint64 QuotaPermissionRequest::requestedSize + \readonly + + Contains the size of the requested disk space in bytes. +*/ + +/*! + \qmlmethod void QuotaPermissionRequest::accept() + + Accepts the quota permission request. + + \qml + WebEngineView { + onQuotaPermissionRequested: function(request) { + if (request.requestedSize <= 5 * 1024 * 1024) + request.accept(); + else + request.reject(); + } + } + \endqml +*/ + +/*! + \qmlmethod void QuotaPermissionRequest::reject() + Rejects a quota permission request. +*/ + +/*! + \qmlsignal WebEngineView::geometryChangeRequested(rect geometry, rect frameGeometry) + \since QtWebEngine 1.7 + + This signal is emitted whenever the document wants to change the position and size of the + page to \a frameGeometry. This can happen for example through JavaScript. + + While \a frameGeometry includes, \a geometry excludes the size of frame margins. + + \note Geometry related properties of QML Window expect a size excluding the window + decoration. You have to use \a geometry to handle this signal correctly. + + \qml + onGeometryChangeRequested: { + window.x = geometry.x + window.y = geometry.y + window.width = geometry.width + window.height = geometry.height + } + \endqml +*/ + +/*! + \qmlproperty WebEngineView WebEngineView::inspectedView + \since QtWebEngine 1.7 + + The view this view is currently inspecting, if any. Setting it + will navigate to an internal URL with the developer tools of + the view set. + + \sa devToolView +*/ + +/*! + \qmlproperty WebEngineView WebEngineView::devToolsView + \since QtWebEngine 1.7 + + The view currently hosting the developer tools for this view. + Setting it to a new view will navigate that view to an internal + URL with the developer tools, and bind it to this view. + + \sa inspectedView +*/ diff --git a/src/webengine/plugin/plugin.cpp b/src/webengine/plugin/plugin.cpp index 5ab792699..03ce5a332 100644 --- a/src/webengine/plugin/plugin.cpp +++ b/src/webengine/plugin/plugin.cpp @@ -66,13 +66,13 @@ class QtWebEnginePlugin : public QQmlExtensionPlugin Q_OBJECT Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) public: - virtual void initializeEngine(QQmlEngine *engine, const char *uri) Q_DECL_OVERRIDE + void initializeEngine(QQmlEngine *engine, const char *uri) override { Q_UNUSED(uri); engine->addImageProvider(QQuickWebEngineFaviconProvider::identifier(), new QQuickWebEngineFaviconProvider); } - virtual void registerTypes(const char *uri) Q_DECL_OVERRIDE + void registerTypes(const char *uri) override { Q_ASSERT(QLatin1String(uri) == QLatin1String("QtWebEngine")); @@ -86,6 +86,7 @@ public: qmlRegisterType<QQuickWebEngineView, 4>(uri, 1, 4, "WebEngineView"); qmlRegisterType<QQuickWebEngineView, 5>(uri, 1, 5, "WebEngineView"); qmlRegisterType<QQuickWebEngineView, 6>(uri, 1, 6, "WebEngineView"); + qmlRegisterType<QQuickWebEngineView, 7>(uri, 1, 7, "WebEngineView"); qmlRegisterType<QQuickWebEngineProfile>(uri, 1, 1, "WebEngineProfile"); qmlRegisterType<QQuickWebEngineProfile, 1>(uri, 1, 2, "WebEngineProfile"); qmlRegisterType<QQuickWebEngineProfile, 2>(uri, 1, 3, "WebEngineProfile"); @@ -113,6 +114,7 @@ public: qmlRegisterUncreatableType<QQuickWebEngineSettings, 3>(uri, 1, 4, "WebEngineSettings", tr("Cannot create a separate instance of WebEngineSettings")); qmlRegisterUncreatableType<QQuickWebEngineSettings, 4>(uri, 1, 5, "WebEngineSettings", tr("Cannot create a separate instance of WebEngineSettings")); qmlRegisterUncreatableType<QQuickWebEngineSettings, 5>(uri, 1, 6, "WebEngineSettings", tr("Cannot create a separate instance of WebEngineSettings")); + qmlRegisterUncreatableType<QQuickWebEngineSettings, 6>(uri, 1, 7, "WebEngineSettings", tr("Cannot create a separate instance of WebEngineSettings")); qmlRegisterSingletonType<QQuickWebEngineSingleton>(uri, 1, 1, "WebEngine", webEngineSingletonProvider); qmlRegisterUncreatableType<QQuickWebEngineHistory>(uri, 1, 1, "NavigationHistory", tr("Cannot create a separate instance of NavigationHistory")); @@ -133,6 +135,8 @@ public: msgUncreatableType("FileDialogRequest")); qmlRegisterUncreatableType<QQuickWebEngineFormValidationMessageRequest>(uri, 1, 4, "FormValidationMessageRequest", msgUncreatableType("FormValidationMessageRequest")); + qmlRegisterUncreatableType<QQuickWebEngineQuotaPermissionRequest>(uri, 1, 7, "QuotaPermissionRequest", + tr("Cannot create a separate instance of QuotaPermissionRequest")); } private: diff --git a/src/webengine/plugin/plugin.pro b/src/webengine/plugin/plugin.pro index 1f9ef00c5..84b497e34 100644 --- a/src/webengine/plugin/plugin.pro +++ b/src/webengine/plugin/plugin.pro @@ -1,7 +1,7 @@ CXX_MODULE = qml TARGET = qtwebengineplugin TARGETPATH = QtWebEngine -IMPORT_VERSION = 1.6 +IMPORT_VERSION = 1.7 QT += webengine qml quick QT_PRIVATE += webengine-private diff --git a/src/webengine/plugin/plugins.qmltypes b/src/webengine/plugin/plugins.qmltypes index 321c462b5..b57aa4498 100644 --- a/src/webengine/plugin/plugins.qmltypes +++ b/src/webengine/plugin/plugins.qmltypes @@ -4,7 +4,7 @@ import QtQuick.tooling 1.2 // It is used for QML tooling purposes only. // // This file was auto-generated by: -// 'qmlplugindump -defaultplatform -dependencies dependencies.json -nonrelocatable QtWebEngine 1.6' +// 'qmlplugindump -defaultplatform -dependencies dependencies.json -nonrelocatable QtWebEngine 1.7' Module { dependencies: ["QtQuick 2.6"] @@ -119,10 +119,11 @@ Module { "QtWebEngine/WebEngineDownloadItem 1.2", "QtWebEngine/WebEngineDownloadItem 1.3", "QtWebEngine/WebEngineDownloadItem 1.4", - "QtWebEngine/WebEngineDownloadItem 1.5" + "QtWebEngine/WebEngineDownloadItem 1.5", + "QtWebEngine/WebEngineDownloadItem 1.6" ] isCreatable: false - exportMetaObjectRevisions: [0, 1, 2, 3, 4] + exportMetaObjectRevisions: [0, 1, 2, 3, 4, 5] Enum { name: "DownloadState" values: { @@ -195,12 +196,18 @@ Module { isReadonly: true } Property { name: "interruptReasonString"; revision: 4; type: "string"; isReadonly: true } + Property { name: "isFinished"; revision: 5; type: "bool"; isReadonly: true } + Property { name: "isPaused"; revision: 5; type: "bool"; isReadonly: true } Signal { name: "savePageFormatChanged"; revision: 2 } Signal { name: "mimeTypeChanged"; revision: 1 } Signal { name: "typeChanged"; revision: 3 } Signal { name: "interruptReasonChanged"; revision: 4 } + Signal { name: "isFinishedChanged"; revision: 5 } + Signal { name: "isPausedChanged"; revision: 5 } Method { name: "accept" } Method { name: "cancel" } + Method { name: "pause" } + Method { name: "resume" } } Component { name: "QQuickWebEngineFileDialogRequest" @@ -425,6 +432,16 @@ Module { Method { name: "clearHttpCache"; revision: 2 } } Component { + name: "QQuickWebEngineQuotaPermissionRequest" + exports: ["QtWebEngine/QuotaPermissionRequest 1.7"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "origin"; type: "QUrl"; isReadonly: true } + Property { name: "requestedSize"; type: "qlonglong"; isReadonly: true } + Method { name: "accept" } + Method { name: "reject" } + } + Component { name: "QQuickWebEngineScript" prototype: "QObject" exports: ["QtWebEngine/WebEngineScript 1.1"] @@ -514,6 +531,14 @@ Module { ] isCreatable: false exportMetaObjectRevisions: [0, 1, 2, 3, 4, 5] + Enum { + name: "UnknownUrlSchemePolicy" + values: { + "DisallowUnknownUrlSchemes": 1, + "AllowUnknownUrlSchemesFromUserInteraction": 2, + "AllowAllUnknownUrlSchemes": 3 + } + } Property { name: "autoLoadImages"; type: "bool" } Property { name: "javascriptEnabled"; type: "bool" } Property { name: "javascriptCanOpenWindows"; type: "bool" } @@ -538,6 +563,8 @@ Module { Property { name: "allowRunningInsecureContent"; revision: 3; type: "bool" } Property { name: "allowGeolocationOnInsecureOrigins"; revision: 4; type: "bool" } Property { name: "allowWindowActivationFromJavaScript"; revision: 5; type: "bool" } + Property { name: "showScrollBars"; revision: 5; type: "bool" } + Property { name: "unknownUrlSchemePolicy"; revision: 6; type: "UnknownUrlSchemePolicy" } Signal { name: "fullScreenSupportEnabledChanged"; revision: 1 } Signal { name: "screenCaptureEnabledChanged"; revision: 2 } Signal { name: "webGLEnabledChanged"; revision: 2 } @@ -549,6 +576,8 @@ Module { Signal { name: "allowRunningInsecureContentChanged"; revision: 3 } Signal { name: "allowGeolocationOnInsecureOriginsChanged"; revision: 4 } Signal { name: "allowWindowActivationFromJavaScriptChanged"; revision: 5 } + Signal { name: "showScrollBarsChanged"; revision: 5 } + Signal { name: "unknownUrlSchemePolicyChanged"; revision: 6 } } Component { name: "QQuickWebEngineSingleton" @@ -892,7 +921,6 @@ Module { Property { name: "audioMuted"; revision: 3; type: "bool" } Property { name: "recentlyAudible"; revision: 3; type: "bool"; isReadonly: true } Property { name: "webChannelWorld"; revision: 3; type: "uint" } - Property { name: "testSupport"; type: "QQuickWebEngineTestSupport"; isPointer: true } Signal { name: "loadingChanged" Parameter { name: "loadRequest"; type: "QQuickWebEngineLoadRequest"; isPointer: true } @@ -1023,6 +1051,11 @@ Module { Parameter { name: "filePath"; type: "string" } Parameter { name: "success"; type: "bool" } } + Signal { + name: "quotaPermissionRequested" + revision: 7 + Parameter { name: "request"; type: "QQuickWebEngineQuotaPermissionRequest" } + } Method { name: "runJavaScript" Parameter { type: "string" } diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.h b/src/webengine/render_widget_host_view_qt_delegate_quick.h index 7426dc16d..a5101d070 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quick.h +++ b/src/webengine/render_widget_host_view_qt_delegate_quick.h @@ -52,50 +52,50 @@ class RenderWidgetHostViewQtDelegateQuick : public QQuickItem, public RenderWidg public: RenderWidgetHostViewQtDelegateQuick(RenderWidgetHostViewQtDelegateClient *client, bool isPopup); - virtual void initAsChild(WebContentsAdapterClient* container) Q_DECL_OVERRIDE; - virtual void initAsPopup(const QRect&) Q_DECL_OVERRIDE; - virtual QRectF screenRect() const Q_DECL_OVERRIDE; - virtual QRectF contentsRect() const Q_DECL_OVERRIDE; - virtual void setKeyboardFocus() Q_DECL_OVERRIDE; - virtual bool hasKeyboardFocus() Q_DECL_OVERRIDE; - virtual void lockMouse() Q_DECL_OVERRIDE; - virtual void unlockMouse() Q_DECL_OVERRIDE; - virtual void show() Q_DECL_OVERRIDE; - virtual void hide() Q_DECL_OVERRIDE; - virtual bool isVisible() const Q_DECL_OVERRIDE; - virtual QWindow* window() const Q_DECL_OVERRIDE; - virtual QSGTexture *createTextureFromImage(const QImage &) Q_DECL_OVERRIDE; - virtual QSGLayer *createLayer() Q_DECL_OVERRIDE; - virtual QSGInternalImageNode *createImageNode() Q_DECL_OVERRIDE; - virtual QSGTextureNode *createTextureNode() Q_DECL_OVERRIDE; - virtual QSGRectangleNode *createRectangleNode() Q_DECL_OVERRIDE; - virtual void update() Q_DECL_OVERRIDE; - virtual void updateCursor(const QCursor &) Q_DECL_OVERRIDE; - virtual void resize(int width, int height) Q_DECL_OVERRIDE; - virtual void move(const QPoint&) Q_DECL_OVERRIDE { } - virtual void inputMethodStateChanged(bool editorVisible, bool isPasswordInput) Q_DECL_OVERRIDE; - virtual void setInputMethodHints(Qt::InputMethodHints) Q_DECL_OVERRIDE { } + void initAsChild(WebContentsAdapterClient* container) override; + void initAsPopup(const QRect&) override; + QRectF screenRect() const override; + QRectF contentsRect() const override; + void setKeyboardFocus() override; + bool hasKeyboardFocus() override; + void lockMouse() override; + void unlockMouse() override; + void show() override; + void hide() override; + bool isVisible() const override; + QWindow* window() const override; + QSGTexture *createTextureFromImage(const QImage &) override; + QSGLayer *createLayer() override; + QSGInternalImageNode *createImageNode() override; + QSGTextureNode *createTextureNode() override; + QSGRectangleNode *createRectangleNode() override; + void update() override; + void updateCursor(const QCursor &) override; + void resize(int width, int height) override; + void move(const QPoint&) override { } + void inputMethodStateChanged(bool editorVisible, bool isPasswordInput) override; + void setInputMethodHints(Qt::InputMethodHints) override { } // The QtQuick view doesn't have a backbuffer of its own and doesn't need this - virtual void setClearColor(const QColor &) Q_DECL_OVERRIDE { } + void setClearColor(const QColor &) override { } protected: - virtual bool event(QEvent *event) Q_DECL_OVERRIDE; - virtual void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE; - virtual void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE; - virtual void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; - virtual void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; - virtual void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; - virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; - virtual void keyReleaseEvent(QKeyEvent *event) Q_DECL_OVERRIDE; - virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE; - virtual void touchEvent(QTouchEvent *event) Q_DECL_OVERRIDE; - virtual void hoverMoveEvent(QHoverEvent *event) Q_DECL_OVERRIDE; - virtual void hoverLeaveEvent(QHoverEvent *event) Q_DECL_OVERRIDE; - virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const Q_DECL_OVERRIDE; - virtual void inputMethodEvent(QInputMethodEvent *event) Q_DECL_OVERRIDE; - virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE; - virtual void itemChange(ItemChange change, const ItemChangeData &value) Q_DECL_OVERRIDE; - virtual QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) Q_DECL_OVERRIDE; + bool event(QEvent *event) override; + void focusInEvent(QFocusEvent *event) override; + void focusOutEvent(QFocusEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; + void keyPressEvent(QKeyEvent *event) override; + void keyReleaseEvent(QKeyEvent *event) override; + void wheelEvent(QWheelEvent *event) override; + void touchEvent(QTouchEvent *event) override; + void hoverMoveEvent(QHoverEvent *event) override; + void hoverLeaveEvent(QHoverEvent *event) override; + QVariant inputMethodQuery(Qt::InputMethodQuery query) const override; + void inputMethodEvent(QInputMethodEvent *event) override; + void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override; + void itemChange(ItemChange change, const ItemChangeData &value) override; + QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override; private slots: void onWindowPosChanged(); diff --git a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h index 6244ee6ce..be4033728 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h +++ b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h @@ -55,30 +55,30 @@ public: RenderWidgetHostViewQtDelegateQuickWindow(RenderWidgetHostViewQtDelegate *realDelegate); ~RenderWidgetHostViewQtDelegateQuickWindow(); - virtual void initAsChild(WebContentsAdapterClient* container) Q_DECL_OVERRIDE; - virtual void initAsPopup(const QRect&) Q_DECL_OVERRIDE; - virtual QRectF screenRect() const Q_DECL_OVERRIDE; - virtual QRectF contentsRect() const Q_DECL_OVERRIDE; - virtual void setKeyboardFocus() Q_DECL_OVERRIDE {} - virtual bool hasKeyboardFocus() Q_DECL_OVERRIDE { return false; } - virtual void lockMouse() Q_DECL_OVERRIDE {} - virtual void unlockMouse() Q_DECL_OVERRIDE {} - virtual void show() Q_DECL_OVERRIDE; - virtual void hide() Q_DECL_OVERRIDE; - virtual bool isVisible() const Q_DECL_OVERRIDE; - virtual QWindow* window() const Q_DECL_OVERRIDE; - virtual QSGTexture *createTextureFromImage(const QImage &) Q_DECL_OVERRIDE; - virtual QSGLayer *createLayer() Q_DECL_OVERRIDE; - virtual QSGInternalImageNode *createImageNode() Q_DECL_OVERRIDE; - virtual QSGTextureNode *createTextureNode() Q_DECL_OVERRIDE; - virtual QSGRectangleNode *createRectangleNode() Q_DECL_OVERRIDE; - virtual void update() Q_DECL_OVERRIDE; - virtual void updateCursor(const QCursor &) Q_DECL_OVERRIDE; - virtual void resize(int width, int height) Q_DECL_OVERRIDE; - virtual void move(const QPoint &screenPos) Q_DECL_OVERRIDE; - virtual void inputMethodStateChanged(bool, bool) Q_DECL_OVERRIDE {} - virtual void setInputMethodHints(Qt::InputMethodHints) Q_DECL_OVERRIDE { } - virtual void setClearColor(const QColor &) Q_DECL_OVERRIDE { } + void initAsChild(WebContentsAdapterClient* container) override; + void initAsPopup(const QRect&) override; + QRectF screenRect() const override; + QRectF contentsRect() const override; + void setKeyboardFocus() override {} + bool hasKeyboardFocus() override { return false; } + void lockMouse() override {} + void unlockMouse() override {} + void show() override; + void hide() override; + bool isVisible() const override; + QWindow* window() const override; + QSGTexture *createTextureFromImage(const QImage &) override; + QSGLayer *createLayer() override; + QSGInternalImageNode *createImageNode() override; + QSGTextureNode *createTextureNode() override; + QSGRectangleNode *createRectangleNode() override; + void update() override; + void updateCursor(const QCursor &) override; + void resize(int width, int height) override; + void move(const QPoint &screenPos) override; + void inputMethodStateChanged(bool, bool) override {} + void setInputMethodHints(Qt::InputMethodHints) override { } + void setClearColor(const QColor &) override { } private: QScopedPointer<RenderWidgetHostViewQtDelegate> m_realDelegate; |