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
+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
#include "config.h"
#include "qdesktopwebview.h"
#include "qdesktopwebview_p.h"
+#include "qweberror.h"
#include <QGraphicsSceneResizeEvent>
#include <QStyleOptionGraphicsItem>
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)
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,
IgnorePolicy
};
+ enum ErrorType {
+ EngineError,
+ NetworkError,
+ HttpError,
+ };
+
QDesktopWebView(QSGItem* parent = 0);
virtual ~QDesktopWebView();
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&);
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>);
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();
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:
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);
}
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());
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)));
}
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)
Q_SIGNALS:
void loadStarted();
void loadSucceeded();
- void loadFailed(const QJSValue&);
+ void loadFailed(QDesktopWebView::ErrorType, int, const QUrl&);
void loadProgressChanged(int);
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);
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)
#include "qtouchwebpage_p.h"
#include "qtouchwebview.h"
#include "qtouchwebview_p.h"
+#include "qweberror.h"
#include <QDeclarativeEngine>
#include <QSGView>
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)
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>);
#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;
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;