From 2139e979da34c81b7c05bf90d6f4fe29a7001128 Mon Sep 17 00:00:00 2001 From: humbletim Date: Sun, 6 Nov 2016 09:33:16 -0500 Subject: [PATCH 1/2] map specific HTTP errors to corresponding ResourceRequest enums --- .../networking/src/HTTPResourceRequest.cpp | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/libraries/networking/src/HTTPResourceRequest.cpp b/libraries/networking/src/HTTPResourceRequest.cpp index 392654a419..64396ec62e 100644 --- a/libraries/networking/src/HTTPResourceRequest.cpp +++ b/libraries/networking/src/HTTPResourceRequest.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include @@ -78,10 +79,36 @@ void HTTPResourceRequest::onRequestFinished() { _loadedFromCache = _reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(); _result = Success; break; + case QNetworkReply::TimeoutError: _result = Timeout; break; + + case QNetworkReply::ContentNotFoundError: // Script.include('https://httpbin.org/status/404') + _result = NotFound; + break; + + case QNetworkReply::ProtocolInvalidOperationError: // Script.include('https://httpbin.org/status/400') + _result = InvalidURL; + break; + + case QNetworkReply::UnknownContentError: // Script.include('QUrl("https://httpbin.org/status/402")') + case QNetworkReply::ContentOperationNotPermittedError: //Script.include('https://httpbin.org/status/403') + case QNetworkReply::AuthenticationRequiredError: // Script.include('https://httpbin.org/basic-auth/user/passwd') + _result = AccessDenied; + break; + + case QNetworkReply::RemoteHostClosedError: // Script.include('http://127.0.0.1:22') + case QNetworkReply::ConnectionRefusedError: // Script.include(http://127.0.0.1:1') + case QNetworkReply::HostNotFoundError: // Script.include('http://foo.bar.highfidelity.io') + case QNetworkReply::ServiceUnavailableError: // Script.include('QUrl("https://httpbin.org/status/503")') + _result = ServerUnavailable; + break; + + case QNetworkReply::UnknownServerError: // Script.include('QUrl("https://httpbin.org/status/504")') + case QNetworkReply::InternalServerError: // Script.include('QUrl("https://httpbin.org/status/500")') default: + qDebug() << "HTTPResourceRequest error:" << QMetaEnum::fromType().valueToKey(_reply->error()); _result = Error; break; } From 61452c21a2d877a75be54686e91e15cec6abb9cc Mon Sep 17 00:00:00 2001 From: humbletim Date: Sun, 6 Nov 2016 09:40:28 -0500 Subject: [PATCH 2/2] bail early from irrecoverable retry situations --- libraries/script-engine/src/ScriptCache.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libraries/script-engine/src/ScriptCache.cpp b/libraries/script-engine/src/ScriptCache.cpp index 96e3d7e914..941c0b6175 100644 --- a/libraries/script-engine/src/ScriptCache.cpp +++ b/libraries/script-engine/src/ScriptCache.cpp @@ -202,7 +202,14 @@ void ScriptCache::scriptContentAvailable() { finished = true; qCDebug(scriptengine) << "Done downloading script at:" << url.toString(); } else { - if (scriptRequest.numRetries < MAX_RETRIES) { + auto result = req->getResult(); + bool irrecoverable = + result == ResourceRequest::AccessDenied || + result == ResourceRequest::InvalidURL || + result == ResourceRequest::NotFound || + scriptRequest.numRetries >= MAX_RETRIES; + + if (!irrecoverable) { ++scriptRequest.numRetries; qDebug() << "Script request failed: " << url;