diff options
author | Konstantin Tokarev <annulen@yandex.ru> | 2016-09-19 02:01:13 +0300 |
---|---|---|
committer | Konstantin Tokarev <annulen@yandex.ru> | 2016-09-27 11:21:20 +0000 |
commit | eeb5f111975e5dfba239d2476a41791f1c2780a6 (patch) | |
tree | fb1b54045697498279058c2b007033df434ca332 | |
parent | dd3b76df6531a6305f35e847192ce2b3638683d7 (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.cpp | 5 | ||||
-rw-r--r-- | Source/WebCore/platform/network/qt/ResourceRequestQt.cpp | 16 |
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 |