diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-18 14:03:11 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-18 14:03:11 +0200 |
commit | 8d473cf9743f1d30a16a27114e93bd5af5648d23 (patch) | |
tree | cdca40d0353886b3ca52f33a2d7b8f1c0011aafc /Source/WebKit2/UIProcess/API/qt | |
parent | 1b914638db989aaa98631a1c1e02c7b2d44805d8 (diff) | |
download | qtwebkit-8d473cf9743f1d30a16a27114e93bd5af5648d23.tar.gz |
Imported WebKit commit 1350e72f7345ced9da2bd9980deeeb5a8d62fab4 (http://svn.webkit.org/repository/webkit/trunk@117578)
Weekly snapshot
Diffstat (limited to 'Source/WebKit2/UIProcess/API/qt')
-rw-r--r-- | Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp | 3 | ||||
-rw-r--r-- | Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp | 173 | ||||
-rw-r--r-- | Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h | 11 | ||||
-rw-r--r-- | Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h | 10 | ||||
-rw-r--r-- | Source/WebKit2/UIProcess/API/qt/qwebkittest.cpp (renamed from Source/WebKit2/UIProcess/API/qt/qwebviewportinfo.cpp) | 65 | ||||
-rw-r--r-- | Source/WebKit2/UIProcess/API/qt/qwebkittest_p.h (renamed from Source/WebKit2/UIProcess/API/qt/qwebviewportinfo_p.h) | 49 | ||||
-rw-r--r-- | Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro | 9 | ||||
-rw-r--r-- | Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro | 17 | ||||
-rw-r--r-- | Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_doubleTapToZoom.qml | 106 | ||||
-rw-r--r-- | Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_javaScriptDialogs.qml | 32 |
10 files changed, 278 insertions, 197 deletions
diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp b/Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp index 203c72b7e..e02ccc9b2 100644 --- a/Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp +++ b/Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp @@ -29,6 +29,7 @@ #include "WebPageProxy.h" #include "qquickwebpage_p_p.h" #include "qquickwebview_p.h" +#include "qwebkittest_p.h" #include <QtQuick/QQuickCanvas> using namespace WebKit; @@ -110,6 +111,7 @@ void QQuickWebPage::setContentsSize(const QSizeF& size) d->contentsSize = size; d->updateSize(); + emit d->viewportItem->experimental()->test()->contentsSizeChanged(); } const QSizeF& QQuickWebPage::contentsSize() const @@ -122,6 +124,7 @@ void QQuickWebPage::setContentsScale(qreal scale) ASSERT(scale > 0); d->contentsScale = scale; d->updateSize(); + emit d->viewportItem->experimental()->test()->contentsScaleCommitted(); } qreal QQuickWebPage::contentsScale() const diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp b/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp index 167c50f6a..935842146 100644 --- a/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp +++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp @@ -39,19 +39,17 @@ #endif #include "WebPageGroup.h" #include "WebPreferences.h" - #include "qquicknetworkreply_p.h" #include "qquicknetworkrequest_p.h" #include "qquickwebpage_p_p.h" #include "qquickwebview_p_p.h" #include "qwebdownloaditem_p_p.h" +#include "qwebkittest_p.h" #include "qwebloadrequest_p.h" #include "qwebnavigationhistory_p.h" #include "qwebnavigationhistory_p_p.h" #include "qwebpreferences_p.h" #include "qwebpreferences_p_p.h" -#include "qwebviewportinfo_p.h" - #include <JavaScriptCore/InitializeThreading.h> #include <JavaScriptCore/JSBase.h> #include <JavaScriptCore/JSRetainPtr.h> @@ -266,6 +264,7 @@ QQuickWebViewPrivate::QQuickWebViewPrivate(QQuickWebView* viewport) , m_navigatorQtObjectEnabled(false) , m_renderToOffscreenBuffer(false) , m_dialogActive(false) + , m_allowAnyHTTPSCertificateForLocalHost(false) , m_loadProgress(0) { viewport->setClip(true); @@ -495,47 +494,36 @@ void QQuickWebViewPrivate::_q_onReceivedResponseFromDownload(QWebDownloadItem* d void QQuickWebViewPrivate::runJavaScriptAlert(const QString& alertText) { - if (!alertDialog) - return; - Q_Q(QQuickWebView); - QtDialogRunner dialogRunner; - if (!dialogRunner.initForAlert(alertDialog, q, alertText)) + QtDialogRunner dialogRunner(q); + if (!dialogRunner.initForAlert(alertText)) return; - execDialogRunner(dialogRunner); + dialogRunner.run(); } bool QQuickWebViewPrivate::runJavaScriptConfirm(const QString& message) { - if (!confirmDialog) - return true; - Q_Q(QQuickWebView); - QtDialogRunner dialogRunner; - if (!dialogRunner.initForConfirm(confirmDialog, q, message)) + QtDialogRunner dialogRunner(q); + if (!dialogRunner.initForConfirm(message)) return true; - execDialogRunner(dialogRunner); + dialogRunner.run(); return dialogRunner.wasAccepted(); } QString QQuickWebViewPrivate::runJavaScriptPrompt(const QString& message, const QString& defaultValue, bool& ok) { - if (!promptDialog) { - ok = true; - return defaultValue; - } - Q_Q(QQuickWebView); - QtDialogRunner dialogRunner; - if (!dialogRunner.initForPrompt(promptDialog, q, message, defaultValue)) { + QtDialogRunner dialogRunner(q); + if (!dialogRunner.initForPrompt(message, defaultValue)) { ok = true; return defaultValue; } - execDialogRunner(dialogRunner); + dialogRunner.run(); ok = dialogRunner.wasAccepted(); return dialogRunner.result(); @@ -543,15 +531,12 @@ QString QQuickWebViewPrivate::runJavaScriptPrompt(const QString& message, const void QQuickWebViewPrivate::handleAuthenticationRequiredRequest(const QString& hostname, const QString& realm, const QString& prefilledUsername, QString& username, QString& password) { - if (!authenticationDialog) - return; - Q_Q(QQuickWebView); - QtDialogRunner dialogRunner; - if (!dialogRunner.initForAuthentication(authenticationDialog, q, hostname, realm, prefilledUsername)) + QtDialogRunner dialogRunner(q); + if (!dialogRunner.initForAuthentication(hostname, realm, prefilledUsername)) return; - execDialogRunner(dialogRunner); + dialogRunner.run(); username = dialogRunner.username(); password = dialogRunner.password(); @@ -559,15 +544,12 @@ void QQuickWebViewPrivate::handleAuthenticationRequiredRequest(const QString& ho void QQuickWebViewPrivate::handleProxyAuthenticationRequiredRequest(const QString& hostname, uint16_t port, const QString& prefilledUsername, QString& username, QString& password) { - if (!proxyAuthenticationDialog) - return; - Q_Q(QQuickWebView); - QtDialogRunner dialogRunner; - if (!dialogRunner.initForProxyAuthentication(proxyAuthenticationDialog, q, hostname, port, prefilledUsername)) + QtDialogRunner dialogRunner(q); + if (!dialogRunner.initForProxyAuthentication(hostname, port, prefilledUsername)) return; - execDialogRunner(dialogRunner); + dialogRunner.run(); username = dialogRunner.username(); password = dialogRunner.password(); @@ -575,43 +557,30 @@ void QQuickWebViewPrivate::handleProxyAuthenticationRequiredRequest(const QStrin bool QQuickWebViewPrivate::handleCertificateVerificationRequest(const QString& hostname) { - if (!certificateVerificationDialog) - return false; - Q_Q(QQuickWebView); - QtDialogRunner dialogRunner; - if (!dialogRunner.initForCertificateVerification(certificateVerificationDialog, q, hostname)) - return false; - - execDialogRunner(dialogRunner); - return dialogRunner.wasAccepted(); -} + if (m_allowAnyHTTPSCertificateForLocalHost + && (hostname == QStringLiteral("127.0.0.1") || hostname == QStringLiteral("localhost"))) + return true; -void QQuickWebViewPrivate::execDialogRunner(QtDialogRunner& dialogRunner) -{ - setViewInAttachedProperties(dialogRunner.dialog()); + QtDialogRunner dialogRunner(q); + if (!dialogRunner.initForCertificateVerification(hostname)) + return false; - disableMouseEvents(); - m_dialogActive = true; + dialogRunner.run(); - dialogRunner.exec(); - m_dialogActive = false; - enableMouseEvents(); + return dialogRunner.wasAccepted(); } void QQuickWebViewPrivate::chooseFiles(WKOpenPanelResultListenerRef listenerRef, const QStringList& selectedFileNames, QtWebPageUIClient::FileChooserType type) { Q_Q(QQuickWebView); - if (!filePicker) - return; - - QtDialogRunner dialogRunner; - if (!dialogRunner.initForFilePicker(filePicker, q, selectedFileNames, (type == QtWebPageUIClient::MultipleFilesSelection))) + QtDialogRunner dialogRunner(q); + if (!dialogRunner.initForFilePicker(selectedFileNames, (type == QtWebPageUIClient::MultipleFilesSelection))) return; - execDialogRunner(dialogRunner); + dialogRunner.run(); if (dialogRunner.wasAccepted()) { QStringList selectedPaths = dialogRunner.filePaths(); @@ -628,20 +597,41 @@ void QQuickWebViewPrivate::chooseFiles(WKOpenPanelResultListenerRef listenerRef, quint64 QQuickWebViewPrivate::exceededDatabaseQuota(const QString& databaseName, const QString& displayName, WKSecurityOriginRef securityOrigin, quint64 currentQuota, quint64 currentOriginUsage, quint64 currentDatabaseUsage, quint64 expectedUsage) { - if (!databaseQuotaDialog) - return 0; - Q_Q(QQuickWebView); - QtDialogRunner dialogRunner; - if (!dialogRunner.initForDatabaseQuotaDialog(databaseQuotaDialog, q, databaseName, displayName, securityOrigin, currentQuota, currentOriginUsage, currentDatabaseUsage, expectedUsage)) + QtDialogRunner dialogRunner(q); + if (!dialogRunner.initForDatabaseQuotaDialog(databaseName, displayName, securityOrigin, currentQuota, currentOriginUsage, currentDatabaseUsage, expectedUsage)) return 0; - execDialogRunner(dialogRunner); + dialogRunner.run(); return dialogRunner.wasAccepted() ? dialogRunner.databaseQuota() : 0; } -void QQuickWebViewPrivate::setViewInAttachedProperties(QObject* object) +/* The 'WebView' attached property allows items spawned by the webView to + refer back to the originating webView through 'WebView.view', similar + to how ListView.view and GridView.view is exposed to items. */ +QQuickWebViewAttached::QQuickWebViewAttached(QObject* object) + : QObject(object) + , m_view(0) +{ +} + +void QQuickWebViewAttached::setView(QQuickWebView* view) +{ + if (m_view == view) + return; + m_view = view; + emit viewChanged(); +} + +QQuickWebViewAttached* QQuickWebView::qmlAttachedProperties(QObject* object) +{ + return new QQuickWebViewAttached(object); +} + + + +void QQuickWebViewPrivate::addAttachedPropertyTo(QObject* object) { Q_Q(QQuickWebView); QQuickWebViewAttached* attached = static_cast<QQuickWebViewAttached*>(qmlAttachedPropertiesObject<QQuickWebView>(object)); @@ -874,7 +864,7 @@ void QQuickWebViewFlickablePrivate::didChangeViewportProperties(const WebCore::V interactionEngine->setCSSScale(attr.initialScale); this->attributes = attr; - q->experimental()->viewportInfo()->didUpdateViewportConstraints(); + emit q->experimental()->test()->viewportChanged(); // If the web app successively changes the viewport on purpose // it wants to be in control and we should disable animations. @@ -903,8 +893,6 @@ void QQuickWebViewFlickablePrivate::updateViewportSize() void QQuickWebViewFlickablePrivate::_q_contentViewportChanged(const QPointF& trajectoryVector) { Q_Q(QQuickWebView); - // This is only for our QML ViewportInfo debugging API. - q->experimental()->viewportInfo()->didUpdateCurrentScale(); DrawingAreaProxy* drawingArea = webPageProxy->drawingArea(); if (!drawingArea) @@ -913,6 +901,8 @@ void QQuickWebViewFlickablePrivate::_q_contentViewportChanged(const QPointF& tra const QRect visibleRect(visibleContentsRect()); float scale = pageView->contentsScale(); + emit q->experimental()->test()->contentsScaleChanged(); + QRectF accurateVisibleRect(q->boundingRect()); accurateVisibleRect.translate(contentPos()); drawingArea->setVisibleContentsRect(visibleRect, scale, trajectoryVector, FloatPoint(accurateVisibleRect.x(), accurateVisibleRect.y())); @@ -948,14 +938,13 @@ void QQuickWebViewFlickablePrivate::didChangeContentsSize(const QSize& newSize) Q_Q(QQuickWebView); QSize viewportSize = q->boundingRect().size().toSize(); - pageView->setContentsSize(newSize); - q->experimental()->viewportInfo()->didUpdateContentsSize(); + pageView->setContentsSize(newSize); // emits contentsSizeChanged() float minimumScale = WebCore::computeMinimumScaleFactorForContentContained(attributes, viewportSize, newSize); if (!qFuzzyCompare(minimumScale, attributes.minimumScale)) { interactionEngine->setCSSScaleBounds(minimumScale, attributes.maximumScale); - q->experimental()->viewportInfo()->didUpdateViewportConstraints(); + emit q->experimental()->test()->viewportChanged(); if (!interactionEngine->hadUserInteraction() && !pageIsSuspended) interactionEngine->setCSSScale(minimumScale); @@ -978,27 +967,12 @@ void QQuickWebViewFlickablePrivate::didChangeContentsSize(const QSize& newSize) \sa WebNavigationRequest */ -QQuickWebViewAttached::QQuickWebViewAttached(QObject* object) - : QObject(object) - , m_view(0) -{ - -} - -void QQuickWebViewAttached::setView(QQuickWebView* view) -{ - if (m_view == view) - return; - m_view = view; - emit viewChanged(); -} - QQuickWebViewExperimental::QQuickWebViewExperimental(QQuickWebView *webView) : QObject(webView) , q_ptr(webView) , d_ptr(webView->d_ptr.data()) , schemeParent(new QObject(this)) - , m_viewportInfo(new QWebViewportInfo(webView->d_ptr.data(), this)) + , m_test(new QWebKitTest(webView->d_ptr.data(), this)) { } @@ -1409,9 +1383,9 @@ void QQuickWebViewExperimental::goBackTo(int index) d_ptr->navigationHistory->d->goBackTo(index); } -QWebViewportInfo* QQuickWebViewExperimental::viewportInfo() +QWebKitTest* QQuickWebViewExperimental::test() { - return m_viewportInfo; + return m_test; } QQuickWebPage* QQuickWebViewExperimental::page() @@ -1633,11 +1607,6 @@ QQuickWebViewExperimental* QQuickWebView::experimental() const return m_experimental; } -QQuickWebViewAttached* QQuickWebView::qmlAttachedProperties(QObject* object) -{ - return new QQuickWebViewAttached(object); -} - /*! \internal */ @@ -1738,6 +1707,7 @@ void QQuickWebView::mouseReleaseEvent(QMouseEvent* event) void QQuickWebView::mouseDoubleClickEvent(QMouseEvent* event) { Q_D(QQuickWebView); + // If a MouseButtonDblClick was received then we got a MouseButtonPress before // handleMousePressEvent will take care of double clicks. d->pageView->eventHandler()->handleMousePressEvent(event); @@ -1893,4 +1863,17 @@ void QQuickWebView::runJavaScriptInMainFrame(const QString &script, QObject *rec d->webPageProxy.get()->runJavaScriptInMainFrame(script, ScriptValueCallback::create(closure, javaScriptCallback)); } +bool QQuickWebView::allowAnyHTTPSCertificateForLocalHost() const +{ + Q_D(const QQuickWebView); + return d->m_allowAnyHTTPSCertificateForLocalHost; +} + +void QQuickWebView::setAllowAnyHTTPSCertificateForLocalHost(bool allow) +{ + Q_D(QQuickWebView); + d->m_allowAnyHTTPSCertificateForLocalHost = allow; +} + + #include "moc_qquickwebview_p.cpp" diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h index 4bdd0fbbd..773f735a9 100644 --- a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h +++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h @@ -38,7 +38,7 @@ class QWebDownloadItem; class QWebNavigationHistory; class QWebPreferences; class QWebPermissionRequest; -class QWebViewportInfo; +class QWebKitTest; class QQuickNetworkReply; namespace WTR { @@ -149,6 +149,9 @@ public: qreal zoomFactor() const; void setZoomFactor(qreal); void runJavaScriptInMainFrame(const QString& script, QObject* receiver, const char* method); + // Used to automatically accept the HTTPS certificate in WTR. No other use intended. + bool allowAnyHTTPSCertificateForLocalHost() const; + void setAllowAnyHTTPSCertificateForLocalHost(bool allow); public Q_SLOTS: void loadHtml(const QString& html, const QUrl& baseUrl = QUrl()); @@ -263,7 +266,7 @@ class QWEBKIT_EXPORT QQuickWebViewExperimental : public QObject { Q_PROPERTY(QQmlComponent* filePicker READ filePicker WRITE setFilePicker NOTIFY filePickerChanged) Q_PROPERTY(QQmlComponent* databaseQuotaDialog READ databaseQuotaDialog WRITE setDatabaseQuotaDialog NOTIFY databaseQuotaDialogChanged) Q_PROPERTY(QWebPreferences* preferences READ preferences CONSTANT FINAL) - Q_PROPERTY(QWebViewportInfo* viewportInfo READ viewportInfo CONSTANT FINAL) + Q_PROPERTY(QWebKitTest* test READ test CONSTANT FINAL) Q_PROPERTY(QQmlListProperty<QQuickUrlSchemeDelegate> urlSchemeDelegates READ schemeDelegates) Q_PROPERTY(QString userAgent READ userAgent WRITE setUserAgent NOTIFY userAgentChanged) Q_PROPERTY(double devicePixelRatio READ devicePixelRatio WRITE setDevicePixelRatio NOTIFY devicePixelRatioChanged) @@ -300,7 +303,7 @@ public: double devicePixelRatio() const; void setDevicePixelRatio(double); - QWebViewportInfo* viewportInfo(); + QWebKitTest* test(); QWebPreferences* preferences() const; QWebNavigationHistory* navigationHistory() const; @@ -357,7 +360,7 @@ private: QQuickWebView* q_ptr; QQuickWebViewPrivate* d_ptr; QObject* schemeParent; - QWebViewportInfo* m_viewportInfo; + QWebKitTest* m_test; friend class WebKit::QtWebPageUIClient; diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h index de62d39bb..ebd06e3ea 100644 --- a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h +++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h @@ -48,7 +48,7 @@ class WebPageProxy; } class QWebNavigationHistory; -class QWebViewportInfo; +class QWebKitTest; QT_BEGIN_NAMESPACE class QQmlComponent; @@ -56,10 +56,11 @@ QT_END_NAMESPACE class QQuickWebViewPrivate { Q_DECLARE_PUBLIC(QQuickWebView) + friend class WebKit::QtDialogRunner; friend class QQuickWebViewExperimental; friend class QQuickWebPage; friend class QWebPreferencesPrivate; - friend class QWebViewportInfo; + friend class QWebKitTest; public: static QQuickWebViewPrivate* get(QQuickWebView* q) { return q->d_ptr.data(); } @@ -116,11 +117,9 @@ public: bool handleCertificateVerificationRequest(const QString& hostname); void handleProxyAuthenticationRequiredRequest(const QString& hostname, uint16_t port, const QString& prefilledUsername, QString& username, QString& password); - void execDialogRunner(WebKit::QtDialogRunner&); - void setRenderToOffscreenBuffer(bool enable) { m_renderToOffscreenBuffer = enable; } void setTransparentBackground(bool); - void setViewInAttachedProperties(QObject*); + void addAttachedPropertyTo(QObject*); void setIcon(const QUrl&); bool navigatorQtObjectEnabled() const; @@ -199,6 +198,7 @@ protected: bool m_navigatorQtObjectEnabled; bool m_renderToOffscreenBuffer; bool m_dialogActive; + bool m_allowAnyHTTPSCertificateForLocalHost; QUrl m_iconURL; int m_loadProgress; }; diff --git a/Source/WebKit2/UIProcess/API/qt/qwebviewportinfo.cpp b/Source/WebKit2/UIProcess/API/qt/qwebkittest.cpp index ea16732f5..8311528b5 100644 --- a/Source/WebKit2/UIProcess/API/qt/qwebviewportinfo.cpp +++ b/Source/WebKit2/UIProcess/API/qt/qwebkittest.cpp @@ -19,30 +19,55 @@ */ #include "config.h" -#include "QtViewportInteractionEngine.h" -#include "qwebviewportinfo_p.h" +#include "qwebkittest_p.h" +#include "QtViewportInteractionEngine.h" +#include "QtWebPageEventHandler.h" #include "qquickwebview_p.h" #include "qquickwebview_p_p.h" using namespace WebKit; -QWebViewportInfo::QWebViewportInfo(QQuickWebViewPrivate* webViewPrivate, QObject* parent) +QWebKitTest::QWebKitTest(QQuickWebViewPrivate* webViewPrivate, QObject* parent) : QObject(parent) , m_webViewPrivate(webViewPrivate) { } -QWebViewportInfo::~QWebViewportInfo() +QWebKitTest::~QWebKitTest() +{ +} + +bool QWebKitTest::touchDoubleTap(QObject* item, qreal x, qreal y, int delay) { + if (!qobject_cast<QQuickWebView*>(item)) { + // FIXME: We only support the actual web view for now. + qWarning("Touch event \"DoubleTap\" not accepted by receiving item"); + return false; + } + + // FIXME: implement delay using QTest::qWait() or similar. + Q_UNUSED(delay); + + QPointF localPos(x, y); + + QTouchEvent::TouchPoint point; + point.setLastPos(localPos); + QRectF touchRect(0, 0, 40, 40); + touchRect.moveCenter(localPos); + point.setRect(touchRect); + + m_webViewPrivate->pageView->eventHandler()->handleDoubleTapEvent(point); + + return true; } -QSize QWebViewportInfo::contentsSize() const +QSize QWebKitTest::contentsSize() const { return QSize(m_webViewPrivate->pageView->contentsSize().toSize()); } -QVariant QWebViewportInfo::currentScale() const +QVariant QWebKitTest::contentsScale() const { if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine()) return interactionEngine->currentCSSScale(); @@ -50,17 +75,17 @@ QVariant QWebViewportInfo::currentScale() const return m_webViewPrivate->attributes.initialScale; } -QVariant QWebViewportInfo::devicePixelRatio() const +QVariant QWebKitTest::devicePixelRatio() const { return m_webViewPrivate->attributes.devicePixelRatio; } -QVariant QWebViewportInfo::initialScale() const +QVariant QWebKitTest::initialScale() const { return m_webViewPrivate->attributes.initialScale; } -QVariant QWebViewportInfo::minimumScale() const +QVariant QWebKitTest::minimumScale() const { if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine()) return interactionEngine->m_minimumScale; @@ -68,7 +93,7 @@ QVariant QWebViewportInfo::minimumScale() const return m_webViewPrivate->attributes.minimumScale; } -QVariant QWebViewportInfo::maximumScale() const +QVariant QWebKitTest::maximumScale() const { if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine()) return interactionEngine->m_maximumScale; @@ -76,28 +101,12 @@ QVariant QWebViewportInfo::maximumScale() const return m_webViewPrivate->attributes.maximumScale; } -QVariant QWebViewportInfo::isScalable() const +QVariant QWebKitTest::isScalable() const { return !!m_webViewPrivate->attributes.userScalable; } -QVariant QWebViewportInfo::layoutSize() const +QVariant QWebKitTest::layoutSize() const { return QSizeF(m_webViewPrivate->attributes.layoutSize.width(), m_webViewPrivate->attributes.layoutSize.height()); } - -void QWebViewportInfo::didUpdateContentsSize() -{ - emit contentsSizeUpdated(); -} - -void QWebViewportInfo::didUpdateCurrentScale() -{ - emit currentScaleUpdated(); -} - -void QWebViewportInfo::didUpdateViewportConstraints() -{ - emit viewportConstraintsUpdated(); - emit currentScaleUpdated(); -} diff --git a/Source/WebKit2/UIProcess/API/qt/qwebviewportinfo_p.h b/Source/WebKit2/UIProcess/API/qt/qwebkittest_p.h index d3060bbe6..f7c7180c1 100644 --- a/Source/WebKit2/UIProcess/API/qt/qwebviewportinfo_p.h +++ b/Source/WebKit2/UIProcess/API/qt/qwebkittest_p.h @@ -18,8 +18,8 @@ * */ -#ifndef qwebviewportinfo_p_h -#define qwebviewportinfo_p_h +#ifndef qwebkittest_p_h +#define qwebkittest_p_h #include "qwebkitglobal.h" @@ -28,31 +28,40 @@ #include <QtCore/QSize> #include <QtCore/QVariant> #include <QtQml/QtQml> +#include <QtQuick/qquickitem.h> class QQuickWebViewPrivate; -class QWEBKIT_EXPORT QWebViewportInfo : public QObject { +class QWEBKIT_EXPORT QWebKitTest : public QObject { Q_OBJECT - Q_PROPERTY(QSize contentsSize READ contentsSize NOTIFY contentsSizeUpdated) - Q_PROPERTY(QVariant currentScale READ currentScale NOTIFY currentScaleUpdated) - Q_PROPERTY(QVariant devicePixelRatio READ devicePixelRatio NOTIFY viewportConstraintsUpdated) - Q_PROPERTY(QVariant initialScale READ initialScale NOTIFY viewportConstraintsUpdated) - Q_PROPERTY(QVariant isScalable READ isScalable NOTIFY viewportConstraintsUpdated) - Q_PROPERTY(QVariant maximumScale READ maximumScale NOTIFY viewportConstraintsUpdated) - Q_PROPERTY(QVariant minimumScale READ minimumScale NOTIFY viewportConstraintsUpdated) - Q_PROPERTY(QVariant layoutSize READ layoutSize NOTIFY viewportConstraintsUpdated) + + Q_PROPERTY(QSize contentsSize READ contentsSize NOTIFY contentsSizeChanged) + + Q_PROPERTY(QVariant contentsScale READ contentsScale NOTIFY contentsScaleChanged) + + Q_PROPERTY(QVariant devicePixelRatio READ devicePixelRatio NOTIFY viewportChanged) + Q_PROPERTY(QVariant initialScale READ initialScale NOTIFY viewportChanged) + Q_PROPERTY(QVariant isScalable READ isScalable NOTIFY viewportChanged) + Q_PROPERTY(QVariant maximumScale READ maximumScale NOTIFY viewportChanged) + Q_PROPERTY(QVariant minimumScale READ minimumScale NOTIFY viewportChanged) + Q_PROPERTY(QVariant layoutSize READ layoutSize NOTIFY viewportChanged) signals: - void contentsSizeUpdated(); - void currentScaleUpdated(); - void viewportConstraintsUpdated(); + void contentsSizeChanged(); + void contentsScaleChanged(); + void contentsScaleCommitted(); + void viewportChanged(); + +public slots: + bool touchDoubleTap(QObject* item, qreal x, qreal y, int delay = -1); public: - QWebViewportInfo(QQuickWebViewPrivate* webviewPrivate, QObject* parent = 0); - virtual ~QWebViewportInfo(); + QWebKitTest(QQuickWebViewPrivate* webviewPrivate, QObject* parent = 0); + virtual ~QWebKitTest(); QSize contentsSize() const; - QVariant currentScale() const; + QVariant contentsScale() const; + QVariant devicePixelRatio() const; QVariant initialScale() const; QVariant isScalable() const; @@ -60,12 +69,8 @@ public: QVariant maximumScale() const; QVariant minimumScale() const; - void didUpdateContentsSize(); - void didUpdateCurrentScale(); - void didUpdateViewportConstraints(); - private: QQuickWebViewPrivate* m_webViewPrivate; }; -#endif // qwebviewportinfo_p +#endif // qwebkittest_p diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro index 59a3ca5b4..11733ce48 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro +++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro @@ -15,10 +15,5 @@ DEFINES += QUICK_TEST_SOURCE_DIR=\"\\\"$$PWD$${QMAKE_DIR_SEP}DesktopBehavior\\\" DEFINES += IMPORT_DIR=\"\\\"$${ROOT_BUILD_DIR}$${QMAKE_DIR_SEP}imports\\\"\" OTHER_FILES += \ - DesktopBehavior/DesktopWebView.qml \ - DesktopBehavior/tst_linkHovered.qml \ - DesktopBehavior/tst_loadHtml.qml \ - DesktopBehavior/tst_messaging.qml \ - DesktopBehavior/tst_navigationRequested.qml \ - DesktopBehavior/tst_singleFileupload.qml \ - DesktopBehavior/tst_multiFileupload.qml + DesktopBehavior/* \ + common/* diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro index 57307f07a..5cc6f35f5 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro +++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro @@ -14,18 +14,5 @@ DEFINES += QUICK_TEST_SOURCE_DIR=\"\\\"$$PWD$${QMAKE_DIR_SEP}WebView\\\"\" DEFINES += IMPORT_DIR=\"\\\"$${ROOT_BUILD_DIR}$${QMAKE_DIR_SEP}imports\\\"\" OTHER_FILES += \ - WebView/tst_favIconLoad.qml \ - WebView/tst_download.qml \ - WebView/tst_geopermission.qml \ - WebView/tst_itemSelector.qml \ - WebView/tst_javaScriptDialogs.qml \ - WebView/tst_loadFail.qml \ - WebView/tst_loadIgnore.qml \ - WebView/tst_loadHtml.qml \ - WebView/tst_loadProgress.qml \ - WebView/tst_loadProgressSignal.qml \ - WebView/tst_preferences.qml \ - WebView/tst_properties.qml \ - WebView/tst_titleChanged.qml \ - WebView/tst_applicationScheme.qml \ - WebView/tst_origin.qml + WebView/* \ + common/* diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_doubleTapToZoom.qml b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_doubleTapToZoom.qml new file mode 100644 index 000000000..904f60feb --- /dev/null +++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_doubleTapToZoom.qml @@ -0,0 +1,106 @@ +import QtQuick 2.0 +import QtTest 1.0 +import QtWebKit 3.0 +import QtWebKit.experimental 1.0 +import Test 1.0 +import "../common" + +Item { + TestWebView { + id: webView + width: 480 + height: 720 + + property variant result + + experimental.test.onContentsScaleCommitted: scaleChanged() + + property variant content: "data:text/html," + + "<head>" + + " <meta name='viewport' content='width=device-width'>" + + "</head>" + + "<body>" + + " <div id='target' " + + " style='position:absolute; left:20; top:20; width:200; height:200;'>" + + " </div>" + + "</body>" + + signal resultReceived + signal scaleChanged + } + + SignalSpy { + id: resultSpy + target: webView + signalName: "resultReceived" + } + + SignalSpy { + id: scaleSpy + target: webView + signalName: "scaleChanged" + } + + TestCase { + name: "DoubleTapToZoom" + + property variant test: webView.experimental.test + + // Delayed windowShown to workaround problems with Qt5 in debug mode. + when: false + Timer { + running: parent.windowShown + repeat: false + interval: 1 + onTriggered: parent.when = true + } + + function init() { + resultSpy.clear() + scaleSpy.clear() + } + + function documentSize() { + resultSpy.clear(); + var result; + + webView.experimental.evaluateJavaScript( + "window.innerWidth + 'x' + window.innerHeight", + function(size) { webView.resultReceived(); result = size }); + resultSpy.wait(); + return result; + } + + function elementRect(id) { + resultSpy.clear(); + var result; + + webView.experimental.evaluateJavaScript( + "document.getElementById('" + id + "').getBoundingClientRect();", + function(rect) { webView.resultReceived(); result = rect }); + resultSpy.wait(); + return result; + } + + function doubleTapAtPoint(x, y) { + scaleSpy.clear() + test.touchDoubleTap(webView, x, y) + scaleSpy.wait() + } + + function test_basic() { + webView.url = webView.content + verify(webView.waitForLoadSucceeded()) + + compare("480x720", documentSize()) + + compare(1.0, test.contentsScale) + + var rect = elementRect("target"); + var newScale = webView.width / (rect.width + 2 * 10) // inflated by 10px + doubleTapAtPoint(rect.left + rect.height / 2, rect.top + rect.width / 2) + + compare(newScale, test.contentsScale) + } + } +} diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_javaScriptDialogs.qml b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_javaScriptDialogs.qml index 4e15c2344..d77933dba 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_javaScriptDialogs.qml +++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_javaScriptDialogs.qml @@ -12,39 +12,29 @@ TestWebView { property int confirmCount: 0 property int promptCount: 0 - experimental.alertDialog: Item { - Timer { - running: true - interval: 1 - onTriggered: { + experimental { + alertDialog: Item { + Component.onCompleted: { // Testing both attached property and id defined in the Component context. - parent.WebView.view.messageFromAlertDialog = message - webView.modelMessageEqualsMessage = Boolean(model.message == message) + WebView.view.messageFromAlertDialog = message + parent.modelMessageEqualsMessage = Boolean(model.message == message) model.dismiss() } } - } - experimental.confirmDialog: Item { - Timer { - running: true - interval: 1 - onTriggered: { - parent.WebView.view.confirmCount += 1 + confirmDialog: Item { + Component.onCompleted: { + WebView.view.confirmCount += 1 if (message == "ACCEPT") model.accept() else model.reject() } } - } - experimental.promptDialog: Item { - Timer { - running: true - interval: 1 - onTriggered: { - parent.WebView.view.promptCount += 1 + promptDialog: Item { + Component.onCompleted: { + WebView.view.promptCount += 1 if (message == "REJECT") model.reject() else { |