summaryrefslogtreecommitdiff
path: root/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2013-09-13 12:51:20 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-19 20:50:05 +0200
commitd441d6f39bb846989d95bcf5caf387b42414718d (patch)
treee367e64a75991c554930278175d403c072de6bb8 /Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp
parent0060b2994c07842f4c59de64b5e3e430525c4b90 (diff)
downloadqtwebkit-d441d6f39bb846989d95bcf5caf387b42414718d.tar.gz
Import Qt5x2 branch of QtWebkit for Qt 5.2
Importing a new snapshot of webkit. Change-Id: I2d01ad12cdc8af8cb015387641120a9d7ea5f10c Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp')
-rw-r--r--Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp62
1 files changed, 38 insertions, 24 deletions
diff --git a/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp b/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp
index 62d8696ed..752388b7e 100644
--- a/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp
+++ b/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp
@@ -20,13 +20,11 @@
#include "config.h"
#include "ResourceRequest.h"
-#include <wtf/gobject/GOwnPtr.h>
#include "GOwnPtrSoup.h"
#include "HTTPParsers.h"
#include "MIMETypeRegistry.h"
#include "SoupURIUtils.h"
-
-#include <libsoup/soup.h>
+#include <wtf/gobject/GOwnPtr.h>
#include <wtf/text/CString.h>
#include <wtf/text/WTFString.h>
@@ -34,17 +32,35 @@ using namespace std;
namespace WebCore {
-void ResourceRequest::updateSoupMessage(SoupMessage* soupMessage) const
+void ResourceRequest::updateSoupMessageHeaders(SoupMessageHeaders* soupHeaders) const
{
- g_object_set(soupMessage, SOUP_MESSAGE_METHOD, httpMethod().utf8().data(), NULL);
-
const HTTPHeaderMap& headers = httpHeaderFields();
- SoupMessageHeaders* soupHeaders = soupMessage->request_headers;
if (!headers.isEmpty()) {
HTTPHeaderMap::const_iterator end = headers.end();
for (HTTPHeaderMap::const_iterator it = headers.begin(); it != end; ++it)
soup_message_headers_append(soupHeaders, it->key.string().utf8().data(), it->value.utf8().data());
}
+}
+
+void ResourceRequest::updateFromSoupMessageHeaders(SoupMessageHeaders* soupHeaders)
+{
+ m_httpHeaderFields.clear();
+ SoupMessageHeadersIter headersIter;
+ soup_message_headers_iter_init(&headersIter, soupHeaders);
+ const char* headerName;
+ const char* headerValue;
+ while (soup_message_headers_iter_next(&headersIter, &headerName, &headerValue))
+ m_httpHeaderFields.set(String::fromUTF8(headerName), String::fromUTF8(headerValue));
+}
+
+void ResourceRequest::updateSoupMessage(SoupMessage* soupMessage) const
+{
+ g_object_set(soupMessage, SOUP_MESSAGE_METHOD, httpMethod().utf8().data(), NULL);
+
+ GOwnPtr<SoupURI> uri(soupURI());
+ soup_message_set_uri(soupMessage, uri.get());
+
+ updateSoupMessageHeaders(soupMessage->request_headers);
String firstPartyString = firstPartyForCookies().string();
if (!firstPartyString.isEmpty()) {
@@ -61,13 +77,7 @@ SoupMessage* ResourceRequest::toSoupMessage() const
if (!soupMessage)
return 0;
- const HTTPHeaderMap& headers = httpHeaderFields();
- SoupMessageHeaders* soupHeaders = soupMessage->request_headers;
- if (!headers.isEmpty()) {
- HTTPHeaderMap::const_iterator end = headers.end();
- for (HTTPHeaderMap::const_iterator it = headers.begin(); it != end; ++it)
- soup_message_headers_append(soupHeaders, it->key.string().utf8().data(), it->value.utf8().data());
- }
+ updateSoupMessageHeaders(soupMessage->request_headers);
String firstPartyString = firstPartyForCookies().string();
if (!firstPartyString.isEmpty()) {
@@ -95,13 +105,7 @@ void ResourceRequest::updateFromSoupMessage(SoupMessage* soupMessage)
m_httpMethod = String::fromUTF8(soupMessage->method);
- m_httpHeaderFields.clear();
- SoupMessageHeadersIter headersIter;
- const char* headerName;
- const char* headerValue;
- soup_message_headers_iter_init(&headersIter, soupMessage->request_headers);
- while (soup_message_headers_iter_next(&headersIter, &headerName, &headerValue))
- m_httpHeaderFields.set(String::fromUTF8(headerName), String::fromUTF8(headerValue));
+ updateFromSoupMessageHeaders(soupMessage->request_headers);
if (soupMessage->request_body->data)
m_httpBody = FormData::create(soupMessage->request_body->data, soupMessage->request_body->length);
@@ -124,7 +128,7 @@ unsigned initializeMaximumHTTPConnectionCountPerHost()
return 10000;
}
-String ResourceRequest::urlStringForSoup() const
+SoupURI* ResourceRequest::soupURI() const
{
// WebKit does not support fragment identifiers in data URLs, but soup does.
// Before passing the URL to soup, we should make sure to urlencode any '#'
@@ -133,12 +137,22 @@ String ResourceRequest::urlStringForSoup() const
if (m_url.protocolIsData()) {
String urlString = m_url.string();
urlString.replace("#", "%23");
- return urlString;
+ return soup_uri_new(urlString.utf8().data());
}
KURL url = m_url;
url.removeFragmentIdentifier();
- return url.string();
+ SoupURI* uri = soup_uri_new(url.string().utf8().data());
+
+ // Versions of libsoup prior to 2.42 have a soup_uri_new that will convert empty passwords that are not
+ // prefixed by a colon into null. Some parts of soup like the SoupAuthenticationManager will only be active
+ // when both the username and password are non-null. When we have credentials, empty usernames and passwords
+ // should be empty strings instead of null.
+ if (!url.user().isEmpty() || !url.pass().isEmpty()) {
+ soup_uri_set_user(uri, url.user().utf8().data());
+ soup_uri_set_password(uri, url.pass().utf8().data());
+ }
+ return uri;
}
}