From 5466563f4b5b6b86523e3f89bb7f77e5b5270c78 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 15 Oct 2012 16:08:57 +0200 Subject: Imported WebKit commit 0dc6cd75e1d4836eaffbb520be96fac4847cc9d2 (http://svn.webkit.org/repository/webkit/trunk@131300) WebKit update which introduces the QtWebKitWidgets module that contains the WK1 widgets based API. (In fact it renames QtWebKit to QtWebKitWidgets while we're working on completing the entire split as part of https://bugs.webkit.org/show_bug.cgi?id=99314 --- .../qt/tests/inspectorserver/inspectorserver.pro | 2 +- .../UIProcess/API/qt/tests/publicapi/publicapi.pro | 2 +- .../API/qt/tests/qmltests/DesktopBehavior.pro | 2 +- .../UIProcess/API/qt/tests/qmltests/WebView.pro | 2 +- .../tests/qmltests/WebView/tst_doubleTapToZoom.qml | 3 +- .../qt/tests/qmltests/WebView/tst_fitToView.qml | 3 +- .../qmltests/WebView/tst_wheelEventHandling.qml | 7 ++-- .../API/qt/tests/qmltests/common/TestWebView.qml | 42 ++++++++++++---------- .../API/qt/tests/qquickwebview/qquickwebview.pro | 2 +- .../qt/tests/qquickwebview/tst_qquickwebview.cpp | 5 +-- .../API/qt/tests/qrawwebview/qrawwebview.pro | 2 +- .../API/qt/tests/qrawwebview/tst_qrawwebview.cpp | 18 ++++++---- Source/WebKit2/UIProcess/API/qt/tests/tests.pri | 2 +- Source/WebKit2/UIProcess/API/qt/tests/util.cpp | 13 +++++-- Source/WebKit2/UIProcess/API/qt/tests/util.h | 1 + 15 files changed, 64 insertions(+), 42 deletions(-) (limited to 'Source/WebKit2/UIProcess/API/qt/tests') diff --git a/Source/WebKit2/UIProcess/API/qt/tests/inspectorserver/inspectorserver.pro b/Source/WebKit2/UIProcess/API/qt/tests/inspectorserver/inspectorserver.pro index 4a8d86f80..bc5307f2d 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/inspectorserver/inspectorserver.pro +++ b/Source/WebKit2/UIProcess/API/qt/tests/inspectorserver/inspectorserver.pro @@ -1,4 +1,4 @@ include(../tests.pri) SOURCES += $${TARGET}.cpp -QT += webkit-private +QT += webkitwidgets-private DEFINES += IMPORT_DIR=\"\\\"$${ROOT_BUILD_DIR}$${QMAKE_DIR_SEP}imports\\\"\" diff --git a/Source/WebKit2/UIProcess/API/qt/tests/publicapi/publicapi.pro b/Source/WebKit2/UIProcess/API/qt/tests/publicapi/publicapi.pro index 02dc197c7..ba8f4cea3 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/publicapi/publicapi.pro +++ b/Source/WebKit2/UIProcess/API/qt/tests/publicapi/publicapi.pro @@ -1,3 +1,3 @@ include(../tests.pri) SOURCES += $${TARGET}.cpp -QT += webkit-private +QT += webkitwidgets-private diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro index 3fd3d4583..7c72fd2f1 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro +++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro @@ -3,7 +3,7 @@ SOURCES += tst_qmltests.cpp TARGET = tst_qmltests_DesktopBehavior OBJECTS_DIR = obj_DesktopBehavior/$$activeBuildConfig() -QT += webkit-private +QT += webkitwidgets-private CONFIG += warn_on testcase QT += qmltest diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro index b340235e4..3e217b369 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro +++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro @@ -3,7 +3,7 @@ SOURCES += tst_qmltests.cpp TARGET = tst_qmltests_WebView OBJECTS_DIR = obj_WebView/$$activeBuildConfig() -QT += webkit-private +QT += webkitwidgets-private CONFIG += warn_on testcase QT += qmltest 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 index 691455708..d21ef211a 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_doubleTapToZoom.qml +++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_doubleTapToZoom.qml @@ -40,6 +40,7 @@ Item { TestCase { name: "DoubleTapToZoom" + when: windowShown property variant test: webView.experimental.test @@ -78,7 +79,7 @@ Item { function test_basic() { webView.url = webView.content - verify(webView.waitForLoadSucceeded()) + verify(webView.waitForViewportReady()) compare(documentSize(), "480x720") diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_fitToView.qml b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_fitToView.qml index f12da5de8..fcd3d9301 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_fitToView.qml +++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_fitToView.qml @@ -38,6 +38,7 @@ Item { TestCase { name: "FitToView" + when: windowShown property variant test: webView.experimental.test @@ -69,7 +70,7 @@ Item { function test_basic() { webView.url = webView.content - verify(webView.waitForLoadSucceeded()) + verify(webView.waitForViewportReady()) compare(documentSize(), "480x720") compare(test.contentsScale, 1.0) diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_wheelEventHandling.qml b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_wheelEventHandling.qml index 1fc1559ab..aa6d711a1 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_wheelEventHandling.qml +++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_wheelEventHandling.qml @@ -21,12 +21,13 @@ Item { TestCase { name: "WheelEventHandling" + when: windowShown property variant test: webView.experimental.test function init() { webView.url = Qt.resolvedUrl("../common/test4.html") - verify(webView.waitForLoadSucceeded()) + verify(webView.waitForViewportReady()) webView.contentY = 0 } @@ -38,7 +39,7 @@ Item { scrollSpy.wait() var position = webView.contentY webView.reload() - verify(webView.waitForLoadSucceeded()) + verify(webView.waitForViewportReady()) // The check below will fail if the previous position was not restored after reload. verify(position == webView.contentY) } @@ -46,7 +47,7 @@ Item { function test_wheelScrollEventAfterReload() { scrollSpy.clear() webView.reload() - verify(webView.waitForLoadSucceeded()) + verify(webView.waitForViewportReady()) var centerPoint = Qt.point(webView.width / 2, webView.height / 2) test.wheelEvent(webView, centerPoint.x, centerPoint.y, -500); // The signal spy below will time out if the wheel event did not scroll the content. diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/common/TestWebView.qml b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/common/TestWebView.qml index 0dd7bccee..5a05f9b3e 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/common/TestWebView.qml +++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/common/TestWebView.qml @@ -5,43 +5,47 @@ import QtWebKit.experimental 1.0 WebView { property var loadStatus: null + property var viewportReady: false function waitForLoadSucceeded() { - var timeout = 5000 - var i = 0 - while (i < timeout && loadStatus != WebView.LoadSucceededStatus) { - testResult.wait(50) - i += 50 - } - var success = loadStatus == WebView.LoadSucceededStatus + var success = _waitFor(function() { return loadStatus == WebView.LoadSucceededStatus }) loadStatus = null return success } + function waitForViewportReady() { + // Note: You need to have "when: windowShown" in your TestCase for this to work. + // The viewport is locked until the first frame is rendered, and the rendering isn't + // activated until the WebView is visible in a mapped QQuickView. + return _waitFor(function() { return viewportReady }) + } function waitForLoadFailed() { - var timeout = 5000 - var i = 0 - while (i < timeout && loadStatus != WebView.LoadFailedStatus) { - testResult.wait(50) - i += 50 - } - var failure = loadStatus == WebView.LoadFailedStatus + var failure = _waitFor(function() { return loadStatus == WebView.LoadFailedStatus }) loadStatus = null return failure } function waitForLoadStopped() { + var stop = _waitFor(function() { return loadStatus == WebView.LoadStoppedStatus }) + loadStatus = null + return stop + } + function _waitFor(predicate) { var timeout = 5000 var i = 0 - while (i < timeout && loadStatus != WebView.LoadStoppedStatus) { + while (i < timeout && !predicate()) { testResult.wait(50) i += 50 } - var stop = loadStatus == WebView.LoadStoppedStatus - loadStatus = null - return stop + return predicate() } TestResult { id: testResult } - onLoadingChanged: loadStatus = loadRequest.status + experimental.onLoadVisuallyCommitted: viewportReady = true + onLoadingChanged: { + loadStatus = loadRequest.status + if (loadRequest.status == WebView.LoadStartedStatus) + viewportReady = false + } + } diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro b/Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro index 4a8d86f80..bc5307f2d 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro +++ b/Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro @@ -1,4 +1,4 @@ include(../tests.pri) SOURCES += $${TARGET}.cpp -QT += webkit-private +QT += webkitwidgets-private DEFINES += IMPORT_DIR=\"\\\"$${ROOT_BUILD_DIR}$${QMAKE_DIR_SEP}imports\\\"\" diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp b/Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp index 5b98ae7b7..558053729 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp +++ b/Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp @@ -440,10 +440,11 @@ void tst_QQuickWebView::inputMethodHints() void tst_QQuickWebView::scrollRequest() { - webView()->setSize(QSizeF(300, 400)); + m_window->setGeometry(0, 0, 300, 400); + m_window->show(); webView()->setUrl(QUrl::fromLocalFile(QLatin1String(TESTS_SOURCE_DIR "/html/scroll.html"))); - QVERIFY(waitForLoadSucceeded(webView())); + QVERIFY(waitForViewportReady(webView())); // COMPARE with the position requested in the html // Use qRound as that is also used when calculating the position diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qrawwebview/qrawwebview.pro b/Source/WebKit2/UIProcess/API/qt/tests/qrawwebview/qrawwebview.pro index 02dc197c7..ba8f4cea3 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/qrawwebview/qrawwebview.pro +++ b/Source/WebKit2/UIProcess/API/qt/tests/qrawwebview/qrawwebview.pro @@ -1,3 +1,3 @@ include(../tests.pri) SOURCES += $${TARGET}.cpp -QT += webkit-private +QT += webkitwidgets-private diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qrawwebview/tst_qrawwebview.cpp b/Source/WebKit2/UIProcess/API/qt/tests/qrawwebview/tst_qrawwebview.cpp index 31102b876..208288d1e 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/qrawwebview/tst_qrawwebview.cpp +++ b/Source/WebKit2/UIProcess/API/qt/tests/qrawwebview/tst_qrawwebview.cpp @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -60,15 +61,18 @@ class WebView : public QObject, public QRawWebViewClient { public: WebView(const QSize& size, bool transparent = false) { + m_webView = new QRawWebView(webContext(), webPageGroup(QString()), this); + m_webView->setTransparentBackground(transparent); + m_webView->create(); + WKPageLoaderClient loaderClient; memset(&loaderClient, 0, sizeof(WKPageLoaderClient)); + loaderClient.version = kWKPageLoaderClientCurrentVersion; loaderClient.clientInfo = this; - loaderClient.didFirstVisuallyNonEmptyLayoutForFrame = WebView::finishFirstLayoutForFrame; + loaderClient.didLayout = WebView::didLayout; - m_webView = new QRawWebView(webContext(), webPageGroup(QString()), this); WKPageSetPageLoaderClient(m_webView->pageRef(), &loaderClient); - m_webView->setTransparentBackground(transparent); - m_webView->create(); + WKPageListenForLayoutMilestones(m_webView->pageRef(), kWKDidFirstVisuallyNonEmptyLayout); WKPageSetUseFixedLayout(m_webView->pageRef(), true); m_webView->setSize(size); @@ -118,7 +122,7 @@ public: static_cast(context)->onRepaintDone(); } - static void finishFirstLayoutForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo) + static void didLayout(WKPageRef page, WKLayoutMilestones milestones, WKTypeRef userData, const void *clientInfo) { static_cast(const_cast(clientInfo))->frameLoaded(); } @@ -152,7 +156,9 @@ public: tst_qrawwebview() : m_resourceDir(QString::fromLatin1(TESTS_SOURCE_DIR "/html/resources")) , m_baseUrl(QUrl::fromLocalFile(TESTS_SOURCE_DIR "/html").toString()) - { } + { + addQtWebProcessToPath(); + } private Q_SLOTS: void paint() { run(&tst_qrawwebview::doPaint, m_resourceDir + "/qwkview_paint.png"); } diff --git a/Source/WebKit2/UIProcess/API/qt/tests/tests.pri b/Source/WebKit2/UIProcess/API/qt/tests/tests.pri index a1133530d..123b25ce2 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/tests.pri +++ b/Source/WebKit2/UIProcess/API/qt/tests/tests.pri @@ -6,7 +6,7 @@ TARGET = tst_$$TARGET INCLUDEPATH += $$PWD SOURCES += ../util.cpp -QT += testlib webkit +QT += testlib webkitwidgets have?(QTQUICK) { QT += qml quick quick-private HEADERS += ../bytearraytestdata.h \ diff --git a/Source/WebKit2/UIProcess/API/qt/tests/util.cpp b/Source/WebKit2/UIProcess/API/qt/tests/util.cpp index 4525e882b..fce3cc7f6 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/util.cpp +++ b/Source/WebKit2/UIProcess/API/qt/tests/util.cpp @@ -57,10 +57,10 @@ bool waitForSignal(QObject* obj, const char* signal, int timeout) return timeoutSpy.isEmpty(); } -static void messageHandler(QtMsgType type, const char* message) +static void messageHandler(QtMsgType type, const QMessageLogContext&, const QString& message) { if (type == QtCriticalMsg) { - fprintf(stderr, "%s\n", message); + fprintf(stderr, "%s\n", qPrintable(message)); return; } // Do nothing @@ -68,7 +68,7 @@ static void messageHandler(QtMsgType type, const char* message) void suppressDebugOutput() { - qInstallMsgHandler(messageHandler); \ + qInstallMessageHandler(messageHandler); \ if (qgetenv("QT_WEBKIT_SUPPRESS_WEB_PROCESS_OUTPUT").isEmpty()) \ qputenv("QT_WEBKIT_SUPPRESS_WEB_PROCESS_OUTPUT", "1"); } @@ -126,6 +126,13 @@ bool waitForLoadFailed(QQuickWebView* webView, int timeout) return timeoutSpy.isEmpty(); } +bool waitForViewportReady(QQuickWebView* webView, int timeout) +{ + // The viewport is locked until the first frame of a page load is rendered. + // The QQuickView needs to be shown for this to succeed. + return waitForSignal(webView->experimental(), SIGNAL(loadVisuallyCommitted()), timeout); +} + LoadStartedCatcher::LoadStartedCatcher(QQuickWebView* webView) : m_webView(webView) { diff --git a/Source/WebKit2/UIProcess/API/qt/tests/util.h b/Source/WebKit2/UIProcess/API/qt/tests/util.h index 0c14a1ff4..4834029b4 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/util.h +++ b/Source/WebKit2/UIProcess/API/qt/tests/util.h @@ -36,6 +36,7 @@ void suppressDebugOutput(); #if defined(HAVE_QTQUICK) && HAVE_QTQUICK bool waitForLoadSucceeded(QQuickWebView* webView, int timeout = 10000); bool waitForLoadFailed(QQuickWebView* webView, int timeout = 10000); +bool waitForViewportReady(QQuickWebView* webView, int timeout = 10000); class LoadStartedCatcher : public QObject { Q_OBJECT -- cgit v1.2.1