[Qt][WK2] Make loading errors API easier to use.
authoralexis.menard@openbossa.org <alexis.menard@openbossa.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Sep 2011 21:09:56 +0000 (21:09 +0000)
committeralexis.menard@openbossa.org <alexis.menard@openbossa.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Sep 2011 21:09:56 +0000 (21:09 +0000)
https://bugs.webkit.org/show_bug.cgi?id=68357

Reviewed by Tor Arne Vestbø.

Make the API to get loading errors easier to use. 95197 introduced
a QJSValue API that is a bit opaque for the client code. Rather than
using a dedicated object, we can just pass the needed information as
parameters of the slot.

* UIProcess/API/qt/qdesktopwebview.cpp:
(QDesktopWebViewPrivate::loadDidFail):
* UIProcess/API/qt/qdesktopwebview.h:
* UIProcess/API/qt/qdesktopwebview_p.h:
* UIProcess/API/qt/qtouchwebpage.h:
* UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp:
(tst_CommonViewTests::loadNonexistentFileUrl):
* UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:
(WebViewAbstraction::WebViewAbstraction):
(WebViewAbstraction::touchViewLoadFailed):
(WebViewAbstraction::desktopViewLoadFailed):
* UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h:
* UIProcess/qt/QtWebPageProxy.cpp:
(QtWebPageProxy::loadDidFail):
* UIProcess/qt/TouchViewInterface.cpp:
(WebKit::TouchViewInterface::loadDidFail):
* UIProcess/qt/TouchViewInterface.h:
* UIProcess/qt/ViewInterface.h:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@95472 268f45cc-cd09-0410-ab3c-d52691b4dbfc

12 files changed:
Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp
Source/WebKit2/UIProcess/API/qt/qdesktopwebview.h
Source/WebKit2/UIProcess/API/qt/qdesktopwebview_p.h
Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h
Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp
Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp
Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h
Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp
Source/WebKit2/UIProcess/qt/TouchViewInterface.cpp
Source/WebKit2/UIProcess/qt/TouchViewInterface.h
Source/WebKit2/UIProcess/qt/ViewInterface.h

index 55da5c7..848dcab 100644 (file)
@@ -1,3 +1,34 @@
+2011-09-19  Alexis Menard  <alexis.menard@openbossa.org>
+
+        [Qt][WK2] Make loading errors API easier to use.
+        https://bugs.webkit.org/show_bug.cgi?id=68357
+
+        Reviewed by Tor Arne Vestbø.
+
+        Make the API to get loading errors easier to use. 95197 introduced
+        a QJSValue API that is a bit opaque for the client code. Rather than
+        using a dedicated object, we can just pass the needed information as
+        parameters of the slot.
+
+        * UIProcess/API/qt/qdesktopwebview.cpp:
+        (QDesktopWebViewPrivate::loadDidFail):
+        * UIProcess/API/qt/qdesktopwebview.h:
+        * UIProcess/API/qt/qdesktopwebview_p.h:
+        * UIProcess/API/qt/qtouchwebpage.h:
+        * UIProcess/API/qt/tests/commonviewtests/tst_commonviewtests.cpp:
+        (tst_CommonViewTests::loadNonexistentFileUrl):
+        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:
+        (WebViewAbstraction::WebViewAbstraction):
+        (WebViewAbstraction::touchViewLoadFailed):
+        (WebViewAbstraction::desktopViewLoadFailed):
+        * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.h:
+        * UIProcess/qt/QtWebPageProxy.cpp:
+        (QtWebPageProxy::loadDidFail):
+        * UIProcess/qt/TouchViewInterface.cpp:
+        (WebKit::TouchViewInterface::loadDidFail):
+        * UIProcess/qt/TouchViewInterface.h:
+        * UIProcess/qt/ViewInterface.h:
+
 2011-09-19  Dan Bernstein  <mitz@apple.com>
 
         WebKit2 part of [mac] WebKit contains Objective-C classes that are not prefixed with its standard prefixes
index df787f6..9df8a0f 100644 (file)
@@ -21,6 +21,7 @@
 #include "config.h"
 #include "qdesktopwebview.h"
 #include "qdesktopwebview_p.h"
+#include "qweberror.h"
 
 #include <QGraphicsSceneResizeEvent>
 #include <QStyleOptionGraphicsItem>
@@ -144,9 +145,9 @@ void QDesktopWebViewPrivate::loadDidSucceed()
     emit q->loadSucceeded();
 }
 
-void QDesktopWebViewPrivate::loadDidFail(const QJSValue& error)
+void QDesktopWebViewPrivate::loadDidFail(const QWebError& error)
 {
-    emit q->loadFailed(error);
+    emit q->loadFailed(static_cast<QDesktopWebView::ErrorType>(error.type()), error.errorCode(), error.url());
 }
 
 void QDesktopWebViewPrivate::didChangeLoadProgress(int percentageLoaded)
index b7e7bda..6b37737 100644 (file)
@@ -54,7 +54,7 @@ class QWEBKIT_EXPORT QDesktopWebView : public QSGPaintedItem {
     Q_PROPERTY(int loadProgress READ loadProgress NOTIFY loadProgressChanged)
     Q_PROPERTY(QWebNavigationController* navigation READ navigationController CONSTANT)
     Q_ENUMS(NavigationPolicy)
-
+    Q_ENUMS(ErrorType)
 public:
     enum NavigationPolicy {
         UsePolicy,
@@ -62,6 +62,12 @@ public:
         IgnorePolicy
     };
 
+    enum ErrorType {
+        EngineError,
+        NetworkError,
+        HttpError,
+    };
+
     QDesktopWebView(QSGItem* parent = 0);
     virtual ~QDesktopWebView();
 
@@ -79,8 +85,7 @@ Q_SIGNALS:
     void statusBarMessageChanged(const QString&);
     void loadStarted();
     void loadSucceeded();
-    // The parameter needs to be explicitly named to work in QML.
-    void loadFailed(const QJSValue& error);
+    void loadFailed(QDesktopWebView::ErrorType errorType, int errorCode, const QUrl& url);
     void loadProgressChanged(int progress);
     void urlChanged(const QUrl&);
 
index 275c204..43b7dd2 100644 (file)
@@ -71,7 +71,7 @@ private:
     virtual void loadDidBegin();
     virtual void loadDidCommit();
     virtual void loadDidSucceed();
-    virtual void loadDidFail(const QJSValue&);
+    virtual void loadDidFail(const QWebError&);
     virtual void didChangeLoadProgress(int);
 
     virtual void showContextMenu(QSharedPointer<QMenu>);
index ec9f033..0393bc7 100644 (file)
@@ -41,8 +41,14 @@ class QWEBKIT_EXPORT QTouchWebPage : public QSGItem {
     Q_PROPERTY(QUrl url READ url NOTIFY urlChanged)
     Q_PROPERTY(int loadProgress READ loadProgress NOTIFY loadProgressChanged)
     Q_PROPERTY(QWebNavigationController* navigation READ navigationController CONSTANT)
-
+    Q_ENUMS(ErrorType)
 public:
+    enum ErrorType {
+        EngineError,
+        NetworkError,
+        HttpError,
+    };
+
     QTouchWebPage(QSGItem* parent = 0);
 
     virtual ~QTouchWebPage();
@@ -63,8 +69,7 @@ Q_SIGNALS:
     void titleChanged(const QString&);
     void loadStarted();
     void loadSucceeded();
-    // The parameter needs to be explicitly named to work in QML.
-    void loadFailed(const QJSValue& error);
+    void loadFailed(QTouchWebPage::ErrorType errorType, int errorCode, const QUrl& url);
     void loadProgressChanged(int progress);
 
 protected:
index a7b33c4..f724f6a 100644 (file)
@@ -97,7 +97,7 @@ void tst_CommonViewTests::loadNonexistentFileUrl()
     QSignalSpy loadFailedSpy(viewAbstraction.data(), SIGNAL(loadStarted()));
 
     viewAbstraction->load(QUrl::fromLocalFile(QLatin1String(TESTS_SOURCE_DIR "/html/file_that_does_not_exist.html")));
-    QVERIFY(waitForSignal(viewAbstraction.data(), SIGNAL(loadFailed(QJSValue))));
+    QVERIFY(waitForSignal(viewAbstraction.data(), SIGNAL(loadFailed(QDesktopWebView::ErrorType, int, QUrl))));
 
     QCOMPARE(loadFailedSpy.size(), 1);
 }
index fa2c9f6..021bcdc 100644 (file)
@@ -35,7 +35,7 @@ WebViewAbstraction::WebViewAbstraction()
     m_touchWebViewWindow.setWindowTitle(QLatin1String("TouchWebView"));
     connect(touchWebView()->page(), SIGNAL(loadStarted()), this, SLOT(touchViewLoadStarted()));
     connect(touchWebView()->page(), SIGNAL(loadSucceeded()), this, SLOT(touchViewLoadSucceeded()));
-    connect(touchWebView()->page(), SIGNAL(loadFailed(QJSValue)), this, SLOT(touchViewLoadFailed(QJSValue)));
+    connect(touchWebView()->page(), SIGNAL(loadFailed(QTouchWebPage::ErrorType, int, const QUrl&)), this, SLOT(touchViewLoadFailed(QTouchWebPage::ErrorType, int, const QUrl&)));
     connect(touchWebView()->page(), SIGNAL(loadProgressChanged(int)), this, SLOT(touchViewLoadProgressChanged(int)));
 
     screenHalf.moveLeft(screenHalf.right());
@@ -43,7 +43,7 @@ WebViewAbstraction::WebViewAbstraction()
     m_desktopWebViewWindow.setWindowTitle(QLatin1String("DesktopWebView"));
     connect(desktopWebView(), SIGNAL(loadStarted()), this, SLOT(desktopViewLoadStarted()));
     connect(desktopWebView(), SIGNAL(loadSucceeded()), this, SLOT(desktopViewLoadSucceeded()));
-    connect(desktopWebView(), SIGNAL(loadFailed(QJSValue)), this, SLOT(desktopViewLoadFailed(QJSValue)));
+    connect(desktopWebView(), SIGNAL(loadFailed(QDesktopWebView::ErrorType, int, const QUrl&)), this, SLOT(desktopViewLoadFailed(QDesktopWebView::ErrorType, int, const QUrl&)));
     connect(desktopWebView(), SIGNAL(loadProgressChanged(int)), this, SLOT(desktopViewLoadProgressChanged(int)));
 }
 
@@ -133,18 +133,18 @@ void WebViewAbstraction::desktopViewLoadSucceeded()
         emit loadSucceeded();
 }
 
-void WebViewAbstraction::touchViewLoadFailed(const QJSValue& error)
+void WebViewAbstraction::touchViewLoadFailed(QTouchWebPage::ErrorType errorType, int errorCode, const QUrl& url)
 {
-    m_touchViewSignalsCounter[SIGNAL(loadFailed(QJSValue))]++;
-    if (m_touchViewSignalsCounter[SIGNAL(loadFailed(QJSValue))] == m_desktopViewSignalsCounter[SIGNAL(loadFailed(QJSValue))])
-        emit loadFailed(error);
+    m_touchViewSignalsCounter[SIGNAL(loadFailed(QTouchWebPage::ErrorType, int, const QUrl&))]++;
+    if (m_touchViewSignalsCounter[SIGNAL(loadFailed(QTouchWebPage::ErrorType, int, const QUrl&))] == m_desktopViewSignalsCounter[SIGNAL(loadFailed(QTouchWebPage::ErrorType, int, QUrl))])
+        emit loadFailed(static_cast<QDesktopWebView::ErrorType>(errorType), errorCode, url);
 }
 
-void WebViewAbstraction::desktopViewLoadFailed(const QJSValue& error)
+void WebViewAbstraction::desktopViewLoadFailed(QDesktopWebView::ErrorType errorType, int errorCode, const QUrl& url)
 {
-    m_desktopViewSignalsCounter[SIGNAL(loadFailed(QJSValue))]++;
-    if (m_touchViewSignalsCounter[SIGNAL(loadFailed(QJSValue))] == m_desktopViewSignalsCounter[SIGNAL(loadFailed(QJSValue))])
-        emit loadFailed(error);
+    m_desktopViewSignalsCounter[SIGNAL(loadFailed(QDesktopWebView::ErrorType, int, const QUrl&))]++;
+    if (m_touchViewSignalsCounter[SIGNAL(loadFailed(QDesktopWebView::ErrorType, int, const QUrl&))] == m_desktopViewSignalsCounter[SIGNAL(loadFailed(QDesktopWebView::ErrorType, int, QUrl))])
+        emit loadFailed(errorType, errorCode, url);
 }
 
 void WebViewAbstraction::touchViewLoadProgressChanged(int progress)
index ffe87ef..b6bd0d6 100644 (file)
@@ -46,7 +46,7 @@ public:
 Q_SIGNALS:
     void loadStarted();
     void loadSucceeded();
-    void loadFailed(const QJSValue&);
+    void loadFailed(QDesktopWebView::ErrorType, int, const QUrl&);
     void loadProgressChanged(int);
 
 private Q_SLOTS:
@@ -54,8 +54,8 @@ private Q_SLOTS:
     void desktopViewLoadStarted();
     void touchViewLoadSucceeded();
     void desktopViewLoadSucceeded();
-    void touchViewLoadFailed(const QJSValue&);
-    void desktopViewLoadFailed(const QJSValue&);
+    void touchViewLoadFailed(QTouchWebPage::ErrorType, int, const QUrl&);
+    void desktopViewLoadFailed(QDesktopWebView::ErrorType, int, const QUrl&);
     void touchViewLoadProgressChanged(int);
     void desktopViewLoadProgressChanged(int);
 
index 0ba79bb..143f1c4 100644 (file)
@@ -407,15 +407,7 @@ void QtWebPageProxy::loadDidSucceed()
 
 void QtWebPageProxy::loadDidFail(const QWebError& error)
 {
-    QJSEngine* engine = m_viewInterface->engine();
-    QJSValue value;
-    if (engine) {
-        value = engine->newObject();
-        value.setProperty(QLatin1String("errorCode"), error.errorCode());
-        value.setProperty(QLatin1String("url"), error.url().toString());
-        value.setProperty(QLatin1String("type"), error.type());
-    }
-    m_viewInterface->loadDidFail(value);
+    m_viewInterface->loadDidFail(error);
 }
 
 void QtWebPageProxy::didChangeLoadProgress(int newLoadProgress)
index 56e4c09..b5a82dc 100644 (file)
@@ -25,6 +25,7 @@
 #include "qtouchwebpage_p.h"
 #include "qtouchwebview.h"
 #include "qtouchwebview_p.h"
+#include "qweberror.h"
 
 #include <QDeclarativeEngine>
 #include <QSGView>
@@ -131,9 +132,9 @@ void TouchViewInterface::loadDidSucceed()
     emit m_pageView->loadSucceeded();
 }
 
-void TouchViewInterface::loadDidFail(const QJSValue& error)
+void TouchViewInterface::loadDidFail(const QWebError& error)
 {
-    emit m_pageView->loadFailed(error);
+    emit m_pageView->loadFailed(static_cast<QTouchWebPage::ErrorType>(error.type()), error.errorCode(), error.url());
 }
 
 void TouchViewInterface::didChangeLoadProgress(int percentageLoaded)
index d7baeb0..f6397f4 100644 (file)
@@ -66,7 +66,7 @@ private:
     virtual void loadDidBegin();
     virtual void loadDidCommit();
     virtual void loadDidSucceed();
-    virtual void loadDidFail(const QJSValue&);
+    virtual void loadDidFail(const QWebError&);
     virtual void didChangeLoadProgress(int);
 
     virtual void showContextMenu(QSharedPointer<QMenu>);
index 5517ca4..24c7932 100644 (file)
 #include <QtGui/QMenu>
 #include <WebKit2/WKBase.h>
 
+class QWebError;
+
 QT_BEGIN_NAMESPACE
 class QCursor;
 class QGraphicsWidget;
 class QImage;
 class QJSEngine;
-class QJSValue;
 class QMimeData;
 class QPoint;
 class QRect;
@@ -75,7 +76,7 @@ public:
     virtual void loadDidBegin() = 0;
     virtual void loadDidCommit() = 0;
     virtual void loadDidSucceed() = 0;
-    virtual void loadDidFail(const QJSValue&) = 0;
+    virtual void loadDidFail(const QWebError&) = 0;
     virtual void didChangeLoadProgress(int) = 0;
 
     virtual void showContextMenu(QSharedPointer<QMenu>) = 0;