From 3f24f61180dee38114919a817a1bdc7cca6d00c0 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sun, 20 Jul 2014 22:45:19 -0700 Subject: [PATCH] Provide Content-Type and -Length headers when reading local files --- examples/testXMLHttpRequest.js | 2 +- .../script-engine/src/XMLHttpRequestClass.cpp | 21 +++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/examples/testXMLHttpRequest.js b/examples/testXMLHttpRequest.js index ec5bcf6c4c..79d2842464 100644 --- a/examples/testXMLHttpRequest.js +++ b/examples/testXMLHttpRequest.js @@ -168,7 +168,7 @@ if (localFile !== null) { this.assertEquals(200, req.status, "status should be `200`"); this.assertEquals("OK", req.statusText, "statusText should be `OK`"); this.assertEquals(0, req.errorCode); - this.assertEquals("", req.getAllResponseHeaders(), "headers should be null"); + this.assertNotEquals("", req.getAllResponseHeaders(), "headers should not be null"); this.assertContains("High Fidelity", req.response.substring(0, 100), "expected text not found in response") for (var i = 0; i <= req.DONE; i++) { diff --git a/libraries/script-engine/src/XMLHttpRequestClass.cpp b/libraries/script-engine/src/XMLHttpRequestClass.cpp index 84e49f2364..8e48682ea0 100644 --- a/libraries/script-engine/src/XMLHttpRequestClass.cpp +++ b/libraries/script-engine/src/XMLHttpRequestClass.cpp @@ -54,7 +54,8 @@ QScriptValue XMLHttpRequestClass::constructor(QScriptContext* context, QScriptEn QScriptValue XMLHttpRequestClass::getStatus() const { if (_reply) { return QScriptValue(_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt()); - } else if(_url.isLocalFile()) { + } + if(_url.isLocalFile()) { switch (_errorCode) { case QNetworkReply::NoError: return QScriptValue(200); @@ -74,7 +75,8 @@ QScriptValue XMLHttpRequestClass::getStatus() const { QString XMLHttpRequestClass::getStatusText() const { if (_reply) { return _reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(); - } else if (_url.isLocalFile()) { + } + if (_url.isLocalFile()) { switch (_errorCode) { case QNetworkReply::NoError: return "OK"; @@ -132,6 +134,13 @@ QScriptValue XMLHttpRequestClass::getAllResponseHeaders() const { } return QString(headers.data()); } + if (_url.isLocalFile()) { + QString headers = QString("Content-Type: application/octet-stream\n"); + headers.append("Content-Length: "); + headers.append(QString("%1").arg(_rawResponseData.length())); + headers.append("\n"); + return headers; + } return QScriptValue(""); } @@ -139,6 +148,14 @@ QScriptValue XMLHttpRequestClass::getResponseHeader(const QString& name) const { if (_reply && _reply->hasRawHeader(name.toLatin1())) { return QScriptValue(QString(_reply->rawHeader(name.toLatin1()))); } + if (_url.isLocalFile()) { + if (name.toLower() == "content-type") { + return QString("application/octet-stream"); + } + if (name.toLower() == "content-length") { + return QString("%1").arg(_rawResponseData.length()); + } + } return QScriptValue::NullValue; }