summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/API/qt
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-05-18 14:03:11 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-05-18 14:03:11 +0200
commit8d473cf9743f1d30a16a27114e93bd5af5648d23 (patch)
treecdca40d0353886b3ca52f33a2d7b8f1c0011aafc /Source/WebKit2/UIProcess/API/qt
parent1b914638db989aaa98631a1c1e02c7b2d44805d8 (diff)
downloadqtwebkit-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.cpp3
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp173
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h11
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h10
-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.pro9
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro17
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_doubleTapToZoom.qml106
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_javaScriptDialogs.qml32
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 {