summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantin Tokarev <annulen@yandex.ru>2016-09-19 02:01:13 +0300
committerKonstantin Tokarev <annulen@yandex.ru>2016-09-27 11:21:20 +0000
commiteeb5f111975e5dfba239d2476a41791f1c2780a6 (patch)
treefb1b54045697498279058c2b007033df434ca332
parentdd3b76df6531a6305f35e847192ce2b3638683d7 (diff)
Avoid using QString when converting headers between WTF::String and QByteArray
We should not convert Latin1 to UTF16 and back for each header of each HTTP request and response. In older WebKit versions String was always 16-bit, but now 8-bit is used wherever possible, and this is usually the case for HTTP headers. Change-Id: I642f65c614702aca4ad7a673f5073a8eaed5b46d Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp5
-rw-r--r--Source/WebCore/platform/network/qt/ResourceRequestQt.cpp16
2 files changed, 14 insertions, 7 deletions
diff --git a/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp b/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp
index e07bc76a9..4a2121907 100644
--- a/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp
+++ b/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp
@@ -601,7 +601,8 @@ void QNetworkReplyHandler::sendResponseIfNeeded()
int statusCode = m_replyWrapper->reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if (url.protocolIsInHTTPFamily()) {
- String suggestedFilename = filenameFromHTTPContentDisposition(QString::fromLatin1(m_replyWrapper->reply()->rawHeader("Content-Disposition")));
+ QByteArray contentDisposition = m_replyWrapper->reply()->rawHeader("Content-Disposition");
+ String suggestedFilename = filenameFromHTTPContentDisposition(String(contentDisposition.constData(), contentDisposition.size()));
if (!suggestedFilename.isEmpty())
response.setSuggestedFilename(suggestedFilename);
@@ -626,7 +627,7 @@ void QNetworkReplyHandler::sendResponseIfNeeded()
// Add remaining headers.
foreach (const QNetworkReply::RawHeaderPair& pair, m_replyWrapper->reply()->rawHeaderPairs())
- response.setHTTPHeaderField(QString::fromLatin1(pair.first), QString::fromLatin1(pair.second));
+ response.setHTTPHeaderField(String(pair.first.constData(), pair.first.size()), String(pair.second.constData(), pair.second.size()));
}
QUrl redirection = m_replyWrapper->reply()->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
diff --git a/Source/WebCore/platform/network/qt/ResourceRequestQt.cpp b/Source/WebCore/platform/network/qt/ResourceRequestQt.cpp
index 46229027e..83c50062d 100644
--- a/Source/WebCore/platform/network/qt/ResourceRequestQt.cpp
+++ b/Source/WebCore/platform/network/qt/ResourceRequestQt.cpp
@@ -89,6 +89,13 @@ static void resolveBlobUrl(const QUrl& url, QUrl& resolvedUrl)
}
#endif
+static inline QByteArray stringToByteArray(const String& string)
+{
+ if (string.is8Bit())
+ return QByteArray(reinterpret_cast<const char*>(string.characters8()), string.length());
+ return QString(string).toLatin1();
+}
+
QNetworkRequest ResourceRequest::toNetworkRequest(NetworkingContext *context) const
{
QNetworkRequest request;
@@ -105,14 +112,13 @@ QNetworkRequest ResourceRequest::toNetworkRequest(NetworkingContext *context) co
const HTTPHeaderMap &headers = httpHeaderFields();
for (HTTPHeaderMap::const_iterator it = headers.begin(), end = headers.end();
it != end; ++it) {
- QByteArray name = QString(it->key).toLatin1();
- QByteArray value = QString(it->value).toLatin1();
+ QByteArray name = stringToByteArray(it->key);
// QNetworkRequest::setRawHeader() would remove the header if the value is null
// Make sure to set an empty header instead of null header.
- if (!value.isNull())
- request.setRawHeader(name, value);
+ if (!it->value.isNull())
+ request.setRawHeader(name, stringToByteArray(it->value));
else
- request.setRawHeader(name, "");
+ request.setRawHeader(name, QByteArrayLiteral(""));
}
// Make sure we always have an Accept header; some sites require this to