Modified: trunk/Source/WebKit2/ChangeLog (115807 => 115808)
--- trunk/Source/WebKit2/ChangeLog 2012-05-02 09:52:19 UTC (rev 115807)
+++ trunk/Source/WebKit2/ChangeLog 2012-05-02 10:00:28 UTC (rev 115808)
@@ -1,3 +1,42 @@
+2012-05-02 Zalan Bujtas <[email protected]>
+
+ [Qt][WK2] Minibrowser's progress bar should reset when WebProcess crashes while loading.
+ https://bugs.webkit.org/show_bug.cgi?id=84445
+
+ Reviewed by Jocelyn Turcotte.
+
+ Progress value needs resetting, when WebProcess crashes.
+ This patch moves crash logic for loading to QtWebPageLoadClient. It
+ also simplifies the callback function names in QtWebPageLoadClient, as they
+ all valid only for main frames.
+
+ * UIProcess/API/qt/qquickwebview.cpp:
+ (QQuickWebViewPrivate::QQuickWebViewPrivate):
+ (QQuickWebViewPrivate::processDidCrash):
+ (QQuickWebViewFlickablePrivate::loadDidSucceed):
+ * UIProcess/API/qt/qquickwebview_p_p.h:
+ (QQuickWebViewPrivate::didChangeViewportProperties):
+ (QQuickWebViewPrivate):
+ * UIProcess/qt/QtWebPageLoadClient.cpp:
+ (WebKit::QtWebPageLoadClient::QtWebPageLoadClient):
+ (WebKit::QtWebPageLoadClient::completeLoadWhenProcessDidCrashIfNeeded):
+ (WebKit):
+ (WebKit::QtWebPageLoadClient::didStartProvisionalLoad):
+ (WebKit::QtWebPageLoadClient::didReceiveServerRedirectForProvisionalLoad):
+ (WebKit::QtWebPageLoadClient::didCommitLoad):
+ (WebKit::QtWebPageLoadClient::didSameDocumentNavigation):
+ (WebKit::QtWebPageLoadClient::didReceiveTitle):
+ (WebKit::QtWebPageLoadClient::didFirstVisuallyNonEmptyLayout):
+ (WebKit::QtWebPageLoadClient::didStartProvisionalLoadForFrame):
+ (WebKit::QtWebPageLoadClient::didReceiveServerRedirectForProvisionalLoadForFrame):
+ (WebKit::QtWebPageLoadClient::didCommitLoadForFrame):
+ (WebKit::QtWebPageLoadClient::didSameDocumentNavigationForFrame):
+ (WebKit::QtWebPageLoadClient::didReceiveTitleForFrame):
+ (WebKit::QtWebPageLoadClient::didFirstVisuallyNonEmptyLayoutForFrame):
+ * UIProcess/qt/QtWebPageLoadClient.h:
+ (WebKit):
+ (QtWebPageLoadClient):
+
2012-05-02 Simon Hausmann <[email protected]>
[Qt] QQuickWebView does not allow for input from virtual keyboard
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp (115807 => 115808)
--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp 2012-05-02 09:52:19 UTC (rev 115807)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp 2012-05-02 10:00:28 UTC (rev 115808)
@@ -161,7 +161,6 @@
, m_useDefaultContentItemSize(true)
, m_navigatorQtObjectEnabled(false)
, m_renderToOffscreenBuffer(false)
- , m_loadStartedSignalSent(false)
, m_dialogActive(false)
{
viewport->setClip(true);
@@ -264,14 +263,6 @@
setIcon(iconURL);
}
-void QQuickWebViewPrivate::didChangeLoadingState(QWebLoadRequest* loadRequest)
-{
- Q_Q(QQuickWebView);
- ASSERT(q->loading() == (loadRequest->status() == QQuickWebView::LoadStartedStatus));
- emit q->loadingChanged(loadRequest);
- m_loadStartedSignalSent = loadRequest->status() == QQuickWebView::LoadStartedStatus;
-}
-
void QQuickWebViewPrivate::didChangeBackForwardList()
{
navigationHistory->d->reset();
@@ -280,11 +271,9 @@
void QQuickWebViewPrivate::processDidCrash()
{
pageView->eventHandler()->resetGestureRecognizers();
+ pageLoadClient->completeLoadWhenProcessDidCrashIfNeeded();
+
QUrl url(KURL(WebCore::ParsedURLString, webPageProxy->urlAtProcessExit()));
- if (m_loadStartedSignalSent) {
- QWebLoadRequest loadRequest(url, QQuickWebView::LoadFailedStatus, QLatin1String("The web process crashed."), QQuickWebView::InternalErrorDomain, 0);
- didChangeLoadingState(&loadRequest);
- }
qWarning("WARNING: The web process experienced a crash on '%s'.", qPrintable(url.toString(QUrl::RemoveUserInfo)));
}
@@ -702,7 +691,6 @@
QQuickWebViewPrivate::loadDidSucceed();
else
loadSuccessDispatchIsPending = true;
-
}
void QQuickWebViewFlickablePrivate::loadDidCommit()
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h (115807 => 115808)
--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h 2012-05-02 09:52:19 UTC (rev 115807)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h 2012-05-02 10:00:28 UTC (rev 115808)
@@ -78,7 +78,6 @@
virtual void loadDidCommit() { }
virtual void didFinishFirstNonEmptyLayout() { }
virtual void didChangeViewportProperties(const WebCore::ViewportAttributes& attr) { }
- void didChangeLoadingState(QWebLoadRequest* loadRequest);
void didChangeBackForwardList();
void setNeedsDisplay();
@@ -191,7 +190,6 @@
bool m_useDefaultContentItemSize;
bool m_navigatorQtObjectEnabled;
bool m_renderToOffscreenBuffer;
- bool m_loadStartedSignalSent;
bool m_dialogActive;
QUrl m_iconURL;
QUrl m_deferredUrlToLoad;
Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebPageLoadClient.cpp (115807 => 115808)
--- trunk/Source/WebKit2/UIProcess/qt/QtWebPageLoadClient.cpp 2012-05-02 09:52:19 UTC (rev 115807)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebPageLoadClient.cpp 2012-05-02 10:00:28 UTC (rev 115808)
@@ -26,12 +26,17 @@
#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;
+
namespace WebKit {
QtWebPageLoadClient::QtWebPageLoadClient(WKPageRef pageRef, QQuickWebView* webView)
: m_webView(webView)
+ , m_webPageProxy(toImpl(pageRef))
, m_loadProgress(0)
{
WKPageLoaderClient loadClient;
@@ -54,37 +59,50 @@
WKPageSetPageLoaderClient(pageRef, &loadClient);
}
-void QtWebPageLoadClient::didStartProvisionalLoadForFrame(const QUrl& url)
+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);
m_webView->emitUrlChangeIfNeeded();
- m_webView->d_func()->didChangeLoadingState(&loadRequest);
+ emit m_webView->loadingChanged(&loadRequest);
}
-void QtWebPageLoadClient::didReceiveServerRedirectForProvisionalLoadForFrame(const QUrl& url)
+void QtWebPageLoadClient::didReceiveServerRedirectForProvisionalLoad(const QUrl& url)
{
m_webView->emitUrlChangeIfNeeded();
}
-void QtWebPageLoadClient::didCommitLoadForFrame()
+void QtWebPageLoadClient::didCommitLoad()
{
emit m_webView->navigationHistoryChanged();
emit m_webView->titleChanged();
m_webView->d_func()->loadDidCommit();
}
-void QtWebPageLoadClient::didSameDocumentNavigationForFrame()
+void QtWebPageLoadClient::didSameDocumentNavigation()
{
m_webView->emitUrlChangeIfNeeded();
emit m_webView->navigationHistoryChanged();
}
-void QtWebPageLoadClient::didReceiveTitleForFrame()
+void QtWebPageLoadClient::didReceiveTitle()
{
emit m_webView->titleChanged();
}
-void QtWebPageLoadClient::didFirstVisuallyNonEmptyLayoutForFrame()
+void QtWebPageLoadClient::didFirstVisuallyNonEmptyLayout()
{
m_webView->d_func()->didFinishFirstNonEmptyLayout();
}
@@ -147,7 +165,7 @@
WebFrameProxy* wkframe = toImpl(frame);
QString urlStr(wkframe->provisionalURL());
QUrl qUrl = urlStr;
- toQtWebPageLoadClient(clientInfo)->didStartProvisionalLoadForFrame(qUrl);
+ toQtWebPageLoadClient(clientInfo)->didStartProvisionalLoad(qUrl);
}
void QtWebPageLoadClient::didReceiveServerRedirectForProvisionalLoadForFrame(WKPageRef, WKFrameRef frame, WKTypeRef, const void* clientInfo)
@@ -157,7 +175,7 @@
WebFrameProxy* wkframe = toImpl(frame);
QString urlStr(wkframe->provisionalURL());
QUrl qUrl = urlStr;
- toQtWebPageLoadClient(clientInfo)->didReceiveServerRedirectForProvisionalLoadForFrame(qUrl);
+ toQtWebPageLoadClient(clientInfo)->didReceiveServerRedirectForProvisionalLoad(qUrl);
}
void QtWebPageLoadClient::didFailProvisionalLoadWithErrorForFrame(WKPageRef, WKFrameRef frame, WKErrorRef error, WKTypeRef, const void* clientInfo)
@@ -172,7 +190,7 @@
{
if (!WKFrameIsMainFrame(frame))
return;
- toQtWebPageLoadClient(clientInfo)->didCommitLoadForFrame();
+ toQtWebPageLoadClient(clientInfo)->didCommitLoad();
}
void QtWebPageLoadClient::didFinishLoadForFrame(WKPageRef, WKFrameRef frame, WKTypeRef, const void* clientInfo)
@@ -189,16 +207,18 @@
toQtWebPageLoadClient(clientInfo)->dispatchLoadFailed(frame, error);
}
-void QtWebPageLoadClient::didSameDocumentNavigationForFrame(WKPageRef page, WKFrameRef frame, WKSameDocumentNavigationType type, WKTypeRef userData, const void* clientInfo)
+void QtWebPageLoadClient::didSameDocumentNavigationForFrame(WKPageRef, WKFrameRef frame, WKSameDocumentNavigationType type, WKTypeRef userData, const void* clientInfo)
{
- toQtWebPageLoadClient(clientInfo)->didSameDocumentNavigationForFrame();
+ if (!WKFrameIsMainFrame(frame))
+ return;
+ toQtWebPageLoadClient(clientInfo)->didSameDocumentNavigation();
}
void QtWebPageLoadClient::didReceiveTitleForFrame(WKPageRef, WKStringRef title, WKFrameRef frame, WKTypeRef, const void* clientInfo)
{
if (!WKFrameIsMainFrame(frame))
return;
- toQtWebPageLoadClient(clientInfo)->didReceiveTitleForFrame();
+ toQtWebPageLoadClient(clientInfo)->didReceiveTitle();
}
void QtWebPageLoadClient::didStartProgress(WKPageRef, const void* clientInfo)
@@ -222,7 +242,7 @@
{
if (!WKFrameIsMainFrame(frame))
return;
- toQtWebPageLoadClient(clientInfo)->didFirstVisuallyNonEmptyLayoutForFrame();
+ toQtWebPageLoadClient(clientInfo)->didFirstVisuallyNonEmptyLayout();
}
void QtWebPageLoadClient::didChangeBackForwardList(WKPageRef, WKBackForwardListItemRef, WKArrayRef, const void *clientInfo)
Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebPageLoadClient.h (115807 => 115808)
--- trunk/Source/WebKit2/UIProcess/qt/QtWebPageLoadClient.h 2012-05-02 09:52:19 UTC (rev 115807)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebPageLoadClient.h 2012-05-02 10:00:28 UTC (rev 115808)
@@ -32,23 +32,27 @@
namespace WebKit {
+class WebPageProxy;
+
class QtWebPageLoadClient {
public:
QtWebPageLoadClient(WKPageRef, QQuickWebView*);
int loadProgress() const { return m_loadProgress; }
+ void completeLoadWhenProcessDidCrashIfNeeded();
private:
- void didStartProvisionalLoadForFrame(const QUrl&);
- void didReceiveServerRedirectForProvisionalLoadForFrame(const QUrl&);
- void didCommitLoadForFrame();
- void didSameDocumentNavigationForFrame();
- void didReceiveTitleForFrame();
- void didFirstVisuallyNonEmptyLayoutForFrame();
+ void didStartProvisionalLoad(const QUrl&);
+ void didReceiveServerRedirectForProvisionalLoad(const QUrl&);
+ void didCommitLoad();
+ void didSameDocumentNavigation();
+ void didReceiveTitle();
+ void didFirstVisuallyNonEmptyLayout();
void didChangeBackForwardList();
void dispatchLoadSucceeded();
void dispatchLoadFailed(WKFrameRef, WKErrorRef);
+
void setLoadProgress(int);
// WKPageLoadClient callbacks.
@@ -67,6 +71,7 @@
static void didChangeBackForwardList(WKPageRef, WKBackForwardListItemRef, WKArrayRef, const void *clientInfo);
QQuickWebView* m_webView;
+ WebPageProxy* m_webPageProxy;
int m_loadProgress;
};