summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/API/qt
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2012-10-17 16:21:14 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2012-10-17 16:21:14 +0200
commit8995b83bcbfbb68245f779b64e5517627c6cc6ea (patch)
tree17985605dab9263cc2444bd4d45f189e142cca7c /Source/WebKit2/UIProcess/API/qt
parentb9c9652036d5e9f1e29c574f40bc73a35c81ace6 (diff)
downloadqtwebkit-8995b83bcbfbb68245f779b64e5517627c6cc6ea.tar.gz
Imported WebKit commit cf4f8fc6f19b0629f51860cb2d4b25e139d07e00 (http://svn.webkit.org/repository/webkit/trunk@131592)
New snapshot that includes the build fixes for Mac OS X 10.6 and earlier as well as the previously cherry-picked changes
Diffstat (limited to 'Source/WebKit2/UIProcess/API/qt')
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp2
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp47
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h1
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h16
-rw-r--r--Source/WebKit2/UIProcess/API/qt/raw/qrawwebview.cpp23
-rw-r--r--Source/WebKit2/UIProcess/API/qt/raw/qrawwebview_p.h6
-rw-r--r--Source/WebKit2/UIProcess/API/qt/raw/qrawwebview_p_p.h2
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/inspectorserver/inspectorserver.pro2
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/publicapi/publicapi.pro2
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro2
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro2
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_doubleTapToZoom.qml3
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_fitToView.qml3
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_wheelEventHandling.qml7
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qmltests/common/TestWebView.qml42
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro2
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp5
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qrawwebview/qrawwebview.pro2
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qrawwebview/tst_qrawwebview.cpp18
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/tests.pri2
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/util.cpp7
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/util.h1
22 files changed, 121 insertions, 76 deletions
diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp b/Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp
index db51b85dd..71688cbe6 100644
--- a/Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp
@@ -158,7 +158,7 @@ void QQuickWebPagePrivate::updateSize()
DrawingAreaProxy* drawingArea = webPageProxy->drawingArea();
if (drawingArea && drawingArea->layerTreeCoordinatorProxy())
- drawingArea->layerTreeCoordinatorProxy()->setContentsSize(contentsSize);
+ drawingArea->layerTreeCoordinatorProxy()->setContentsSize(WebCore::FloatSize(contentsSize));
q->setSize(scaledSize);
diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp b/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp
index b78cae0f3..07ed832ce 100644
--- a/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp
@@ -268,6 +268,7 @@ QQuickWebViewPrivate::QQuickWebViewPrivate(QQuickWebView* viewport)
, filePicker(0)
, databaseQuotaDialog(0)
, colorChooser(0)
+ , m_betweenLoadCommitAndFirstFrame(false)
, m_useDefaultContentItemSize(true)
, m_navigatorQtObjectEnabled(false)
, m_renderToOffscreenBuffer(false)
@@ -330,14 +331,6 @@ void QQuickWebViewPrivate::loadDidStop()
emit q->loadingChanged(&loadRequest);
}
-void QQuickWebViewPrivate::onComponentComplete()
-{
- Q_Q(QQuickWebView);
- m_pageViewportControllerClient.reset(new PageViewportControllerClientQt(q, pageView.data()));
- m_pageViewportController.reset(new PageViewportController(webPageProxy.get(), m_pageViewportControllerClient.data()));
- pageView->eventHandler()->setViewportController(m_pageViewportControllerClient.data());
-}
-
void QQuickWebViewPrivate::setTransparentBackground(bool enable)
{
webPageProxy->setDrawsTransparentBackground(enable);
@@ -370,6 +363,7 @@ void QQuickWebViewPrivate::loadDidCommit()
Q_Q(QQuickWebView);
ASSERT(q->loading());
+ m_betweenLoadCommitAndFirstFrame = true;
emit q->navigationHistoryChanged();
emit q->titleChanged();
}
@@ -452,10 +446,18 @@ void QQuickWebViewPrivate::setNeedsDisplay()
q->page()->d->paint(&painter);
return;
}
-
q->page()->update();
}
+void QQuickWebViewPrivate::didRenderFrame()
+{
+ Q_Q(QQuickWebView);
+ if (m_betweenLoadCommitAndFirstFrame) {
+ emit q->experimental()->loadVisuallyCommitted();
+ m_betweenLoadCommitAndFirstFrame = false;
+ }
+}
+
void QQuickWebViewPrivate::processDidCrash()
{
Q_Q(QQuickWebView);
@@ -478,8 +480,6 @@ void QQuickWebViewPrivate::didRelaunchProcess()
{
qWarning("WARNING: The web process has been successfully restarted.");
- // Reset to default so that the later update can reach the web process.
- webPageProxy->setCustomDeviceScaleFactor(0);
webPageProxy->drawingArea()->setSize(viewSize(), IntSize());
updateViewportSize();
@@ -820,12 +820,17 @@ void QQuickWebViewLegacyPrivate::updateViewportSize()
QSizeF viewportSize = q->boundingRect().size();
if (viewportSize.isEmpty())
return;
+
+ float devicePixelRatio = webPageProxy->deviceScaleFactor();
pageView->setContentsSize(viewportSize);
+ // Make sure that our scale matches the one passed to setVisibleContentsRect.
+ pageView->setContentsScale(devicePixelRatio);
+
// The fixed layout is handled by the FrameView and the drawing area doesn't behave differently
// whether its fixed or not. We still need to tell the drawing area which part of it
// has to be rendered on tiles, and in desktop mode it's all of it.
- webPageProxy->drawingArea()->setSize(viewportSize.toSize(), IntSize());
- webPageProxy->drawingArea()->setVisibleContentsRect(FloatRect(FloatPoint(), viewportSize), 1, FloatPoint());
+ webPageProxy->drawingArea()->setSize((viewportSize / devicePixelRatio).toSize(), IntSize());
+ webPageProxy->drawingArea()->setVisibleContentsRect(FloatRect(FloatPoint(), FloatSize(viewportSize / devicePixelRatio)), devicePixelRatio, FloatPoint());
}
qreal QQuickWebViewLegacyPrivate::zoomFactor() const
@@ -853,6 +858,11 @@ void QQuickWebViewFlickablePrivate::onComponentComplete()
{
QQuickWebViewPrivate::onComponentComplete();
+ Q_Q(QQuickWebView);
+ m_pageViewportControllerClient.reset(new PageViewportControllerClientQt(q, pageView.data()));
+ m_pageViewportController.reset(new PageViewportController(webPageProxy.get(), m_pageViewportControllerClient.data()));
+ pageView->eventHandler()->setViewportController(m_pageViewportControllerClient.data());
+
// Trigger setting of correct visibility flags after everything was allocated and initialized.
_q_onVisibleChanged();
}
@@ -868,7 +878,7 @@ void QQuickWebViewFlickablePrivate::updateViewportSize()
Q_Q(QQuickWebView);
if (m_pageViewportController)
- m_pageViewportController->didChangeViewportSize(QSizeF(q->width(), q->height()));
+ m_pageViewportController->didChangeViewportSize(FloatSize(q->width(), q->height()));
}
void QQuickWebViewFlickablePrivate::pageDidRequestScroll(const QPoint& pos)
@@ -877,13 +887,6 @@ void QQuickWebViewFlickablePrivate::pageDidRequestScroll(const QPoint& pos)
m_pageViewportController->pageDidRequestScroll(pos);
}
-void QQuickWebViewFlickablePrivate::didChangeContentsSize(const QSize& newSize)
-{
- QQuickWebViewPrivate::didChangeContentsSize(newSize);
- pageView->setContentsSize(newSize); // emits contentsSizeChanged()
- m_pageViewportController->didChangeContentsSize(newSize);
-}
-
void QQuickWebViewFlickablePrivate::handleMouseEvent(QMouseEvent* event)
{
if (!pageView->eventHandler())
@@ -1233,7 +1236,7 @@ void QQuickWebViewExperimental::setDevicePixelRatio(qreal devicePixelRatio)
if (0 >= devicePixelRatio || devicePixelRatio == this->devicePixelRatio())
return;
- d->webPageProxy->setCustomDeviceScaleFactor(devicePixelRatio);
+ d->webPageProxy->setIntrinsicDeviceScaleFactor(devicePixelRatio);
emit devicePixelRatioChanged();
}
diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h
index e8b1bf7a1..89e7fbc99 100644
--- a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h
+++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h
@@ -355,6 +355,7 @@ public Q_SLOTS:
void evaluateJavaScript(const QString& script, const QJSValue& value = QJSValue());
Q_SIGNALS:
+ void loadVisuallyCommitted();
void alertDialogChanged();
void confirmDialogChanged();
void promptDialogChanged();
diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h
index f172ad68f..15bf818d7 100644
--- a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h
+++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h
@@ -70,7 +70,7 @@ public:
virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
- virtual void onComponentComplete();
+ virtual void onComponentComplete() { }
virtual void provisionalLoadDidStart(const WTF::String& url);
virtual void didReceiveServerRedirectForProvisionalLoad(const WTF::String& url);
@@ -88,8 +88,9 @@ public:
int loadProgress() const { return m_loadProgress; }
void setNeedsDisplay();
+ void didRenderFrame();
- WebKit::PageViewportController* viewportController() const { return m_pageViewportController.data(); }
+ virtual WebKit::PageViewportController* viewportController() const { return 0; }
virtual void updateViewportSize() { }
void updateTouchViewportSize();
@@ -130,7 +131,6 @@ public:
WebCore::IntSize viewSize() const;
void didReceiveMessageFromNavigatorQtObject(const String& message);
virtual void pageDidRequestScroll(const QPoint& pos) { }
- virtual void didChangeContentsSize(const QSize& newSize) { }
void processDidCrash();
void didRelaunchProcess();
PassOwnPtr<WebKit::DrawingAreaProxy> createDrawingAreaProxy();
@@ -172,9 +172,6 @@ protected:
QScopedPointer<QQuickWebPage> pageView;
QQuickWebView* q_ptr;
- QScopedPointer<WebKit::PageViewportController> m_pageViewportController;
- QScopedPointer<WebKit::PageViewportControllerClientQt> m_pageViewportControllerClient;
-
FlickableAxisLocker axisLocker;
QQmlComponent* alertDialog;
@@ -190,6 +187,7 @@ protected:
QList<QUrl> userScripts;
+ bool m_betweenLoadCommitAndFirstFrame;
bool m_useDefaultContentItemSize;
bool m_navigatorQtObjectEnabled;
bool m_renderToOffscreenBuffer;
@@ -220,11 +218,15 @@ public:
virtual void onComponentComplete();
virtual void didChangeViewportProperties(const WebCore::ViewportAttributes&);
+ virtual WebKit::PageViewportController* viewportController() const { return m_pageViewportController.data(); }
virtual void updateViewportSize();
virtual void pageDidRequestScroll(const QPoint& pos);
- virtual void didChangeContentsSize(const QSize& newSize);
virtual void handleMouseEvent(QMouseEvent*);
+
+private:
+ QScopedPointer<WebKit::PageViewportController> m_pageViewportController;
+ QScopedPointer<WebKit::PageViewportControllerClientQt> m_pageViewportControllerClient;
};
#endif // qquickwebview_p_p_h
diff --git a/Source/WebKit2/UIProcess/API/qt/raw/qrawwebview.cpp b/Source/WebKit2/UIProcess/API/qt/raw/qrawwebview.cpp
index 0a7a684cf..5f6c16d56 100644
--- a/Source/WebKit2/UIProcess/API/qt/raw/qrawwebview.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/raw/qrawwebview.cpp
@@ -167,6 +167,11 @@ void QRawWebViewPrivate::toolTipChanged(const String&, const String& newTooltip)
notImplemented();
}
+void QRawWebViewPrivate::pageTransitionViewportReady()
+{
+ m_webPageProxy->commitPageTransitionViewport();
+}
+
void QRawWebViewPrivate::startDrag(const WebCore::DragData& dragData, PassRefPtr<WebKit::ShareableBitmap> dragImage)
{
notImplemented();
@@ -319,6 +324,7 @@ void QRawWebView::setActive(bool active)
{
d->m_active = active;
d->m_webPageProxy->viewStateDidChange(WebKit::WebPageProxy::ViewWindowIsActive);
+ layerTreeRenderer()->setActive(active);
}
QSize QRawWebView::size() const
@@ -352,17 +358,20 @@ WKPageRef QRawWebView::pageRef()
return toAPI(d->m_webPageProxy.get());
}
-void QRawWebView::paint(const QMatrix4x4& transform, float opacity, unsigned paintFlags)
+WebKit::LayerTreeRenderer* QRawWebView::layerTreeRenderer() const
{
WebKit::DrawingAreaProxy* drawingArea = d->m_webPageProxy->drawingArea();
if (!drawingArea)
- return;
-
- WebKit::LayerTreeCoordinatorProxy* coordinatorProxy = drawingArea->layerTreeCoordinatorProxy();
- if (!coordinatorProxy)
- return;
+ return 0;
+ WebKit::LayerTreeCoordinatorProxy* layerTreeCoordinatorProxy = drawingArea->layerTreeCoordinatorProxy();
+ if (!layerTreeCoordinatorProxy)
+ return 0;
+ return layerTreeCoordinatorProxy->layerTreeRenderer();
+}
- WebKit::LayerTreeRenderer* renderer = coordinatorProxy->layerTreeRenderer();
+void QRawWebView::paint(const QMatrix4x4& transform, float opacity, unsigned paintFlags)
+{
+ WebKit::LayerTreeRenderer* renderer = layerTreeRenderer();
if (!renderer)
return;
diff --git a/Source/WebKit2/UIProcess/API/qt/raw/qrawwebview_p.h b/Source/WebKit2/UIProcess/API/qt/raw/qrawwebview_p.h
index f8f15b06d..015815ad8 100644
--- a/Source/WebKit2/UIProcess/API/qt/raw/qrawwebview_p.h
+++ b/Source/WebKit2/UIProcess/API/qt/raw/qrawwebview_p.h
@@ -47,6 +47,10 @@ QT_END_NAMESPACE
class QRawWebViewPrivate;
+namespace WebKit {
+class LayerTreeRenderer;
+}
+
class QRawWebViewClient {
public:
virtual ~QRawWebViewClient() { }
@@ -97,6 +101,8 @@ public:
void sendTouchEvent(QTouchEvent*);
private:
+ WebKit::LayerTreeRenderer* layerTreeRenderer() const;
+
QRawWebViewPrivate* d;
};
diff --git a/Source/WebKit2/UIProcess/API/qt/raw/qrawwebview_p_p.h b/Source/WebKit2/UIProcess/API/qt/raw/qrawwebview_p_p.h
index 55bc85ba0..545096d02 100644
--- a/Source/WebKit2/UIProcess/API/qt/raw/qrawwebview_p_p.h
+++ b/Source/WebKit2/UIProcess/API/qt/raw/qrawwebview_p_p.h
@@ -82,6 +82,7 @@ public:
virtual void setCursorHiddenUntilMouseMoves(bool hiddenUntilMouseMoves);
virtual void toolTipChanged(const String&, const String& newTooltip);
+ virtual void pageTransitionViewportReady();
virtual void startDrag(const WebCore::DragData& dragData, PassRefPtr<WebKit::ShareableBitmap> dragImage);
@@ -104,6 +105,7 @@ public:
virtual void didRelaunchProcess();
virtual void setViewNeedsDisplay(const WebCore::IntRect& rect);
virtual void didChangeContentsSize(const WebCore::IntSize& newSize);
+ virtual void didRenderFrame(const WebCore::IntSize& contentsSize, const WebCore::IntRect& coveredRect) { }
virtual void setCursor(const WebCore::Cursor&);
virtual bool isViewFocused() { return m_focused; }
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 <WebKit2/WKContext.h>
#include <WebKit2/WKPageGroup.h>
+#include <WebKit2/WKPageLoadTypes.h>
#include <WebKit2/WKPreferences.h>
#include <WebKit2/WKPreferencesPrivate.h>
#include <WebKit2/WKStringQt.h>
@@ -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<WebView*>(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<WebView*>(const_cast<void*>(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 c65fae305..fce3cc7f6 100644
--- a/Source/WebKit2/UIProcess/API/qt/tests/util.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/tests/util.cpp
@@ -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