XHR: Server side errors are not network errors
authorJulien Brianceau <jbriance@cisco.com>
Thu, 27 Aug 2015 12:37:50 +0000 (14:37 +0200)
committerJulien Brianceau <jbriance@cisco.com>
Thu, 27 Aug 2015 14:08:00 +0000 (14:08 +0000)
XMLHttpRequest specs state that only 'network errors' should result
in a request error, and a server side error like HTTP 500 Internal
Server Error (which results in QNetworkReply::InternalServerError)
is an indication of the HTTP server response rather than a network
error.

Change-Id: I94bf678a8487e3d31007dc5119d6fb4e87ea3102
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Reviewed-by: Valery Kotov <kotov.valery@gmail.com>
src/qml/qml/qqmlxmlhttprequest.cpp
tests/auto/qml/qqmlxmlhttprequest/data/status.500.reply [new file with mode: 0644]
tests/auto/qml/qqmlxmlhttprequest/tst_qqmlxmlhttprequest.cpp

index 0870e2b..de77416 100644 (file)
@@ -1358,7 +1358,11 @@ void QQmlXMLHttpRequest::error(QNetworkReply::NetworkError error)
         error == QNetworkReply::AuthenticationRequiredError ||
         error == QNetworkReply::ContentReSendError ||
         error == QNetworkReply::UnknownContentError ||
-        error == QNetworkReply::ProtocolInvalidOperationError) {
+        error == QNetworkReply::ProtocolInvalidOperationError ||
+        error == QNetworkReply::InternalServerError ||
+        error == QNetworkReply::OperationNotImplementedError ||
+        error == QNetworkReply::ServiceUnavailableError ||
+        error == QNetworkReply::UnknownServerError) {
         m_state = Loading;
         dispatchCallback();
     } else {
diff --git a/tests/auto/qml/qqmlxmlhttprequest/data/status.500.reply b/tests/auto/qml/qqmlxmlhttprequest/data/status.500.reply
new file mode 100644 (file)
index 0000000..cbe2424
--- /dev/null
@@ -0,0 +1,3 @@
+HTTP/1.0 500 Internal Server Error
+Connection: close
+Content-type: text/html; charset=UTF-8
index ae03502..47bf151 100644 (file)
@@ -989,6 +989,7 @@ void tst_qqmlxmlhttprequest::responseText_data()
     QTest::newRow("empty body") << testFileUrl("status.200.reply") << QUrl() << "";
     QTest::newRow("Not Found") << testFileUrl("status.404.reply") << testFileUrl("testdocument.html") << "QML Rocks!\n";
     QTest::newRow("Bad Request") << testFileUrl("status.400.reply") << testFileUrl("testdocument.html") << "QML Rocks!\n";
+    QTest::newRow("Internal server error") << testFileUrl("status.500.reply") << testFileUrl("testdocument.html") << "QML Rocks!\n";
 }
 
 void tst_qqmlxmlhttprequest::nonUtf8()