Diff
Modified: trunk/Source/WebKit2/ChangeLog (116515 => 116516)
--- trunk/Source/WebKit2/ChangeLog 2012-05-09 11:38:36 UTC (rev 116515)
+++ trunk/Source/WebKit2/ChangeLog 2012-05-09 12:11:17 UTC (rev 116516)
@@ -1,5 +1,55 @@
2012-05-09 Zalan Bujtas <[email protected]>
+ [Qt][WK2] Define clear split between QtWebPageLoadClient and QQuickWebViewPrivate for loading tasks.
+ https://bugs.webkit.org/show_bug.cgi?id=84527#c3
+
+ Reviewed by Simon Hausmann.
+
+ Moving loading related code and signal emission from QtWebPageLoadClient to QQuickWebViewPrivate.
+ It puts the loading code that implements an API right where the API is defined, including
+ signal emission as well as translation of WebPageProxy internals to public Qt API with correct types.
+
+ * UIProcess/API/qt/qquickwebview.cpp:
+ (QQuickWebViewPrivate::QQuickWebViewPrivate):
+ (QQuickWebViewPrivate::provisionalLoadDidStart):
+ (QQuickWebViewPrivate::loadDidCommit):
+ (QQuickWebViewPrivate::didSameDocumentNavigation):
+ (QQuickWebViewPrivate::titleDidChange):
+ (QQuickWebViewPrivate::loadProgressDidChange):
+ (QQuickWebViewPrivate::backForwardListDidChange):
+ (QQuickWebViewPrivate::loadDidFail):
+ (QQuickWebViewPrivate::processDidCrash):
+ (QQuickWebView::loadProgress):
+ * UIProcess/API/qt/qquickwebview_p_p.h:
+ (WebKit):
+ (QQuickWebViewPrivate):
+ (QQuickWebViewPrivate::didChangeViewportProperties):
+ (QQuickWebViewPrivate::loadProgress):
+ (QQuickWebViewFlickablePrivate):
+ * UIProcess/qt/QtWebError.cpp:
+ (WebKit::QtWebError::isCancellation):
+ (WebKit):
+ * UIProcess/qt/QtWebError.h:
+ * UIProcess/qt/QtWebPageLoadClient.cpp:
+ (WebKit::QtWebPageLoadClient::QtWebPageLoadClient):
+ (WebKit):
+ (WebKit::QtWebPageLoadClient::didStartProvisionalLoad):
+ (WebKit::QtWebPageLoadClient::didCommitLoad):
+ (WebKit::QtWebPageLoadClient::didSameDocumentNavigation):
+ (WebKit::QtWebPageLoadClient::didReceiveTitle):
+ (WebKit::QtWebPageLoadClient::didChangeProgress):
+ (WebKit::QtWebPageLoadClient::didChangeBackForwardList):
+ (WebKit::QtWebPageLoadClient::dispatchLoadFailed):
+ (WebKit::QtWebPageLoadClient::didFailProvisionalLoadWithErrorForFrame):
+ (WebKit::QtWebPageLoadClient::didFailLoadWithErrorForFrame):
+ (WebKit::QtWebPageLoadClient::didStartProgress):
+ (WebKit::QtWebPageLoadClient::didFinishProgress):
+ * UIProcess/qt/QtWebPageLoadClient.h:
+ (WebKit):
+ (QtWebPageLoadClient):
+
+2012-05-09 Zalan Bujtas <[email protected]>
+
[Qt][WK2] Remove delayed loadDidSucceed() signaling and m_deferedUrlToLoad from QQuickWebViewPrivate
https://bugs.webkit.org/show_bug.cgi?id=85906
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp (116515 => 116516)
--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp 2012-05-09 11:38:36 UTC (rev 116515)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp 2012-05-09 12:11:17 UTC (rev 116516)
@@ -27,6 +27,7 @@
#include "QtDownloadManager.h"
#include "QtViewportInteractionEngine.h"
#include "QtWebContext.h"
+#include "QtWebError.h"
#include "QtWebIconDatabaseClient.h"
#include "QtWebPageEventHandler.h"
#include "QtWebPageLoadClient.h"
@@ -265,6 +266,7 @@
, m_navigatorQtObjectEnabled(false)
, m_renderToOffscreenBuffer(false)
, m_dialogActive(false)
+ , m_loadProgress(0)
{
viewport->setClip(true);
viewport->setPixelAligned(true);
@@ -333,14 +335,74 @@
\qmlsignal WebView::loadingChanged(WebLoadRequest request)
*/
+void QQuickWebViewPrivate::provisionalLoadDidStart(const QUrl& url)
+{
+ Q_Q(QQuickWebView);
+
+ QWebLoadRequest loadRequest(url, QQuickWebView::LoadStartedStatus);
+ emit q->loadingChanged(&loadRequest);
+}
+
+void QQuickWebViewPrivate::loadDidCommit()
+{
+ Q_Q(QQuickWebView);
+ ASSERT(q->loading());
+
+ emit q->navigationHistoryChanged();
+ emit q->urlChanged();
+ emit q->titleChanged();
+}
+
+void QQuickWebViewPrivate::didSameDocumentNavigation()
+{
+ Q_Q(QQuickWebView);
+
+ emit q->navigationHistoryChanged();
+ emit q->urlChanged();
+}
+
+void QQuickWebViewPrivate::titleDidChange()
+{
+ Q_Q(QQuickWebView);
+
+ emit q->titleChanged();
+}
+
+void QQuickWebViewPrivate::loadProgressDidChange(int loadProgress)
+{
+ Q_Q(QQuickWebView);
+
+ if (!loadProgress)
+ setIcon(QUrl());
+
+ m_loadProgress = loadProgress;
+
+ emit q->loadProgressChanged();
+}
+
+void QQuickWebViewPrivate::backForwardListDidChange()
+{
+ navigationHistory->d->reset();
+}
+
void QQuickWebViewPrivate::loadDidSucceed()
{
Q_Q(QQuickWebView);
ASSERT(!q->loading());
+
QWebLoadRequest loadRequest(q->url(), QQuickWebView::LoadSucceededStatus);
emit q->loadingChanged(&loadRequest);
}
+void QQuickWebViewPrivate::loadDidFail(const QtWebError& error)
+{
+ Q_Q(QQuickWebView);
+ ASSERT(!q->loading());
+
+ QWebLoadRequest loadRequest(error.url(), QQuickWebView::LoadFailedStatus, error.description(), static_cast<QQuickWebView::ErrorDomain>(error.type()), error.errorCode());
+ emit q->loadingChanged(&loadRequest);
+}
+
void QQuickWebViewPrivate::setNeedsDisplay()
{
Q_Q(QQuickWebView);
@@ -364,18 +426,22 @@
setIcon(iconURL);
}
-void QQuickWebViewPrivate::didChangeBackForwardList()
-{
- navigationHistory->d->reset();
-}
-
void QQuickWebViewPrivate::processDidCrash()
{
- pageView->eventHandler()->resetGestureRecognizers();
- pageLoadClient->completeLoadWhenProcessDidCrashIfNeeded();
+ Q_Q(QQuickWebView);
QUrl url(KURL(WebCore::ParsedURLString, webPageProxy->urlAtProcessExit()));
qWarning("WARNING: The web process experienced a crash on '%s'.", qPrintable(url.toString(QUrl::RemoveUserInfo)));
+
+ pageView->eventHandler()->resetGestureRecognizers();
+
+ // Check if loading was ongoing, when process crashed.
+ if (m_loadProgress > 0 && m_loadProgress < 100) {
+ QWebLoadRequest loadRequest(url, QQuickWebView::LoadFailedStatus, QLatin1String("The web process crashed."), QQuickWebView::InternalErrorDomain, 0);
+
+ loadProgressDidChange(100);
+ emit q->loadingChanged(&loadRequest);
+ }
}
void QQuickWebViewPrivate::didRelaunchProcess()
@@ -787,16 +853,6 @@
_q_onVisibleChanged();
}
-void QQuickWebViewFlickablePrivate::loadDidCommit()
-{
- // Due to entering provisional load before committing, we
- // might actually be suspended here.
-}
-
-void QQuickWebViewFlickablePrivate::didFinishFirstNonEmptyLayout()
-{
-}
-
void QQuickWebViewFlickablePrivate::didChangeViewportProperties(const WebCore::ViewportAttributes& newAttributes)
{
Q_Q(QQuickWebView);
@@ -1452,7 +1508,7 @@
int QQuickWebView::loadProgress() const
{
Q_D(const QQuickWebView);
- return d->pageLoadClient->loadProgress();
+ return d->loadProgress();
}
bool QQuickWebView::canGoBack() const
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h (116515 => 116516)
--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h 2012-05-09 11:38:36 UTC (rev 116515)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h 2012-05-09 12:11:17 UTC (rev 116516)
@@ -41,6 +41,7 @@
class QtDialogRunner;
class QtViewportInteractionEngine;
class QtWebContext;
+class QtWebError;
class QtWebPageLoadClient;
class QtWebPagePolicyClient;
class WebPageProxy;
@@ -75,12 +76,18 @@
virtual QPointF pageItemPos();
virtual void updateContentsSize(const QSizeF&) { }
+ virtual void provisionalLoadDidStart(const QUrl& url);
+ virtual void loadDidCommit();
+ virtual void didSameDocumentNavigation();
+ virtual void titleDidChange();
+ virtual void loadProgressDidChange(int loadProgress);
+ virtual void backForwardListDidChange();
virtual void loadDidSucceed();
- virtual void loadDidCommit() { }
- virtual void didFinishFirstNonEmptyLayout() { }
+ virtual void loadDidFail(const WebKit::QtWebError& error);
+
virtual void didChangeViewportProperties(const WebCore::ViewportAttributes& attr) { }
- void didChangeBackForwardList();
+ int loadProgress() const { return m_loadProgress; }
void setNeedsDisplay();
virtual WebKit::QtViewportInteractionEngine* viewportInteractionEngine() { return 0; }
@@ -193,6 +200,7 @@
bool m_renderToOffscreenBuffer;
bool m_dialogActive;
QUrl m_iconURL;
+ int m_loadProgress;
};
class QQuickWebViewLegacyPrivate : public QQuickWebViewPrivate {
@@ -221,8 +229,6 @@
virtual QPointF pageItemPos();
virtual void updateContentsSize(const QSizeF&);
- virtual void loadDidCommit();
- virtual void didFinishFirstNonEmptyLayout();
virtual void didChangeViewportProperties(const WebCore::ViewportAttributes&);
virtual WebKit::QtViewportInteractionEngine* viewportInteractionEngine() { return interactionEngine.data(); }
virtual void updateViewportSize();
Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebError.cpp (116515 => 116516)
--- trunk/Source/WebKit2/UIProcess/qt/QtWebError.cpp 2012-05-09 11:38:36 UTC (rev 116515)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebError.cpp 2012-05-09 12:11:17 UTC (rev 116516)
@@ -66,4 +66,9 @@
return WKStringCopyQString(WKErrorCopyLocalizedDescription(error.get()));
}
+bool QtWebError::isCancellation() const
+{
+ return toImpl(error.get())->platformError().isCancellation();
+}
+
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebError.h (116515 => 116516)
--- trunk/Source/WebKit2/UIProcess/qt/QtWebError.h 2012-05-09 11:38:36 UTC (rev 116515)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebError.h 2012-05-09 12:11:17 UTC (rev 116516)
@@ -46,6 +46,7 @@
QUrl url() const;
int errorCode() const;
QString description() const;
+ bool isCancellation() const;
int errorCodeAsHttpStatusCode() const { return errorCode(); }
QNetworkReply::NetworkError errorCodeAsNetworkError() const { return static_cast<QNetworkReply::NetworkError>(errorCode()); }
Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebPageLoadClient.cpp (116515 => 116516)
--- trunk/Source/WebKit2/UIProcess/qt/QtWebPageLoadClient.cpp 2012-05-09 11:38:36 UTC (rev 116515)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebPageLoadClient.cpp 2012-05-09 12:11:17 UTC (rev 116516)
@@ -22,13 +22,7 @@
#include "QtWebPageLoadClient.h"
#include "QtWebError.h"
-#include "WKStringQt.h"
-#include "qquickwebview_p.h"
#include "qquickwebview_p_p.h"
-#include "qwebloadrequest_p.h"
-#include <KURL.h>
-#include <WKFrame.h>
-#include <WebPageProxy.h>
using namespace WebCore;
@@ -36,8 +30,6 @@
QtWebPageLoadClient::QtWebPageLoadClient(WKPageRef pageRef, QQuickWebView* webView)
: m_webView(webView)
- , m_webPageProxy(toImpl(pageRef))
- , m_loadProgress(0)
{
WKPageLoaderClient loadClient;
memset(&loadClient, 0, sizeof(WKPageLoaderClient));
@@ -53,57 +45,38 @@
loadClient.didStartProgress = didStartProgress;
loadClient.didChangeProgress = didChangeProgress;
loadClient.didFinishProgress = didFinishProgress;
- loadClient.didFirstVisuallyNonEmptyLayoutForFrame = didFirstVisuallyNonEmptyLayoutForFrame;
loadClient.didChangeBackForwardList = didChangeBackForwardList;
WKPageSetPageLoaderClient(pageRef, &loadClient);
}
-void QtWebPageLoadClient::completeLoadWhenProcessDidCrashIfNeeded()
-{
- // Check if loading was ongoing, when process crashed.
- if (!m_loadProgress || m_loadProgress == 100)
- return;
-
- QUrl url(KURL(WebCore::ParsedURLString, m_webPageProxy->urlAtProcessExit()));
- QWebLoadRequest loadRequest(url, QQuickWebView::LoadFailedStatus, QLatin1String("The web process crashed."), QQuickWebView::InternalErrorDomain, 0);
-
- emit m_webView->loadingChanged(&loadRequest);
- setLoadProgress(100);
-}
-
void QtWebPageLoadClient::didStartProvisionalLoad(const QUrl& url)
{
- QWebLoadRequest loadRequest(url, QQuickWebView::LoadStartedStatus);
- emit m_webView->loadingChanged(&loadRequest);
+ m_webView->d_func()->provisionalLoadDidStart(url);
}
void QtWebPageLoadClient::didCommitLoad()
{
- emit m_webView->navigationHistoryChanged();
- emit m_webView->urlChanged();
- emit m_webView->titleChanged();
m_webView->d_func()->loadDidCommit();
}
void QtWebPageLoadClient::didSameDocumentNavigation()
{
- emit m_webView->navigationHistoryChanged();
- emit m_webView->urlChanged();
+ m_webView->d_func()->didSameDocumentNavigation();
}
void QtWebPageLoadClient::didReceiveTitle()
{
- emit m_webView->titleChanged();
+ m_webView->d_func()->titleDidChange();
}
-void QtWebPageLoadClient::didFirstVisuallyNonEmptyLayout()
+void QtWebPageLoadClient::didChangeProgress(int loadProgress)
{
- m_webView->d_func()->didFinishFirstNonEmptyLayout();
+ m_webView->d_func()->loadProgressDidChange(loadProgress);
}
void QtWebPageLoadClient::didChangeBackForwardList()
{
- m_webView->d_func()->didChangeBackForwardList();
+ m_webView->d_func()->backForwardListDidChange();
}
void QtWebPageLoadClient::dispatchLoadSucceeded()
@@ -111,26 +84,19 @@
m_webView->d_func()->loadDidSucceed();
}
-void QtWebPageLoadClient::dispatchLoadFailed(WKErrorRef error)
+void QtWebPageLoadClient::dispatchLoadFailed(const QtWebError& error)
{
- int errorCode = WKErrorGetErrorCode(error);
- if (toImpl(error)->platformError().isCancellation() || errorCode == kWKErrorCodeFrameLoadInterruptedByPolicyChange || errorCode == kWKErrorCodePlugInWillHandleLoad) {
+ int errorCode = error.errorCode();
+
+ if (error.isCancellation() || errorCode == kWKErrorCodeFrameLoadInterruptedByPolicyChange || errorCode == kWKErrorCodePlugInWillHandleLoad) {
// Make sure that LoadStartedStatus has a counterpart when e.g. requesting a download.
dispatchLoadSucceeded();
return;
}
- QtWebError qtError(error);
- QWebLoadRequest loadRequest(qtError.url(), QQuickWebView::LoadFailedStatus, qtError.description(), static_cast<QQuickWebView::ErrorDomain>(qtError.type()), qtError.errorCode());
- emit m_webView->loadingChanged(&loadRequest);
+ m_webView->d_func()->loadDidFail(error);
}
-void QtWebPageLoadClient::setLoadProgress(int loadProgress)
-{
- m_loadProgress = loadProgress;
- emit m_webView->loadProgressChanged();
-}
-
static QtWebPageLoadClient* toQtWebPageLoadClient(const void* clientInfo)
{
ASSERT(clientInfo);
@@ -141,8 +107,7 @@
{
if (!WKFrameIsMainFrame(frame))
return;
- WebFrameProxy* wkframe = toImpl(frame);
- QString urlStr(wkframe->provisionalURL());
+ QString urlStr(toImpl(frame)->provisionalURL());
QUrl qUrl = urlStr;
toQtWebPageLoadClient(clientInfo)->didStartProvisionalLoad(qUrl);
}
@@ -191,28 +156,19 @@
void QtWebPageLoadClient::didStartProgress(WKPageRef, const void* clientInfo)
{
- QtWebPageLoadClient* client = toQtWebPageLoadClient(clientInfo);
- client->setLoadProgress(0);
- client->m_webView->d_func()->setIcon(QUrl());
+ toQtWebPageLoadClient(clientInfo)->didChangeProgress(0);
}
void QtWebPageLoadClient::didChangeProgress(WKPageRef page, const void* clientInfo)
{
- toQtWebPageLoadClient(clientInfo)->setLoadProgress(WKPageGetEstimatedProgress(page) * 100);
+ toQtWebPageLoadClient(clientInfo)->didChangeProgress(WKPageGetEstimatedProgress(page) * 100);
}
void QtWebPageLoadClient::didFinishProgress(WKPageRef, const void* clientInfo)
{
- toQtWebPageLoadClient(clientInfo)->setLoadProgress(100);
+ toQtWebPageLoadClient(clientInfo)->didChangeProgress(100);
}
-void QtWebPageLoadClient::didFirstVisuallyNonEmptyLayoutForFrame(WKPageRef, WKFrameRef frame, WKTypeRef, const void *clientInfo)
-{
- if (!WKFrameIsMainFrame(frame))
- return;
- toQtWebPageLoadClient(clientInfo)->didFirstVisuallyNonEmptyLayout();
-}
-
void QtWebPageLoadClient::didChangeBackForwardList(WKPageRef, WKBackForwardListItemRef, WKArrayRef, const void *clientInfo)
{
toQtWebPageLoadClient(clientInfo)->didChangeBackForwardList();
Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebPageLoadClient.h (116515 => 116516)
--- trunk/Source/WebKit2/UIProcess/qt/QtWebPageLoadClient.h 2012-05-09 11:38:36 UTC (rev 116515)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebPageLoadClient.h 2012-05-09 12:11:17 UTC (rev 116516)
@@ -32,27 +32,23 @@
namespace WebKit {
-class WebPageProxy;
+class QtWebError;
class QtWebPageLoadClient {
public:
QtWebPageLoadClient(WKPageRef, QQuickWebView*);
- int loadProgress() const { return m_loadProgress; }
- void completeLoadWhenProcessDidCrashIfNeeded();
-
private:
void didStartProvisionalLoad(const QUrl&);
void didCommitLoad();
void didSameDocumentNavigation();
void didReceiveTitle();
- void didFirstVisuallyNonEmptyLayout();
+ void didChangeProgress(int);
void didChangeBackForwardList();
void dispatchLoadSucceeded();
- void dispatchLoadFailed(WKErrorRef);
+ void dispatchLoadFailed(const QtWebError&);
- void setLoadProgress(int);
// WKPageLoadClient callbacks.
static void didStartProvisionalLoadForFrame(WKPageRef, WKFrameRef, WKTypeRef userData, const void* clientInfo);
@@ -65,12 +61,9 @@
static void didStartProgress(WKPageRef, const void* clientInfo);
static void didChangeProgress(WKPageRef, const void* clientInfo);
static void didFinishProgress(WKPageRef, const void* clientInfo);
- static void didFirstVisuallyNonEmptyLayoutForFrame(WKPageRef, WKFrameRef, WKTypeRef userData, const void* clientInfo);
static void didChangeBackForwardList(WKPageRef, WKBackForwardListItemRef, WKArrayRef, const void *clientInfo);
QQuickWebView* m_webView;
- WebPageProxy* m_webPageProxy;
- int m_loadProgress;
};
} // namespace Webkit