Skip to content

Instantly share code, notes, and snippets.

@bbandix
Created November 3, 2011 15:44
Show Gist options
  • Save bbandix/1336819 to your computer and use it in GitHub Desktop.
Save bbandix/1336819 to your computer and use it in GitHub Desktop.
diff --git a/Source/WebKit2/UIProcess/API/qt/qbasewebview.h b/Source/WebKit2/UIProcess/API/qt/qbasewebview.h
index 05cf550..06076d2 100644
--- a/Source/WebKit2/UIProcess/API/qt/qbasewebview.h
+++ b/Source/WebKit2/UIProcess/API/qt/qbasewebview.h
@@ -79,6 +79,7 @@ Q_SIGNALS:
void loadSucceeded();
void loadFailed(QBaseWebView::ErrorType errorType, int errorCode, const QUrl& url);
void loadProgressChanged(int progress);
+ void initialLayoutCompleted();
void urlChanged(const QUrl& url);
void messageReceived(const QVariantMap& message);
void downloadRequested(QWebDownloadItem* downloadItem);
diff --git a/Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp b/Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp
index afa9377..eb0a16f 100644
--- a/Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp
@@ -185,6 +185,12 @@ void QDesktopWebViewPrivate::didChangeLoadProgress(int percentageLoaded)
emit q->loadProgressChanged(percentageLoaded);
}
+void QDesktopWebViewPrivate::didCompleteInitialLayout()
+{
+ Q_Q(QDesktopWebView);
+ emit q->initialLayoutCompleted();
+}
+
void QDesktopWebViewPrivate::showContextMenu(QSharedPointer<QMenu> menu)
{
Q_Q(QDesktopWebView);
diff --git a/Source/WebKit2/UIProcess/API/qt/qdesktopwebview_p.h b/Source/WebKit2/UIProcess/API/qt/qdesktopwebview_p.h
index 252e6c3..5c22447 100644
--- a/Source/WebKit2/UIProcess/API/qt/qdesktopwebview_p.h
+++ b/Source/WebKit2/UIProcess/API/qt/qdesktopwebview_p.h
@@ -70,6 +70,7 @@ private:
virtual void loadDidSucceed();
virtual void loadDidFail(const QtWebError&);
virtual void didChangeLoadProgress(int);
+ virtual void didCompleteInitialLayout();
virtual void showContextMenu(QSharedPointer<QMenu>);
virtual void hideContextMenu();
diff --git a/Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp b/Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp
index a570b0a..785dbe0 100644
--- a/Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp
@@ -41,6 +41,7 @@ private slots:
void reload();
void stop();
void loadProgress();
+ void initialLayout();
void show();
private:
@@ -172,6 +173,16 @@ void tst_CommonViewTests::loadProgress()
QCOMPARE(viewAbstraction->loadProgress(), 100);
}
+void tst_CommonViewTests::initialLayout()
+{
+ QSignalSpy initialLoadFinishedSpy(viewAbstraction.data(), SIGNAL(initialLayoutCompleted()));
+
+ viewAbstraction->load(QUrl::fromLocalFile(QLatin1String(TESTS_SOURCE_DIR "/html/basic_page.html")));
+ QVERIFY(waitForSignal(viewAbstraction.data(), SIGNAL(initialLayoutCompleted())));
+
+ QCOMPARE(initialLoadFinishedSpy.size(), 1);
+}
+
void tst_CommonViewTests::show()
{
// This should not crash.
diff --git a/Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp b/Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp
index 2baa336..7ac28ad 100644
--- a/Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp
@@ -37,6 +37,7 @@ WebViewAbstraction::WebViewAbstraction()
connect(touchWebView(), SIGNAL(loadSucceeded()), this, SLOT(touchViewLoadSucceeded()));
connect(touchWebView(), SIGNAL(loadFailed(QBaseWebView::ErrorType, int, const QUrl&)), this, SLOT(touchViewLoadFailed(QBaseWebView::ErrorType, int, const QUrl&)));
connect(touchWebView(), SIGNAL(loadProgressChanged(int)), this, SLOT(touchViewLoadProgressChanged(int)));
+ connect(touchWebView(), SIGNAL(initialLayoutCompleted()), this, SLOT(touchViewInitialLayoutCompleted()));
screenHalf.moveLeft(screenHalf.right());
m_desktopWebViewWindow.setGeometry(screenHalf);
@@ -45,6 +46,7 @@ WebViewAbstraction::WebViewAbstraction()
connect(desktopWebView(), SIGNAL(loadSucceeded()), this, SLOT(desktopViewLoadSucceeded()));
connect(desktopWebView(), SIGNAL(loadFailed(QBaseWebView::ErrorType, int, const QUrl&)), this, SLOT(desktopViewLoadFailed(QBaseWebView::ErrorType, int, const QUrl&)));
connect(desktopWebView(), SIGNAL(loadProgressChanged(int)), this, SLOT(desktopViewLoadProgressChanged(int)));
+ connect(desktopWebView(), SIGNAL(initialLayoutCompleted()), this, SLOT(desktopViewInitialLayoutCompleted()));
}
void WebViewAbstraction::show()
@@ -177,6 +179,20 @@ void WebViewAbstraction::desktopViewLoadProgressChanged(int progress)
emit loadProgressChanged(progress);
}
+void WebViewAbstraction::touchViewInitialLayoutCompleted()
+{
+ m_touchViewSignalsCounter[SIGNAL(initialLayoutCompleted())]++;
+ if (m_touchViewSignalsCounter[SIGNAL(initialLayoutCompleted())] == m_desktopViewSignalsCounter[SIGNAL(initialLayoutCompleted())])
+ emit initialLayoutCompleted();
+}
+
+void WebViewAbstraction::desktopViewInitialLayoutCompleted()
+{
+ m_desktopViewSignalsCounter[SIGNAL(initialLayoutCompleted())]++;
+ if (m_touchViewSignalsCounter[SIGNAL(initialLayoutCompleted())] == m_desktopViewSignalsCounter[SIGNAL(initialLayoutCompleted())])
+ emit initialLayoutCompleted();
+}
+
QTouchWebView* WebViewAbstraction::touchWebView() const
{
return static_cast<QTouchWebView*>(m_touchWebViewWindow.webView.data());
diff --git a/Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h b/Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h
index cfcb441..485a328 100644
--- a/Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h
+++ b/Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h
@@ -51,6 +51,7 @@ Q_SIGNALS:
void loadSucceeded();
void loadFailed(QBaseWebView::ErrorType, int, const QUrl&);
void loadProgressChanged(int);
+ void initialLayoutCompleted();
private Q_SLOTS:
void touchViewLoadStarted();
@@ -61,6 +62,8 @@ private Q_SLOTS:
void desktopViewLoadFailed(QBaseWebView::ErrorType, int, const QUrl&);
void touchViewLoadProgressChanged(int);
void desktopViewLoadProgressChanged(int);
+ void touchViewInitialLayoutCompleted();
+ void desktopViewInitialLayoutCompleted();
private:
QTouchWebView* touchWebView() const;
diff --git a/Source/WebKit2/UIProcess/qt/ClientImpl.cpp b/Source/WebKit2/UIProcess/qt/ClientImpl.cpp
index 802ede6..ef5357a 100644
--- a/Source/WebKit2/UIProcess/qt/ClientImpl.cpp
+++ b/Source/WebKit2/UIProcess/qt/ClientImpl.cpp
@@ -119,6 +119,13 @@ static void qt_wk_didFailLoadWithErrorForFrame(WKPageRef page, WKFrameRef frame,
dispatchLoadFailed(frame, clientInfo, error);
}
+static void qt_wk_didFirstVisuallyNonEmptyLayoutForFrame(WKPageRef, WKFrameRef frame, WKTypeRef, const void* clientInfo)
+{
+ if (!WKFrameIsMainFrame(frame))
+ return;
+ toQtWebPageProxy(clientInfo)->didCompleteInitialLayout();
+}
+
static void qt_wk_didSameDocumentNavigationForFrame(WKPageRef page, WKFrameRef frame, WKSameDocumentNavigationType type, WKTypeRef userData, const void* clientInfo)
{
WebFrameProxy* wkframe = toImpl(frame);
@@ -311,6 +318,7 @@ void setupPageLoaderClient(QtWebPageProxy* qtWebPageProxy, WebPageProxy* webPage
loadClient.didCommitLoadForFrame = qt_wk_didCommitLoadForFrame;
loadClient.didFinishLoadForFrame = qt_wk_didFinishLoadForFrame;
loadClient.didFailLoadWithErrorForFrame = qt_wk_didFailLoadWithErrorForFrame;
+ loadClient.didFirstVisuallyNonEmptyLayoutForFrame = qt_wk_didFirstVisuallyNonEmptyLayoutForFrame;
loadClient.didSameDocumentNavigationForFrame = qt_wk_didSameDocumentNavigationForFrame;
loadClient.didReceiveTitleForFrame = qt_wk_didReceiveTitleForFrame;
loadClient.didStartProgress = qt_wk_didStartProgress;
diff --git a/Source/WebKit2/UIProcess/qt/QtTouchViewInterface.cpp b/Source/WebKit2/UIProcess/qt/QtTouchViewInterface.cpp
index f9f9b96..b48f427 100644
--- a/Source/WebKit2/UIProcess/qt/QtTouchViewInterface.cpp
+++ b/Source/WebKit2/UIProcess/qt/QtTouchViewInterface.cpp
@@ -137,6 +137,11 @@ void QtTouchViewInterface::loadDidFail(const QtWebError& error)
emit m_viewportView->loadFailed(static_cast<QBaseWebView::ErrorType>(error.type()), error.errorCode(), error.url());
}
+void QtTouchViewInterface::didCompleteInitialLayout()
+{
+ emit m_viewportView->initialLayoutCompleted();
+}
+
void QtTouchViewInterface::didChangeLoadProgress(int percentageLoaded)
{
emit m_viewportView->loadProgressChanged(percentageLoaded);
diff --git a/Source/WebKit2/UIProcess/qt/QtTouchViewInterface.h b/Source/WebKit2/UIProcess/qt/QtTouchViewInterface.h
index a4fd457..6ff9f8b 100644
--- a/Source/WebKit2/UIProcess/qt/QtTouchViewInterface.h
+++ b/Source/WebKit2/UIProcess/qt/QtTouchViewInterface.h
@@ -67,6 +67,7 @@ private:
virtual void loadDidSucceed();
virtual void loadDidFail(const QtWebError&);
virtual void didChangeLoadProgress(int);
+ virtual void didCompleteInitialLayout();
virtual void showContextMenu(QSharedPointer<QMenu>);
virtual void hideContextMenu();
diff --git a/Source/WebKit2/UIProcess/qt/QtViewInterface.h b/Source/WebKit2/UIProcess/qt/QtViewInterface.h
index a818911..2b73637 100644
--- a/Source/WebKit2/UIProcess/qt/QtViewInterface.h
+++ b/Source/WebKit2/UIProcess/qt/QtViewInterface.h
@@ -77,6 +77,7 @@ public:
virtual void loadDidCommit() = 0;
virtual void loadDidSucceed() = 0;
virtual void loadDidFail(const QtWebError&) = 0;
+ virtual void didCompleteInitialLayout() = 0;
virtual void didChangeLoadProgress(int) = 0;
virtual void showContextMenu(QSharedPointer<QMenu>) = 0;
diff --git a/Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp b/Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp
index 9454f56..a4a0e26 100644
--- a/Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp
+++ b/Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp
@@ -399,6 +399,11 @@ void QtWebPageProxy::loadDidFail(const QtWebError& error)
m_viewInterface->loadDidFail(error);
}
+void QtWebPageProxy::didCompleteInitialLayout()
+{
+ m_viewInterface->didCompleteInitialLayout();
+}
+
void QtWebPageProxy::didChangeLoadProgress(int newLoadProgress)
{
m_loadProgress = newLoadProgress;
diff --git a/Source/WebKit2/UIProcess/qt/QtWebPageProxy.h b/Source/WebKit2/UIProcess/qt/QtWebPageProxy.h
index de01db2..7a57f3e 100644
--- a/Source/WebKit2/UIProcess/qt/QtWebPageProxy.h
+++ b/Source/WebKit2/UIProcess/qt/QtWebPageProxy.h
@@ -135,6 +135,7 @@ public:
void loadDidCommit();
void loadDidSucceed();
void loadDidFail(const QtWebError&);
+ void didCompleteInitialLayout();
void didChangeLoadProgress(int);
int loadProgress() const { return m_loadProgress; }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment