diff options
Diffstat (limited to 'src/webengine')
33 files changed, 624 insertions, 90 deletions
diff --git a/src/webengine/api/qquickwebenginecertificateerror.cpp b/src/webengine/api/qquickwebenginecertificateerror.cpp index ba22bf1f0..a39bbfb84 100644 --- a/src/webengine/api/qquickwebenginecertificateerror.cpp +++ b/src/webengine/api/qquickwebenginecertificateerror.cpp @@ -45,7 +45,8 @@ public: error(static_cast<QQuickWebEngineCertificateError::Error>(static_cast<int>(controller->error()))), description(controller->errorString()), overridable(controller->overridable()), - async(false) + async(false), + answered(false) { } @@ -54,6 +55,7 @@ public: QString description; bool overridable; bool async; + bool answered; }; @@ -102,7 +104,9 @@ void QQuickWebEngineCertificateError::defer() */ void QQuickWebEngineCertificateError::ignoreCertificateError() { - Q_D(const QQuickWebEngineCertificateError); + Q_D(QQuickWebEngineCertificateError); + + d->answered = true; QSharedPointer<CertificateErrorController> strongRefCert = d->weakRefCertErrorController.toStrongRef(); if (strongRefCert) @@ -116,7 +120,9 @@ void QQuickWebEngineCertificateError::ignoreCertificateError() */ void QQuickWebEngineCertificateError::rejectCertificate() { - Q_D(const QQuickWebEngineCertificateError); + Q_D(QQuickWebEngineCertificateError); + + d->answered = true; QSharedPointer<CertificateErrorController> strongRefCert = d->weakRefCertErrorController.toStrongRef(); if (strongRefCert) @@ -169,5 +175,11 @@ bool QQuickWebEngineCertificateError::deferred() const return d->async; } +bool QQuickWebEngineCertificateError::answered() const +{ + Q_D(const QQuickWebEngineCertificateError); + return d->answered; +} + QT_END_NAMESPACE diff --git a/src/webengine/api/qquickwebenginecertificateerror_p.h b/src/webengine/api/qquickwebenginecertificateerror_p.h index 08ebc83b6..18a1f90e5 100644 --- a/src/webengine/api/qquickwebenginecertificateerror_p.h +++ b/src/webengine/api/qquickwebenginecertificateerror_p.h @@ -83,6 +83,7 @@ public: QString description() const; bool overridable() const; bool deferred() const; + bool answered() const; private: Q_DISABLE_COPY(QQuickWebEngineCertificateError) diff --git a/src/webengine/api/qquickwebenginedownloaditem.cpp b/src/webengine/api/qquickwebenginedownloaditem.cpp index c1eaaadb1..c38f5ea1c 100644 --- a/src/webengine/api/qquickwebenginedownloaditem.cpp +++ b/src/webengine/api/qquickwebenginedownloaditem.cpp @@ -36,6 +36,9 @@ #include "qquickwebenginedownloaditem_p.h" #include "qquickwebenginedownloaditem_p_p.h" +#include "qquickwebengineprofile_p_p.h" + +using QtWebEngineCore::BrowserContextAdapterClient; QT_BEGIN_NAMESPACE diff --git a/src/webengine/api/qquickwebenginedownloaditem_p_p.h b/src/webengine/api/qquickwebenginedownloaditem_p_p.h index 9d054f5e0..fe45ca2a3 100644 --- a/src/webengine/api/qquickwebenginedownloaditem_p_p.h +++ b/src/webengine/api/qquickwebenginedownloaditem_p_p.h @@ -37,12 +37,13 @@ #ifndef QQUICKWEBENGINEDOWNLOADITEM_P_P_H #define QQUICKWEBENGINEDOWNLOADITEM_P_P_H +#include "browser_context_adapter_client.h" #include "qquickwebenginedownloaditem_p.h" -#include "qquickwebengineprofile_p_p.h" #include <private/qtwebengineglobal_p.h> #include <QString> QT_BEGIN_NAMESPACE +class QQuickWebEngineProfilePrivate; class QQuickWebEngineDownloadItemPrivate { QQuickWebEngineDownloadItem *q_ptr; @@ -59,7 +60,7 @@ public: qint64 receivedBytes; QString downloadPath; - void update(const BrowserContextAdapterClient::DownloadItemInfo &info); + void update(const QtWebEngineCore::BrowserContextAdapterClient::DownloadItemInfo &info); void updateState(QQuickWebEngineDownloadItem::DownloadState newState); }; diff --git a/src/webengine/api/qquickwebenginehistory.cpp b/src/webengine/api/qquickwebenginehistory.cpp index 3b6d7bb2f..9a737fbbe 100644 --- a/src/webengine/api/qquickwebenginehistory.cpp +++ b/src/webengine/api/qquickwebenginehistory.cpp @@ -68,7 +68,7 @@ int QQuickWebEngineHistoryListModelPrivate::offsetForIndex(int index) const return index - adapter()->currentNavigationEntryIndex(); } -WebContentsAdapter *QQuickWebEngineHistoryListModelPrivate::adapter() const +QtWebEngineCore::WebContentsAdapter *QQuickWebEngineHistoryListModelPrivate::adapter() const { return view->adapter.data(); } diff --git a/src/webengine/api/qquickwebenginehistory_p.h b/src/webengine/api/qquickwebenginehistory_p.h index 02f29b35b..cb6aff2bc 100644 --- a/src/webengine/api/qquickwebenginehistory_p.h +++ b/src/webengine/api/qquickwebenginehistory_p.h @@ -46,8 +46,6 @@ QT_BEGIN_NAMESPACE -class WebEngineHistory; -class WebEngineHistoryItem; class QQuickWebEngineHistory; class QQuickWebEngineHistoryPrivate; class QQuickWebEngineHistoryListModelPrivate; diff --git a/src/webengine/api/qquickwebenginehistory_p_p.h b/src/webengine/api/qquickwebenginehistory_p_p.h index 2ad2af26f..0d714b1b6 100644 --- a/src/webengine/api/qquickwebenginehistory_p_p.h +++ b/src/webengine/api/qquickwebenginehistory_p_p.h @@ -37,11 +37,13 @@ #ifndef QQUICKWEBENGINEHISTORY_P_P_H #define QQUICKWEBENGINEHISTORY_P_P_H +namespace QtWebEngineCore { class WebContentsAdapter; -class QQuickWebEngineHistoryListModel; -class QQuickWebEngineViewPrivate; +} QT_BEGIN_NAMESPACE +class QQuickWebEngineHistoryListModel; +class QQuickWebEngineViewPrivate; class QQuickWebEngineHistoryListModelPrivate { public: @@ -52,7 +54,7 @@ public: virtual int index(int) const; virtual int offsetForIndex(int) const; - WebContentsAdapter *adapter() const; + QtWebEngineCore::WebContentsAdapter *adapter() const; QQuickWebEngineViewPrivate *view; }; diff --git a/src/webengine/api/qquickwebenginenewviewrequest_p.h b/src/webengine/api/qquickwebenginenewviewrequest_p.h index a24ce3b79..062a2fa33 100644 --- a/src/webengine/api/qquickwebenginenewviewrequest_p.h +++ b/src/webengine/api/qquickwebenginenewviewrequest_p.h @@ -40,7 +40,9 @@ #include "qtwebengineglobal_p.h" #include "qquickwebengineview_p.h" +namespace QtWebEngineCore { class WebContentsAdapter; +} QT_BEGIN_NAMESPACE @@ -59,7 +61,7 @@ private: QQuickWebEngineNewViewRequest(); QQuickWebEngineView::NewViewDestination m_destination; bool m_isUserInitiated; - QExplicitlySharedDataPointer<WebContentsAdapter> m_adapter; + QExplicitlySharedDataPointer<QtWebEngineCore::WebContentsAdapter> m_adapter; friend class QQuickWebEngineViewPrivate; }; diff --git a/src/webengine/api/qquickwebengineprofile.cpp b/src/webengine/api/qquickwebengineprofile.cpp index 36992ca9f..718007c35 100644 --- a/src/webengine/api/qquickwebengineprofile.cpp +++ b/src/webengine/api/qquickwebengineprofile.cpp @@ -46,6 +46,8 @@ #include "browser_context_adapter.h" #include "web_engine_settings.h" +using QtWebEngineCore::BrowserContextAdapter; + QT_BEGIN_NAMESPACE QQuickWebEngineProfilePrivate::QQuickWebEngineProfilePrivate(BrowserContextAdapter* browserContext, bool ownsContext) diff --git a/src/webengine/api/qquickwebengineprofile_p.h b/src/webengine/api/qquickwebengineprofile_p.h index a18d81be4..ee91d7728 100644 --- a/src/webengine/api/qquickwebengineprofile_p.h +++ b/src/webengine/api/qquickwebengineprofile_p.h @@ -43,6 +43,10 @@ #include <QScopedPointer> #include <QString> +namespace QtWebEngineCore { +class BrowserContextAdapter; +} + QT_BEGIN_NAMESPACE class QQuickWebEngineDownloadItem; diff --git a/src/webengine/api/qquickwebengineprofile_p_p.h b/src/webengine/api/qquickwebengineprofile_p_p.h index 4810cec77..0cf11acec 100644 --- a/src/webengine/api/qquickwebengineprofile_p_p.h +++ b/src/webengine/api/qquickwebengineprofile_p_p.h @@ -37,8 +37,6 @@ #ifndef QQUICKWEBENGINEPROFILE_P_P_H #define QQUICKWEBENGINEPROFILE_P_P_H -class BrowserContextAdapter; - #include "browser_context_adapter_client.h" #include "qquickwebengineprofile_p.h" @@ -51,13 +49,13 @@ QT_BEGIN_NAMESPACE class QQuickWebEngineDownloadItem; class QQuickWebEngineSettings; -class QQuickWebEngineProfilePrivate : public BrowserContextAdapterClient { +class QQuickWebEngineProfilePrivate : public QtWebEngineCore::BrowserContextAdapterClient { public: Q_DECLARE_PUBLIC(QQuickWebEngineProfile) - QQuickWebEngineProfilePrivate(BrowserContextAdapter* browserContext, bool ownsContext); + QQuickWebEngineProfilePrivate(QtWebEngineCore::BrowserContextAdapter* browserContext, bool ownsContext); ~QQuickWebEngineProfilePrivate(); - BrowserContextAdapter *browserContext() const { return m_browserContext; } + QtWebEngineCore::BrowserContextAdapter *browserContext() const { return m_browserContext; } QQuickWebEngineSettings *settings() const { return m_settings.data(); } void cancelDownload(quint32 downloadId); @@ -70,8 +68,8 @@ private: friend class QQuickWebEngineViewPrivate; QQuickWebEngineProfile *q_ptr; QScopedPointer<QQuickWebEngineSettings> m_settings; - BrowserContextAdapter *m_browserContext; - QExplicitlySharedDataPointer<BrowserContextAdapter> m_browserContextRef; + QtWebEngineCore::BrowserContextAdapter *m_browserContext; + QExplicitlySharedDataPointer<QtWebEngineCore::BrowserContextAdapter> m_browserContextRef; QMap<quint32, QPointer<QQuickWebEngineDownloadItem> > m_ongoingDownloads; }; diff --git a/src/webengine/api/qquickwebenginescript.cpp b/src/webengine/api/qquickwebenginescript.cpp index 872ba1533..6ea6d01bc 100644 --- a/src/webengine/api/qquickwebenginescript.cpp +++ b/src/webengine/api/qquickwebenginescript.cpp @@ -41,6 +41,8 @@ #include <QtCore/QTimerEvent> #include "user_script_controller_host.h" +using QtWebEngineCore::UserScript; + QQuickWebEngineScript::QQuickWebEngineScript() : d_ptr(new QQuickWebEngineScriptPrivate) { @@ -70,7 +72,7 @@ QString QQuickWebEngineScript::toString() const } ret.append(QString::number(d->coreScript.worldId()) % QStringLiteral(", ") % (d->coreScript.runsOnSubFrames() ? QStringLiteral("true") : QStringLiteral("false")) - % QStringLiteral(", ") % d->coreScript.source() % QLatin1Char(')')); + % QStringLiteral(", ") % d->coreScript.sourceCode() % QLatin1Char(')')); return ret; } @@ -81,10 +83,10 @@ QString QQuickWebEngineScript::name() const } -QString QQuickWebEngineScript::source() const +QString QQuickWebEngineScript::sourceCode() const { Q_D(const QQuickWebEngineScript); - return d->coreScript.source(); + return d->coreScript.sourceCode(); } ASSERT_ENUMS_MATCH(QQuickWebEngineScript::Deferred, UserScript::AfterLoad) @@ -122,17 +124,16 @@ void QQuickWebEngineScript::setName(QString arg) Q_EMIT nameChanged(arg); } -void QQuickWebEngineScript::setSource(QString arg) +void QQuickWebEngineScript::setSourceCode(QString arg) { Q_D(QQuickWebEngineScript); - if (arg == source()) + if (arg == sourceCode()) return; d->aboutToUpdateUnderlyingScript(); - d->coreScript.setSource(arg); - Q_EMIT sourceChanged(arg); + d->coreScript.setSourceCode(arg); + Q_EMIT sourceCodeChanged(arg); } - void QQuickWebEngineScript::setInjectionPoint(QQuickWebEngineScript::InjectionPoint arg) { Q_D(QQuickWebEngineScript); @@ -178,7 +179,7 @@ void QQuickWebEngineScript::timerEvent(QTimerEvent *e) d->m_controllerHost->addUserScript(d->coreScript, d->m_adapter); } -void QQuickWebEngineScriptPrivate::bind(UserScriptControllerHost *scriptController, WebContentsAdapter *adapter) +void QQuickWebEngineScriptPrivate::bind(QtWebEngineCore::UserScriptControllerHost *scriptController, QtWebEngineCore::WebContentsAdapter *adapter) { aboutToUpdateUnderlyingScript(); m_adapter = adapter; diff --git a/src/webengine/api/qquickwebenginescript_p.h b/src/webengine/api/qquickwebenginescript_p.h index a42aed41b..55f0c782d 100644 --- a/src/webengine/api/qquickwebenginescript_p.h +++ b/src/webengine/api/qquickwebenginescript_p.h @@ -40,9 +40,6 @@ #include <private/qtwebengineglobal_p.h> #include <QtCore/QObject> -class UserScriptControllerHost; -class WebContentsAdapter; - QT_BEGIN_NAMESPACE class QQuickWebEngineScriptPrivate; class QQuickWebEngineView; @@ -53,7 +50,7 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineScript : public QObject Q_ENUMS(InjectionPoint) Q_ENUMS(ScriptWorldId) Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) - Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged) + Q_PROPERTY(QString sourceCode READ sourceCode WRITE setSourceCode NOTIFY sourceCodeChanged) Q_PROPERTY(InjectionPoint injectionPoint READ injectionPoint WRITE setInjectionPoint NOTIFY injectionPointChanged) Q_PROPERTY(ScriptWorldId worldId READ worldId WRITE setWorldId NOTIFY worldIdChanged) Q_PROPERTY(bool runOnSubframes READ runOnSubframes WRITE setRunOnSubframes NOTIFY runOnSubframesChanged) @@ -77,21 +74,21 @@ public: Q_INVOKABLE QString toString() const; QString name() const; - QString source() const; + QString sourceCode() const; InjectionPoint injectionPoint() const; ScriptWorldId worldId() const; bool runOnSubframes() const; public Q_SLOTS: void setName(QString arg); - void setSource(QString arg); + void setSourceCode(QString arg); void setInjectionPoint(InjectionPoint arg); void setWorldId(ScriptWorldId arg); void setRunOnSubframes(bool arg); Q_SIGNALS: void nameChanged(QString arg); - void sourceChanged(QString arg); + void sourceCodeChanged(QString arg); void injectionPointChanged(InjectionPoint arg); void worldIdChanged(ScriptWorldId arg); void runOnSubframesChanged(bool arg); @@ -101,7 +98,7 @@ protected: private: friend class QQuickWebEngineViewPrivate; - Q_DECLARE_PRIVATE(QQuickWebEngineScript); + Q_DECLARE_PRIVATE(QQuickWebEngineScript) QScopedPointer<QQuickWebEngineScriptPrivate> d_ptr; }; QT_END_NAMESPACE diff --git a/src/webengine/api/qquickwebenginescript_p_p.h b/src/webengine/api/qquickwebenginescript_p_p.h index 962a04cb2..7b5626fd1 100644 --- a/src/webengine/api/qquickwebenginescript_p_p.h +++ b/src/webengine/api/qquickwebenginescript_p_p.h @@ -43,6 +43,10 @@ #include "user_script.h" #include "web_contents_adapter.h" +namespace QtWebEngineCore { +class UserScriptControllerHost; +class WebContentsAdapter; +} // namespace QT_BEGIN_NAMESPACE @@ -51,12 +55,12 @@ public: Q_DECLARE_PUBLIC(QQuickWebEngineScript) QQuickWebEngineScriptPrivate(); void aboutToUpdateUnderlyingScript(); - void bind(UserScriptControllerHost *, WebContentsAdapter * = 0); + void bind(QtWebEngineCore::UserScriptControllerHost *, QtWebEngineCore::WebContentsAdapter * = 0); - UserScript coreScript; + QtWebEngineCore::UserScript coreScript; QBasicTimer m_basicTimer; - UserScriptControllerHost *m_controllerHost; - WebContentsAdapter *m_adapter; + QtWebEngineCore::UserScriptControllerHost *m_controllerHost; + QtWebEngineCore::WebContentsAdapter *m_adapter; private: QQuickWebEngineScript *q_ptr; diff --git a/src/webengine/api/qquickwebenginesettings.cpp b/src/webengine/api/qquickwebenginesettings.cpp index 343ffef0e..70a9d4b59 100644 --- a/src/webengine/api/qquickwebenginesettings.cpp +++ b/src/webengine/api/qquickwebenginesettings.cpp @@ -43,6 +43,8 @@ QT_BEGIN_NAMESPACE +using QtWebEngineCore::WebEngineSettings; + QQuickWebEngineSettings::QQuickWebEngineSettings(QQuickWebEngineSettings *parentSettings) : d_ptr(new WebEngineSettings(parentSettings ? parentSettings->d_ptr.data() : 0)) { } diff --git a/src/webengine/api/qquickwebenginesettings_p.h b/src/webengine/api/qquickwebenginesettings_p.h index 40d04fdf8..68c85ea7f 100644 --- a/src/webengine/api/qquickwebenginesettings_p.h +++ b/src/webengine/api/qquickwebenginesettings_p.h @@ -41,7 +41,9 @@ #include <QObject> #include <QScopedPointer> +namespace QtWebEngineCore { class WebEngineSettings; +} QT_BEGIN_NAMESPACE @@ -111,7 +113,7 @@ private: void setParentSettings(QQuickWebEngineSettings *parentSettings); - QScopedPointer<WebEngineSettings> d_ptr; + QScopedPointer<QtWebEngineCore::WebEngineSettings> d_ptr; }; QT_END_NAMESPACE diff --git a/src/webengine/api/qquickwebenginetestsupport.cpp b/src/webengine/api/qquickwebenginetestsupport.cpp new file mode 100644 index 000000000..0bb16ae14 --- /dev/null +++ b/src/webengine/api/qquickwebenginetestsupport.cpp @@ -0,0 +1,125 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWebEngine module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickwebenginetestsupport_p.h" + +#include "qquickwebengineloadrequest_p.h" + +QT_BEGIN_NAMESPACE +using namespace QtWebEngineCore; + +QQuickWebEngineJavaScriptDialog::QQuickWebEngineJavaScriptDialog(QSharedPointer<JavaScriptDialogController> controller) +{ + m_dialogController = controller; +} + +QString QQuickWebEngineJavaScriptDialog::message() const +{ + return m_dialogController->message(); +} + +QString QQuickWebEngineJavaScriptDialog::defaultValue() const +{ + return m_dialogController->defaultPrompt(); +} + +void QQuickWebEngineJavaScriptDialog::reject() +{ + QMetaObject::invokeMethod(m_dialogController.data(), "reject"); +} + +void QQuickWebEngineJavaScriptDialog::accept(const QString &input) +{ + if (!input.isNull()) + QMetaObject::invokeMethod(m_dialogController.data(), "textProvided", Q_ARG(QString, input)); + QMetaObject::invokeMethod(m_dialogController.data(), "accept"); +} + +QQuickWebEngineErrorPage::QQuickWebEngineErrorPage() +{ +} + +void QQuickWebEngineErrorPage::loadFinished(bool success, const QUrl &url) +{ + // Loading of the error page should not fail. + Q_ASSERT(success); + + QQuickWebEngineLoadRequest loadRequest(url, QQuickWebEngineView::LoadSucceededStatus); + Q_EMIT loadingChanged(&loadRequest); + return; +} + +void QQuickWebEngineErrorPage::loadStarted(const QUrl &provisionalUrl) +{ + QQuickWebEngineLoadRequest loadRequest(provisionalUrl, QQuickWebEngineView::LoadStartedStatus); + Q_EMIT loadingChanged(&loadRequest); +} + +QQuickWebEngineTestSupport::QQuickWebEngineTestSupport() + : m_errorPage(new QQuickWebEngineErrorPage()) +{ +} + +QQuickWebEngineErrorPage *QQuickWebEngineTestSupport::errorPage() const +{ + return m_errorPage.data(); +} + +void QQuickWebEngineTestSupport::testDialog(QSharedPointer<JavaScriptDialogController> dialogController) +{ + Q_ASSERT(!dialogController.isNull()); + + QQuickWebEngineJavaScriptDialog dialog(dialogController); + switch (dialogController->type()) { + case WebContentsAdapterClient::AlertDialog: + Q_EMIT alertDialog(&dialog); + break; + case WebContentsAdapterClient::ConfirmDialog: + Q_EMIT confirmDialog(&dialog); + break; + case WebContentsAdapterClient::PromptDialog: + Q_EMIT promptDialog(&dialog); + break; + case WebContentsAdapterClient::InternalAuthorizationDialog: + break; + default: + Q_UNREACHABLE(); + } +} + +QT_END_NAMESPACE + +#include "moc_qquickwebenginetestsupport_p.cpp" diff --git a/src/webengine/api/qquickwebenginetestsupport_p.h b/src/webengine/api/qquickwebenginetestsupport_p.h new file mode 100644 index 000000000..06950e416 --- /dev/null +++ b/src/webengine/api/qquickwebenginetestsupport_p.h @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWebEngine module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKWEBENGINETESTSUPPORT_P_H +#define QQUICKWEBENGINETESTSUPPORT_P_H + +#include <private/qtwebengineglobal_p.h> + +#include "javascript_dialog_controller.h" +#include <QObject> +#include <QUrl> + +QT_BEGIN_NAMESPACE + +class QQuickWebEngineLoadRequest; + +class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineJavaScriptDialog : public QObject { + Q_OBJECT + Q_PROPERTY(QString message READ message CONSTANT) + Q_PROPERTY(QString defaultValue READ defaultValue CONSTANT) + +public: + QQuickWebEngineJavaScriptDialog(QSharedPointer<QtWebEngineCore::JavaScriptDialogController>); + QString message() const; + QString defaultValue() const; + +public Q_SLOTS: + void reject(); + void accept(const QString &input = QString()); + +private: + QSharedPointer<QtWebEngineCore::JavaScriptDialogController> m_dialogController; +}; + +class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineErrorPage : public QObject { + Q_OBJECT + +public: + QQuickWebEngineErrorPage(); + + void loadFinished(bool success, const QUrl &url); + void loadStarted(const QUrl &provisionalUrl); + +Q_SIGNALS: + void loadingChanged(QQuickWebEngineLoadRequest *loadRequest); +}; + +class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineTestSupport : public QObject { + Q_OBJECT + Q_PROPERTY(QQuickWebEngineErrorPage *errorPage READ errorPage) + +public: + QQuickWebEngineTestSupport(); + QQuickWebEngineErrorPage *errorPage() const; + void testDialog(QSharedPointer<QtWebEngineCore::JavaScriptDialogController> dialog); + +Q_SIGNALS: + void alertDialog(QQuickWebEngineJavaScriptDialog *dialog); + void confirmDialog(QQuickWebEngineJavaScriptDialog *dialog); + void promptDialog(QQuickWebEngineJavaScriptDialog *dialog); + +private: + QScopedPointer<QQuickWebEngineErrorPage> m_errorPage; +}; + +QT_END_NAMESPACE + +#endif // QQUICKWEBENGINETESTSUPPORT_P_H diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index 48d741d20..9a64b9ac6 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -50,6 +50,11 @@ #include "qquickwebengineprofile_p_p.h" #include "qquickwebenginesettings_p.h" #include "qquickwebenginescript_p_p.h" + +#ifdef ENABLE_QML_TESTSUPPORT_API +#include "qquickwebenginetestsupport_p.h" +#endif + #include "render_widget_host_view_qt_delegate_quick.h" #include "render_widget_host_view_qt_delegate_quickwindow.h" #include "ui_delegates_manager.h" @@ -73,6 +78,7 @@ #endif // QT_NO_ACCESSIBILITY QT_BEGIN_NAMESPACE +using namespace QtWebEngineCore; #ifndef QT_NO_ACCESSIBILITY static QAccessibleInterface *webAccessibleFactory(const QString &, QObject *object) @@ -90,6 +96,9 @@ QQuickWebEngineViewPrivate::QQuickWebEngineViewPrivate() , m_history(new QQuickWebEngineHistory(this)) , m_profile(QQuickWebEngineProfile::defaultProfile()) , m_settings(new QQuickWebEngineSettings(m_profile->settings())) +#ifdef ENABLE_QML_TESTSUPPORT_API + , m_testSupport(0) +#endif , contextMenuExtraItems(0) , loadProgress(0) , m_isFullScreen(false) @@ -221,6 +230,12 @@ void QQuickWebEngineViewPrivate::navigationRequested(int navigationType, const Q void QQuickWebEngineViewPrivate::javascriptDialog(QSharedPointer<JavaScriptDialogController> dialog) { +#ifdef ENABLE_QML_TESTSUPPORT_API + if (m_testSupport) { + m_testSupport->testDialog(dialog); + return; + } +#endif ui()->showDialog(dialog); } @@ -228,12 +243,13 @@ void QQuickWebEngineViewPrivate::allowCertificateError(const QSharedPointer<Cert { Q_Q(QQuickWebEngineView); - m_certificateErrorController = errorController; QQuickWebEngineCertificateError *quickController = new QQuickWebEngineCertificateError(errorController); QQmlEngine::setObjectOwnership(quickController, QQmlEngine::JavaScriptOwnership); Q_EMIT q->certificateError(quickController); - if (!quickController->deferred()) + if (!quickController->deferred() && !quickController->answered()) quickController->rejectCertificate(); + else + m_certificateErrorControllers.append(errorController); } void QQuickWebEngineViewPrivate::runGeolocationPermissionRequest(const QUrl &url) @@ -300,11 +316,20 @@ qreal QQuickWebEngineViewPrivate::dpiScale() const return m_dpiScale; } -void QQuickWebEngineViewPrivate::loadStarted(const QUrl &provisionalUrl) +void QQuickWebEngineViewPrivate::loadStarted(const QUrl &provisionalUrl, bool isErrorPage) { Q_Q(QQuickWebEngineView); + if (isErrorPage) { +#ifdef ENABLE_QML_TESTSUPPORT_API + if (m_testSupport) + m_testSupport->errorPage()->loadStarted(provisionalUrl); +#endif + return; + } + isLoading = true; m_history->reset(); + m_certificateErrorControllers.clear(); QQuickWebEngineLoadRequest loadRequest(provisionalUrl, QQuickWebEngineView::LoadStartedStatus); Q_EMIT q->loadingChanged(&loadRequest); } @@ -323,9 +348,18 @@ Q_STATIC_ASSERT(static_cast<int>(WebEngineError::NoErrorDomain) == static_cast<i Q_STATIC_ASSERT(static_cast<int>(WebEngineError::CertificateErrorDomain) == static_cast<int>(QQuickWebEngineView::CertificateErrorDomain)); Q_STATIC_ASSERT(static_cast<int>(WebEngineError::DnsErrorDomain) == static_cast<int>(QQuickWebEngineView::DnsErrorDomain)); -void QQuickWebEngineViewPrivate::loadFinished(bool success, const QUrl &url, int errorCode, const QString &errorDescription) +void QQuickWebEngineViewPrivate::loadFinished(bool success, const QUrl &url, bool isErrorPage, int errorCode, const QString &errorDescription) { Q_Q(QQuickWebEngineView); + + if (isErrorPage) { +#ifdef ENABLE_QML_TESTSUPPORT_API + if (m_testSupport) + m_testSupport->errorPage()->loadFinished(success, url); +#endif + return; + } + isLoading = false; m_history->reset(); if (errorCode == WebEngineError::UserAbortedError) { @@ -400,12 +434,14 @@ void QQuickWebEngineViewPrivate::close() void QQuickWebEngineViewPrivate::requestFullScreen(bool fullScreen) { - Q_EMIT e->fullScreenRequested(fullScreen); + Q_Q(QQuickWebEngineView); + QQuickWebEngineFullScreenRequest request(this, fullScreen); + Q_EMIT q->fullScreenRequested(request); } bool QQuickWebEngineViewPrivate::isFullScreen() const { - return e->isFullScreen(); + return m_isFullScreen; } void QQuickWebEngineViewPrivate::javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) @@ -701,6 +737,20 @@ void QQuickWebEngineViewPrivate::setProfile(QQuickWebEngineProfile *profile) } } +#ifdef ENABLE_QML_TESTSUPPORT_API +QQuickWebEngineTestSupport *QQuickWebEngineView::testSupport() const +{ + Q_D(const QQuickWebEngineView); + return d->m_testSupport; +} + +void QQuickWebEngineView::setTestSupport(QQuickWebEngineTestSupport *testSupport) +{ + Q_D(QQuickWebEngineView); + d->m_testSupport = testSupport; +} +#endif + void QQuickWebEngineViewPrivate::didRunJavaScript(quint64 requestId, const QVariant &result) { Q_Q(QQuickWebEngineView); @@ -780,15 +830,11 @@ qreal QQuickWebEngineView::zoomFactor() const return d->adapter->currentZoomFactor(); } -void QQuickWebEngineViewExperimental::setIsFullScreen(bool fullscreen) -{ - d_ptr->m_isFullScreen = fullscreen; - emit isFullScreenChanged(); -} -bool QQuickWebEngineViewExperimental::isFullScreen() const +bool QQuickWebEngineView::isFullScreen() const { - return d_ptr->m_isFullScreen; + Q_D(const QQuickWebEngineView); + return d->m_isFullScreen; } void QQuickWebEngineViewExperimental::setExtraContextMenuEntriesComponent(QQmlComponent *contextMenuExtras) @@ -804,7 +850,7 @@ QQmlComponent *QQuickWebEngineViewExperimental::extraContextMenuEntriesComponent return d_ptr->contextMenuExtraItems; } -void QQuickWebEngineViewExperimental::findText(const QString &subString, FindFlags options, const QJSValue &callback) +void QQuickWebEngineView::findText(const QString &subString, FindFlags options, const QJSValue &callback) { Q_D(QQuickWebEngineView); if (!d->adapter) @@ -906,6 +952,15 @@ void QQuickWebEngineView::goBackOrForward(int offset) d->adapter->navigateToIndex(index); } +void QQuickWebEngineView::fullScreenCancelled() +{ + Q_D(QQuickWebEngineView); + if (d->m_isFullScreen) { + d->m_isFullScreen = false; + Q_EMIT isFullScreenChanged(); + } +} + void QQuickWebEngineView::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) { QQuickItem::geometryChanged(newGeometry, oldGeometry); @@ -969,6 +1024,26 @@ void QQuickWebEngineView::componentComplete() d->ensureContentsAdapter(); } +QQuickWebEngineFullScreenRequest::QQuickWebEngineFullScreenRequest() + : viewPrivate(0) + , m_toggleOn(false) +{ +} + +QQuickWebEngineFullScreenRequest::QQuickWebEngineFullScreenRequest(QQuickWebEngineViewPrivate *viewPrivate, bool toggleOn) + : viewPrivate(viewPrivate) + , m_toggleOn(toggleOn) +{ +} + +void QQuickWebEngineFullScreenRequest::accept() +{ + if (viewPrivate && viewPrivate->m_isFullScreen != m_toggleOn) { + viewPrivate->m_isFullScreen = m_toggleOn; + Q_EMIT viewPrivate->q_ptr->isFullScreenChanged(); + } +} + QQuickWebEngineViewExperimental::QQuickWebEngineViewExperimental(QQuickWebEngineViewPrivate *viewPrivate) : q_ptr(0) , d_ptr(viewPrivate) diff --git a/src/webengine/api/qquickwebengineview_p.h b/src/webengine/api/qquickwebengineview_p.h index 93e9ad61b..248ee62b6 100644 --- a/src/webengine/api/qquickwebengineview_p.h +++ b/src/webengine/api/qquickwebengineview_p.h @@ -54,6 +54,25 @@ class QQuickWebEngineSettings; class QQuickWebEngineViewExperimental; class QQuickWebEngineViewPrivate; +#ifdef ENABLE_QML_TESTSUPPORT_API +class QQuickWebEngineTestSupport; +#endif + +class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineFullScreenRequest { + Q_GADGET + Q_PROPERTY(bool toggleOn READ toggleOn) +public: + QQuickWebEngineFullScreenRequest(); + QQuickWebEngineFullScreenRequest(QQuickWebEngineViewPrivate *viewPrivate, bool toggleOn); + + Q_INVOKABLE void accept(); + bool toggleOn() { return m_toggleOn; } + +private: + QQuickWebEngineViewPrivate *viewPrivate; + bool m_toggleOn; +}; + class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineView : public QQuickItem { Q_OBJECT Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged) @@ -63,18 +82,25 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineView : public QQuickItem { Q_PROPERTY(QString title READ title NOTIFY titleChanged) Q_PROPERTY(bool canGoBack READ canGoBack NOTIFY urlChanged) Q_PROPERTY(bool canGoForward READ canGoForward NOTIFY urlChanged) + Q_PROPERTY(bool isFullScreen READ isFullScreen NOTIFY isFullScreenChanged REVISION 1) Q_PROPERTY(qreal zoomFactor READ zoomFactor WRITE setZoomFactor NOTIFY zoomFactorChanged REVISION 1) Q_PROPERTY(QQuickWebEngineProfile *profile READ profile WRITE setProfile FINAL REVISION 1) Q_PROPERTY(QQuickWebEngineSettings *settings READ settings REVISION 1) Q_PROPERTY(QQuickWebEngineHistory *navigationHistory READ navigationHistory CONSTANT FINAL REVISION 1) Q_PROPERTY(QQmlWebChannel *webChannel READ webChannel WRITE setWebChannel NOTIFY webChannelChanged REVISION 1) Q_PROPERTY(QQmlListProperty<QQuickWebEngineScript> userScripts READ userScripts FINAL) + +#ifdef ENABLE_QML_TESTSUPPORT_API + Q_PROPERTY(QQuickWebEngineTestSupport *testSupport READ testSupport WRITE setTestSupport FINAL) +#endif + Q_ENUMS(NavigationRequestAction); Q_ENUMS(NavigationType); Q_ENUMS(LoadStatus); Q_ENUMS(ErrorDomain); Q_ENUMS(NewViewDestination); Q_ENUMS(JavaScriptConsoleMessageLevel); + Q_FLAGS(FindFlags); public: QQuickWebEngineView(QQuickItem *parent = 0); @@ -88,6 +114,7 @@ public: QString title() const; bool canGoBack() const; bool canGoForward() const; + bool isFullScreen() const; qreal zoomFactor() const; void setZoomFactor(qreal arg); @@ -142,6 +169,12 @@ public: ErrorMessageLevel }; + enum FindFlag { + FindBackward = 1, + FindCaseSensitively = 2, + }; + Q_DECLARE_FLAGS(FindFlags, FindFlag) + // QmlParserStatus virtual void componentComplete() Q_DECL_OVERRIDE; @@ -154,6 +187,11 @@ public: void setWebChannel(QQmlWebChannel *); QQuickWebEngineHistory *navigationHistory() const; +#ifdef ENABLE_QML_TESTSUPPORT_API + QQuickWebEngineTestSupport *testSupport() const; + void setTestSupport(QQuickWebEngineTestSupport *testSupport); +#endif + public Q_SLOTS: void runJavaScript(const QString&, const QJSValue & = QJSValue()); void loadHtml(const QString &html, const QUrl &baseUrl = QUrl()); @@ -162,6 +200,8 @@ public Q_SLOTS: void goBackOrForward(int index); void reload(); void stop(); + Q_REVISION(1) void findText(const QString &subString, FindFlags options = 0, const QJSValue &callback = QJSValue()); + Q_REVISION(1) void fullScreenCancelled(); Q_SIGNALS: void titleChanged(); @@ -173,6 +213,8 @@ Q_SIGNALS: void navigationRequested(QQuickWebEngineNavigationRequest *request); void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString &message, int lineNumber, const QString &sourceID); Q_REVISION(1) void certificateError(QQuickWebEngineCertificateError *error); + Q_REVISION(1) void fullScreenRequested(const QQuickWebEngineFullScreenRequest &request); + Q_REVISION(1) void isFullScreenChanged(); Q_REVISION(1) void newViewRequested(QQuickWebEngineNewViewRequest *request); Q_REVISION(1) void zoomFactorChanged(qreal arg); Q_REVISION(1) void webChannelChanged(); @@ -197,5 +239,6 @@ private: QT_END_NAMESPACE QML_DECLARE_TYPE(QQuickWebEngineView) +Q_DECLARE_METATYPE(QQuickWebEngineFullScreenRequest) #endif // QQUICKWEBENGINEVIEW_P_H diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h index 98a7a9c5f..b3907d3a4 100644 --- a/src/webengine/api/qquickwebengineview_p_p.h +++ b/src/webengine/api/qquickwebengineview_p_p.h @@ -46,8 +46,10 @@ #include <QtCore/qcompilerdetection.h> #include <QtGui/qaccessibleobject.h> +namespace QtWebEngineCore { class WebContentsAdapter; class UIDelegatesManager; +} QT_BEGIN_NAMESPACE class QQuickWebEngineView; @@ -55,6 +57,10 @@ class QQmlComponent; class QQmlContext; class QQuickWebEngineSettings; +#ifdef ENABLE_QML_TESTSUPPORT_API +class QQuickWebEngineTestSupport; +#endif + class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineViewport : public QObject { Q_OBJECT Q_PROPERTY(qreal devicePixelRatio READ devicePixelRatio WRITE setDevicePixelRatio NOTIFY devicePixelRatioChanged) @@ -77,9 +83,7 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineViewExperimental : public QObjec Q_OBJECT Q_PROPERTY(QQuickWebEngineViewport *viewport READ viewport) Q_PROPERTY(QQmlComponent *extraContextMenuEntriesComponent READ extraContextMenuEntriesComponent WRITE setExtraContextMenuEntriesComponent NOTIFY extraContextMenuEntriesComponentChanged) - Q_PROPERTY(bool isFullScreen READ isFullScreen WRITE setIsFullScreen NOTIFY isFullScreenChanged) Q_ENUMS(Feature) - Q_FLAGS(FindFlags) public: enum Feature { @@ -89,25 +93,14 @@ public: Geolocation }; - enum FindFlag { - FindBackward = 1, - FindCaseSensitively = 2, - }; - Q_DECLARE_FLAGS(FindFlags, FindFlag) - - void setIsFullScreen(bool fullscreen); - bool isFullScreen() const; QQuickWebEngineViewport *viewport() const; void setExtraContextMenuEntriesComponent(QQmlComponent *); QQmlComponent *extraContextMenuEntriesComponent() const; public Q_SLOTS: - void findText(const QString&, FindFlags, const QJSValue & = QJSValue()); void grantFeaturePermission(const QUrl &securityOrigin, Feature, bool granted); Q_SIGNALS: - void fullScreenRequested(bool fullScreen); - void isFullScreenChanged(); void extraContextMenuEntriesComponentChanged(); void featurePermissionRequested(const QUrl &securityOrigin, Feature feature); void loadVisuallyCommitted(); @@ -121,7 +114,7 @@ private: Q_DECLARE_PUBLIC(QQuickWebEngineView) }; -class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineViewPrivate : public WebContentsAdapterClient +class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineViewPrivate : public QtWebEngineCore::WebContentsAdapterClient { public: Q_DECLARE_PUBLIC(QQuickWebEngineView) @@ -131,10 +124,10 @@ public: QQuickWebEngineViewExperimental *experimental() const; QQuickWebEngineViewport *viewport() const; - UIDelegatesManager *ui(); + QtWebEngineCore::UIDelegatesManager *ui(); - virtual RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegate(RenderWidgetHostViewQtDelegateClient *client) Q_DECL_OVERRIDE; - virtual RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegateForPopup(RenderWidgetHostViewQtDelegateClient *client) Q_DECL_OVERRIDE; + 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; @@ -143,20 +136,20 @@ public: virtual void selectionChanged() Q_DECL_OVERRIDE { } virtual QRectF viewportRect() const Q_DECL_OVERRIDE; virtual qreal dpiScale() const Q_DECL_OVERRIDE; - virtual void loadStarted(const QUrl &provisionalUrl) 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, int errorCode = 0, const QString &errorDescription = QString()) 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(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, bool userGesture, const QRect &) Q_DECL_OVERRIDE; + virtual void adoptNewWindow(QtWebEngineCore::WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, bool userGesture, const QRect &) Q_DECL_OVERRIDE; virtual void close() Q_DECL_OVERRIDE; virtual void requestFullScreen(bool) Q_DECL_OVERRIDE; virtual bool isFullScreen() const Q_DECL_OVERRIDE; - virtual bool contextMenuRequested(const WebEngineContextMenuData &) Q_DECL_OVERRIDE; + virtual bool 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<JavaScriptDialogController>) Q_DECL_OVERRIDE; - virtual void runFileChooser(FilePickerController *controller) Q_DECL_OVERRIDE; + virtual void javascriptDialog(QSharedPointer<QtWebEngineCore::JavaScriptDialogController>) Q_DECL_OVERRIDE; + virtual void runFileChooser(QtWebEngineCore::FilePickerController *controller) 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 { } @@ -169,14 +162,14 @@ public: #ifndef QT_NO_ACCESSIBILITY virtual QObject *accessibilityParentObject() Q_DECL_OVERRIDE; #endif // QT_NO_ACCESSIBILITY - virtual WebEngineSettings *webEngineSettings() const Q_DECL_OVERRIDE; + virtual QtWebEngineCore::WebEngineSettings *webEngineSettings() const Q_DECL_OVERRIDE; virtual void allowCertificateError(const QSharedPointer<CertificateErrorController> &errorController); virtual void runGeolocationPermissionRequest(QUrl const&) Q_DECL_OVERRIDE; - virtual BrowserContextAdapter *browserContextAdapter() Q_DECL_OVERRIDE; + virtual QtWebEngineCore::BrowserContextAdapter *browserContextAdapter() Q_DECL_OVERRIDE; void setDevicePixelRatio(qreal); - void adoptWebContents(WebContentsAdapter *webContents); + void adoptWebContents(QtWebEngineCore::WebContentsAdapter *webContents); void setProfile(QQuickWebEngineProfile *profile); void ensureContentsAdapter(); @@ -186,12 +179,15 @@ public: static QQuickWebEngineScript *userScripts_at(QQmlListProperty<QQuickWebEngineScript> *p, int idx); static void userScripts_clear(QQmlListProperty<QQuickWebEngineScript> *p); - QExplicitlySharedDataPointer<WebContentsAdapter> adapter; + QExplicitlySharedDataPointer<QtWebEngineCore::WebContentsAdapter> adapter; QScopedPointer<QQuickWebEngineViewExperimental> e; QScopedPointer<QQuickWebEngineViewport> v; QScopedPointer<QQuickWebEngineHistory> m_history; QQuickWebEngineProfile *m_profile; QScopedPointer<QQuickWebEngineSettings> m_settings; +#ifdef ENABLE_QML_TESTSUPPORT_API + QQuickWebEngineTestSupport *m_testSupport; +#endif QQmlComponent *contextMenuExtraItems; QUrl explicitUrl; QUrl icon; @@ -200,10 +196,10 @@ public: bool isLoading; qreal devicePixelRatio; QMap<quint64, QJSValue> m_callbacks; - QSharedPointer<CertificateErrorController> m_certificateErrorController; + QList<QSharedPointer<CertificateErrorController> > m_certificateErrorControllers; private: - QScopedPointer<UIDelegatesManager> m_uIDelegatesManager; + QScopedPointer<QtWebEngineCore::UIDelegatesManager> m_uIDelegatesManager; QList<QQuickWebEngineScript *> m_userScripts; qreal m_dpiScale; }; diff --git a/src/webengine/doc/src/qquickwebengineview_lgpl.qdoc b/src/webengine/doc/src/qquickwebengineview_lgpl.qdoc index 893c358ae..73c084dab 100644 --- a/src/webengine/doc/src/qquickwebengineview_lgpl.qdoc +++ b/src/webengine/doc/src/qquickwebengineview_lgpl.qdoc @@ -206,6 +206,45 @@ */ /*! + \qmlmethod void WebEngineView::findText(string subString) + \since QtWebEngine 1.1 + Finds the specified string, \a subString, in the page. + + To clear the selection, just pass an empty string. +*/ + +/*! + \qmlmethod void WebEngineView::findText(string subString, FindFlags options) + \since QtWebEngine 1.1 + Finds the specified string, \a subString, in the page, using the given \a options. + + To clear the selection, just pass an empty string. + + \code + findText("Qt", WebEngineView.FindBackward | WebEngineView.FindCaseSensitively); + \endcode +*/ + +/*! + \qmlmethod void WebEngineView::findText(string subString, FindFlags options, variant resultCallback) + \since QtWebEngine 1.1 + Finds the specified string, \a subString, in the page, using the given \a options. + + To clear the selection, just pass an empty string. + + The \a resultCallback must take a boolean parameter. It will be called with + a value of true if the \a subString was found; otherwise the callback value + will be false. + + \code + findText("Qt", WebEngineView.FindCaseSensitively, function(success) { + if (success) + console.log("Qt was found!"); + }); + \endcode +*/ + +/*! \qmlsignal WebEngineView::loadingChanged(loadRequest) This signal is emitted when a page load begins, ends, or fails. @@ -245,14 +284,13 @@ */ /*! - \qmlsignal WebEngineView::linkHovered(hoveredUrl, hoveredTitle) + \qmlsignal WebEngineView::linkHovered(hoveredUrl) Within a mouse-driven interface, this signal is emitted when a mouse pointer passes over a link, corresponding to the \c{mouseover} DOM event. This event may also occur in touch interfaces for \c{mouseover} events that are not cancelled with \c{preventDefault()}. \a{hoveredUrl} - provides the link's location, and \a{hoveredTitle} is any available - link text. + provides the link's location. The corresponding handler is onLinkHovered. */ @@ -365,3 +403,16 @@ \sa WebEngineNewViewRequest::destination */ + +/*! + \qmlproperty enumeration WebEngineView::FindFlags + + This enum describes the options available to the findText() function. The options + can be OR-ed together from the following list: + + \value FindBackward Searches backwards instead of forwards. + \value FindCaseSensitively By default findText() works case insensitive. Specifying + this option changes the behavior to a case sensitive find operation. + + \sa WebEngineView::findText() +*/ diff --git a/src/webengine/plugin/plugin.cpp b/src/webengine/plugin/plugin.cpp index dc10a50a7..c5ef11a5e 100644 --- a/src/webengine/plugin/plugin.cpp +++ b/src/webengine/plugin/plugin.cpp @@ -81,6 +81,8 @@ public: QObject::tr("Cannot create a separate instance of NavigationHistory")); qmlRegisterUncreatableType<QQuickWebEngineHistoryListModel>(uri, 1, 1, "NavigationHistoryListModel", QObject::tr("Cannot create a separate instance of NavigationHistory")); + qmlRegisterUncreatableType<QQuickWebEngineFullScreenRequest>(uri, 1, 1, "FullScreenRequest", + QObject::tr("Cannot create a separate instance of FullScreenRequest")); } }; diff --git a/src/webengine/plugin/testsupport/plugin.cpp b/src/webengine/plugin/testsupport/plugin.cpp new file mode 100644 index 000000000..667ffffd6 --- /dev/null +++ b/src/webengine/plugin/testsupport/plugin.cpp @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWebEngine module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtQml> + +#include "qquickwebenginetestsupport_p.h" + +QT_BEGIN_NAMESPACE + +class QtWebEngineTestSupportPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface/1.0") +public: + virtual void registerTypes(const char *uri) + { + qWarning("\nWARNING: This project is using the testsupport QML API extensions for QtWebEngine and is therefore tied to a specific QtWebEngine release.\n" + "WARNING: The testsupport API will change from version to version, or even be removed. You have been warned!\n"); + + Q_ASSERT(QLatin1String(uri) == QLatin1String("QtWebEngine.testsupport")); + + qmlRegisterType<QQuickWebEngineTestSupport>(uri, 1, 0, "WebEngineTestSupport"); + qmlRegisterUncreatableType<QQuickWebEngineErrorPage>(uri, 1, 0, "WebEngineErrorPage", + QObject::tr("Cannot create a separate instance of WebEngineErrorPage")); + qmlRegisterUncreatableType<QQuickWebEngineJavaScriptDialog>(uri, 1, 0, "WebEngineJavaScriptDialog", + QObject::tr("Cannot create a separate instance of WebEngineJavaScriptDialog")); + } +}; + +QT_END_NAMESPACE + +#include "plugin.moc" diff --git a/src/webengine/plugin/testsupport/qmldir b/src/webengine/plugin/testsupport/qmldir new file mode 100644 index 000000000..588c9d2d4 --- /dev/null +++ b/src/webengine/plugin/testsupport/qmldir @@ -0,0 +1,3 @@ +module QtWebEngine.testsupport +plugin qtwebenginetestsupportplugin +typeinfo plugins.qmltypes diff --git a/src/webengine/plugin/testsupport/testsupport.pro b/src/webengine/plugin/testsupport/testsupport.pro new file mode 100644 index 000000000..1a45ad56a --- /dev/null +++ b/src/webengine/plugin/testsupport/testsupport.pro @@ -0,0 +1,13 @@ +CXX_MODULE = qml +TARGET = qtwebenginetestsupportplugin +TARGETPATH = QtWebEngine/testsupport +IMPORT_VERSION = 1.0 + +QT += webengine qml quick +QT_PRIVATE += webengine-private + +INCLUDEPATH += $$QTWEBENGINE_ROOT/src/core $$QTWEBENGINE_ROOT/src/webengine $$QTWEBENGINE_ROOT/src/webengine/api + +SOURCES = plugin.cpp + +load(qml_plugin) diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp index bfcda558b..0a534ac2c 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp +++ b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp @@ -46,6 +46,8 @@ #include <private/qquickwindow_p.h> #include <private/qsgcontext_p.h> +namespace QtWebEngineCore { + RenderWidgetHostViewQtDelegateQuick::RenderWidgetHostViewQtDelegateQuick(RenderWidgetHostViewQtDelegateClient *client, bool isPopup) : m_client(client) , m_isPopup(isPopup) @@ -273,3 +275,5 @@ void RenderWidgetHostViewQtDelegateQuick::onWindowPosChanged() { m_client->windowBoundsChanged(); } + +} // namespace QtWebEngineCore 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 cb1b6a83f..ddd0e4d9e 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quick.h +++ b/src/webengine/render_widget_host_view_qt_delegate_quick.h @@ -41,6 +41,8 @@ #include <QQuickItem> +namespace QtWebEngineCore { + class RenderWidgetHostViewQtDelegateQuick : public QQuickItem, public RenderWidgetHostViewQtDelegate { Q_OBJECT @@ -95,4 +97,7 @@ private: bool m_isPopup; bool m_initialized; }; + +} // namespace QtWebEngineCore + #endif diff --git a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp index c395fdd4d..39c48ea5c 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp +++ b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp @@ -39,6 +39,7 @@ #include "qquickwebengineview_p_p.h" #include <QQuickItem> +namespace QtWebEngineCore { RenderWidgetHostViewQtDelegateQuickWindow::RenderWidgetHostViewQtDelegateQuickWindow(RenderWidgetHostViewQtDelegate *realDelegate) : m_realDelegate(realDelegate) @@ -136,3 +137,5 @@ void RenderWidgetHostViewQtDelegateQuickWindow::setTooltip(const QString &toolti { Q_UNUSED(tooltip); } + +} // namespace QtWebEngineCore 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 6bd21d15a..cda51a1ab 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h +++ b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h @@ -44,6 +44,8 @@ #include <QQuickWindow> #include <QScopedPointer> +namespace QtWebEngineCore { + class RenderWidgetHostViewQtDelegateQuickWindow : public QQuickWindow , public RenderWidgetHostViewQtDelegate { public: @@ -76,4 +78,6 @@ private: QScopedPointer<RenderWidgetHostViewQtDelegate> m_realDelegate; }; +} // namespace QtWebEngineCore + #endif // RENDER_WIDGET_HOST_VIEW_QT_DELEGATE_QUICKWINDOW_H diff --git a/src/webengine/ui_delegates_manager.cpp b/src/webengine/ui_delegates_manager.cpp index ed51bd8f2..44c763f37 100644 --- a/src/webengine/ui_delegates_manager.cpp +++ b/src/webengine/ui_delegates_manager.cpp @@ -52,6 +52,8 @@ // Uncomment for QML debugging //#define UI_DELEGATES_DEBUG +namespace QtWebEngineCore { + #define NO_SEPARATOR #if defined(Q_OS_WIN) #define FILE_NAME_CASE_STATEMENT(TYPE, COMPONENT) \ @@ -387,3 +389,5 @@ void UIDelegatesManager::showFilePicker(FilePickerController *controller) QMetaObject::invokeMethod(filePicker, "open"); } + +} // namespace QtWebEngineCore diff --git a/src/webengine/ui_delegates_manager.h b/src/webengine/ui_delegates_manager.h index 797aaec74..9367bff30 100644 --- a/src/webengine/ui_delegates_manager.h +++ b/src/webengine/ui_delegates_manager.h @@ -63,14 +63,16 @@ #define MEMBER_DECLARATION(TYPE, COMPONENT) \ QQmlComponent *COMPONENT##Component -class JavaScriptDialogController; -class FilePickerController; QT_BEGIN_NAMESPACE class QObject; class QQmlContext; class QQuickWebEngineView; QT_END_NAMESPACE +namespace QtWebEngineCore { +class JavaScriptDialogController; +class FilePickerController; + const char *defaultPropertyName(QObject *obj); class MenuItemHandler : public QObject { @@ -130,8 +132,10 @@ private: FOR_EACH_COMPONENT_TYPE(MEMBER_DECLARATION, SEMICOLON_SEPARATOR) - Q_DISABLE_COPY(UIDelegatesManager); + Q_DISABLE_COPY(UIDelegatesManager) }; +} // namespace QtWebEngineCore + #endif // UI_DELEGATES_MANAGER_H diff --git a/src/webengine/webengine.pro b/src/webengine/webengine.pro index 154286e9e..6cba9c5d9 100644 --- a/src/webengine/webengine.pro +++ b/src/webengine/webengine.pro @@ -48,4 +48,11 @@ HEADERS = \ render_widget_host_view_qt_delegate_quickwindow.h \ ui_delegates_manager.h +isQMLTestSupportApiEnabled() { + SOURCES += api/qquickwebenginetestsupport.cpp + HEADERS += api/qquickwebenginetestsupport_p.h + + DEFINES += ENABLE_QML_TESTSUPPORT_API +} + load(qt_module) |