Diff
Modified: trunk/Source/WebCore/ChangeLog (272640 => 272641)
--- trunk/Source/WebCore/ChangeLog 2021-02-10 09:13:41 UTC (rev 272640)
+++ trunk/Source/WebCore/ChangeLog 2021-02-10 09:41:17 UTC (rev 272641)
@@ -1,3 +1,44 @@
+2021-02-10 Carlos Garcia Campos <cgar...@igalia.com>
+
+ [SOUP] Simplify ResourceRequest and ResourceResponse
+ https://bugs.webkit.org/show_bug.cgi?id=221543
+
+ Reviewed by Adrian Perez de Castro.
+
+ There's unused code there and it can be refactored.
+
+ - ResourceRequest:
+ - Remove unused member m_soupFlags.
+ - Remove updateSoupMessage() that is always called after a SoupMessage has been created and add
+ createSoupMessage() to return a new SoupMessage.
+ - Set the message priority in the createSoupMessage() too.
+ - Remove updateFromSoupMessage() that is curently used only by WebSockets to update the request headers after
+ the request is sent to include cookies and other headers set by libsoup. We can simply use
+ updateFromSoupMessageHeaders() for that case instead.
+
+ - ResourceResponse:
+ - Remove unused member m_soupFlags.
+ - Remove updateFromSoupMessage() that is always used with a newly created ResourceResponse and use the
+ ResourceResponse constructor that receives a SoupMessage instead.
+ - Sniffed content type is now received as an optional parameter of the ResourceResponse constructor that
+ receives a SoupMessage, and used to set the MIME type and text encoding.
+ - Remove unused certificate info getters and the encode/decode methods that are no longer needed.
+
+ * platform/network/soup/ResourceRequest.h:
+ (WebCore::ResourceRequest::encodeWithPlatformData const):
+ (WebCore::ResourceRequest::decodeWithPlatformData):
+ * platform/network/soup/ResourceRequestSoup.cpp:
+ (WebCore::toSoupMessagePriority):
+ (WebCore::ResourceRequest::createSoupMessage const):
+ * platform/network/soup/ResourceResponse.h:
+ (WebCore::ResourceResponse::ResourceResponse):
+ (WebCore::ResourceResponse::soupMessageCertificate const):
+ (WebCore::ResourceResponse::soupMessageTLSErrors const):
+ * platform/network/soup/ResourceResponseSoup.cpp:
+ (WebCore::ResourceResponse::ResourceResponse):
+ (WebCore::ResourceResponse::updateSoupMessageHeaders const):
+ (WebCore::ResourceResponse::updateFromSoupMessageHeaders):
+
2021-02-10 Rob Buis <rb...@igalia.com>
Do not schedule update on embed creation
Modified: trunk/Source/WebCore/platform/network/soup/ResourceRequest.h (272640 => 272641)
--- trunk/Source/WebCore/platform/network/soup/ResourceRequest.h 2021-02-10 09:13:41 UTC (rev 272640)
+++ trunk/Source/WebCore/platform/network/soup/ResourceRequest.h 2021-02-10 09:41:17 UTC (rev 272641)
@@ -29,6 +29,7 @@
#include "PageIdentifier.h"
#include "ResourceRequestBase.h"
#include "URLSoup.h"
+#include <wtf/glib/GRefPtr.h>
namespace WebCore {
@@ -57,6 +58,8 @@
{
}
+ GRefPtr<SoupMessage> createSoupMessage(BlobRegistryImpl&) const;
+
void updateFromDelegatePreservingOldProperties(const ResourceRequest& delegateProvidedRequest) { *this = delegateProvidedRequest; }
bool acceptEncoding() const { return m_acceptEncoding; }
@@ -64,14 +67,7 @@
void updateSoupMessageHeaders(SoupMessageHeaders*) const;
void updateFromSoupMessageHeaders(SoupMessageHeaders*);
- void updateSoupMessage(SoupMessage*, BlobRegistryImpl&) const;
- void updateFromSoupMessage(SoupMessage*);
- SoupMessageFlags soupMessageFlags() const { return m_soupFlags; }
- void setSoupMessageFlags(SoupMessageFlags soupFlags) { m_soupFlags = soupFlags; }
-
- GUniquePtr<SoupURI> createSoupURI() const;
-
template<class Encoder> void encodeWithPlatformData(Encoder&) const;
template<class Decoder> WARN_UNUSED_RETURN bool decodeWithPlatformData(Decoder&);
@@ -78,8 +74,7 @@
private:
friend class ResourceRequestBase;
- bool m_acceptEncoding { true };
- SoupMessageFlags m_soupFlags { static_cast<SoupMessageFlags>(0) };
+ GUniquePtr<SoupURI> createSoupURI() const;
void updateSoupMessageMembers(SoupMessage*) const;
void updateSoupMessageBody(SoupMessage*, BlobRegistryImpl&) const;
@@ -89,6 +84,8 @@
void doUpdateResourceHTTPBody() { }
void doPlatformSetAsIsolatedCopy(const ResourceRequest&) { }
+
+ bool m_acceptEncoding { true };
};
template<class Encoder>
@@ -103,7 +100,6 @@
if (m_httpBody)
encoder << m_httpBody->flattenToString();
- encoder << static_cast<uint32_t>(m_soupFlags);
encoder << static_cast<bool>(m_acceptEncoding);
}
@@ -123,11 +119,6 @@
setHTTPBody(FormData::create(httpBody.utf8()));
}
- uint32_t soupMessageFlags;
- if (!decoder.decode(soupMessageFlags))
- return false;
- m_soupFlags = static_cast<SoupMessageFlags>(soupMessageFlags);
-
bool acceptEncoding;
if (!decoder.decode(acceptEncoding))
return false;
@@ -136,24 +127,5 @@
return true;
}
-inline SoupMessagePriority toSoupMessagePriority(ResourceLoadPriority priority)
-{
- switch (priority) {
- case ResourceLoadPriority::VeryLow:
- return SOUP_MESSAGE_PRIORITY_VERY_LOW;
- case ResourceLoadPriority::Low:
- return SOUP_MESSAGE_PRIORITY_LOW;
- case ResourceLoadPriority::Medium:
- return SOUP_MESSAGE_PRIORITY_NORMAL;
- case ResourceLoadPriority::High:
- return SOUP_MESSAGE_PRIORITY_HIGH;
- case ResourceLoadPriority::VeryHigh:
- return SOUP_MESSAGE_PRIORITY_VERY_HIGH;
- }
-
- ASSERT_NOT_REACHED();
- return SOUP_MESSAGE_PRIORITY_VERY_LOW;
-}
-
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp (272640 => 272641)
--- trunk/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp 2021-02-10 09:13:41 UTC (rev 272640)
+++ trunk/Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp 2021-02-10 09:41:17 UTC (rev 272641)
@@ -36,6 +36,60 @@
namespace WebCore {
+static inline SoupMessagePriority toSoupMessagePriority(ResourceLoadPriority priority)
+{
+ switch (priority) {
+ case ResourceLoadPriority::VeryLow:
+ return SOUP_MESSAGE_PRIORITY_VERY_LOW;
+ case ResourceLoadPriority::Low:
+ return SOUP_MESSAGE_PRIORITY_LOW;
+ case ResourceLoadPriority::Medium:
+ return SOUP_MESSAGE_PRIORITY_NORMAL;
+ case ResourceLoadPriority::High:
+ return SOUP_MESSAGE_PRIORITY_HIGH;
+ case ResourceLoadPriority::VeryHigh:
+ return SOUP_MESSAGE_PRIORITY_VERY_HIGH;
+ }
+
+ RELEASE_ASSERT_NOT_REACHED();
+}
+
+GRefPtr<SoupMessage> ResourceRequest::createSoupMessage(BlobRegistryImpl& blobRegistry) const
+{
+ auto uri = createSoupURI();
+ if (!uri)
+ return nullptr;
+
+ auto soupMessage = adoptGRef(soup_message_new_from_uri(httpMethod().ascii().data(), uri.get()));
+
+ soup_message_set_priority(soupMessage.get(), toSoupMessagePriority(priority()));
+
+ updateSoupMessageHeaders(soupMessage->request_headers);
+
+ auto firstParty = urlToSoupURI(firstPartyForCookies());
+ if (firstParty)
+ soup_message_set_first_party(soupMessage.get(), firstParty.get());
+
+#if SOUP_CHECK_VERSION(2, 69, 90)
+ if (!isSameSiteUnspecified()) {
+ if (isSameSite()) {
+ auto siteForCookies = urlToSoupURI(m_url);
+ soup_message_set_site_for_cookies(soupMessage.get(), siteForCookies.get());
+ }
+ soup_message_set_is_top_level_navigation(soupMessage.get(), isTopSite());
+ }
+#endif
+
+ if (!acceptEncoding())
+ soup_message_disable_feature(soupMessage.get(), SOUP_TYPE_CONTENT_DECODER);
+ if (!allowCookies())
+ soup_message_disable_feature(soupMessage.get(), SOUP_TYPE_COOKIE_JAR);
+
+ updateSoupMessageBody(soupMessage.get(), blobRegistry);
+
+ return soupMessage;
+}
+
void ResourceRequest::updateSoupMessageBody(SoupMessage* soupMessage, BlobRegistryImpl& blobRegistry) const
{
auto* formData = httpBody();
@@ -75,32 +129,6 @@
ASSERT(length == static_cast<uint64_t>(soupMessage->request_body->length));
}
-void ResourceRequest::updateSoupMessageMembers(SoupMessage* soupMessage) const
-{
- updateSoupMessageHeaders(soupMessage->request_headers);
-
- GUniquePtr<SoupURI> firstParty = urlToSoupURI(firstPartyForCookies());
- if (firstParty)
- soup_message_set_first_party(soupMessage, firstParty.get());
-
-#if SOUP_CHECK_VERSION(2, 69, 90)
- if (!isSameSiteUnspecified()) {
- if (isSameSite()) {
- GUniquePtr<SoupURI> siteForCookies = urlToSoupURI(m_url);
- soup_message_set_site_for_cookies(soupMessage, siteForCookies.get());
- }
- soup_message_set_is_top_level_navigation(soupMessage, isTopSite());
- }
-#endif
-
- soup_message_set_flags(soupMessage, m_soupFlags);
-
- if (!acceptEncoding())
- soup_message_disable_feature(soupMessage, SOUP_TYPE_CONTENT_DECODER);
- if (!allowCookies())
- soup_message_disable_feature(soupMessage, SOUP_TYPE_COOKIE_JAR);
-}
-
void ResourceRequest::updateSoupMessageHeaders(SoupMessageHeaders* soupHeaders) const
{
const HTTPHeaderMap& headers = httpHeaderFields();
@@ -122,56 +150,6 @@
m_httpHeaderFields.set(String(headerName), String(headerValue));
}
-void ResourceRequest::updateSoupMessage(SoupMessage* soupMessage, BlobRegistryImpl& blobRegistry) const
-{
- g_object_set(soupMessage, SOUP_MESSAGE_METHOD, httpMethod().ascii().data(), NULL);
-
- GUniquePtr<SoupURI> uri = createSoupURI();
- soup_message_set_uri(soupMessage, uri.get());
-
- updateSoupMessageMembers(soupMessage);
- updateSoupMessageBody(soupMessage, blobRegistry);
-}
-
-void ResourceRequest::updateFromSoupMessage(SoupMessage* soupMessage)
-{
- bool shouldPortBeResetToZero = m_url.port() && !m_url.port().value();
- m_url = soupURIToURL(soup_message_get_uri(soupMessage));
-
- // SoupURI cannot differeniate between an explicitly specified port 0 and
- // no port specified.
- if (shouldPortBeResetToZero)
- m_url.setPort(0);
-
- m_httpMethod = String(soupMessage->method);
-
- updateFromSoupMessageHeaders(soupMessage->request_headers);
-
- if (soupMessage->request_body->data)
- m_httpBody = FormData::create(soupMessage->request_body->data, soupMessage->request_body->length);
-
- if (SoupURI* firstParty = soup_message_get_first_party(soupMessage))
- m_firstPartyForCookies = soupURIToURL(firstParty);
-
-#if SOUP_CHECK_VERSION(2, 69, 90)
- setIsTopSite(soup_message_get_is_top_level_navigation(soupMessage));
-
- if (SoupURI* siteForCookies = soup_message_get_site_for_cookies(soupMessage))
- setIsSameSite(areRegistrableDomainsEqual(soupURIToURL(siteForCookies), m_url));
- else
- m_sameSiteDisposition = SameSiteDisposition::Unspecified;
-#else
- m_sameSiteDisposition = SameSiteDisposition::Unspecified;
-#endif
-
- m_soupFlags = soup_message_get_flags(soupMessage);
-
-#if SOUP_CHECK_VERSION(2, 71, 0)
- m_acceptEncoding = !soup_message_is_feature_disabled(soupMessage, SOUP_TYPE_CONTENT_DECODER);
- m_allowCookies = !soup_message_is_feature_disabled(soupMessage, SOUP_TYPE_COOKIE_JAR);
-#endif
-}
-
unsigned initializeMaximumHTTPConnectionCountPerHost()
{
// Soup has its own queue control; it wants to have all requests
Modified: trunk/Source/WebCore/platform/network/soup/ResourceResponse.h (272640 => 272641)
--- trunk/Source/WebCore/platform/network/soup/ResourceResponse.h 2021-02-10 09:13:41 UTC (rev 272640)
+++ trunk/Source/WebCore/platform/network/soup/ResourceResponse.h 2021-02-10 09:41:17 UTC (rev 272641)
@@ -29,59 +29,33 @@
#include <libsoup/soup.h>
#include <wtf/glib/GRefPtr.h>
+#include <wtf/text/CString.h>
namespace WebCore {
class ResourceResponse : public ResourceResponseBase {
public:
- ResourceResponse()
- : ResourceResponseBase()
- , m_soupFlags(static_cast<SoupMessageFlags>(0))
- , m_tlsErrors(static_cast<GTlsCertificateFlags>(0))
- {
- }
+ ResourceResponse() = default;
ResourceResponse(const URL& url, const String& mimeType, long long expectedLength, const String& textEncodingName)
: ResourceResponseBase(url, mimeType, expectedLength, textEncodingName)
- , m_soupFlags(static_cast<SoupMessageFlags>(0))
- , m_tlsErrors(static_cast<GTlsCertificateFlags>(0))
{
}
- ResourceResponse(SoupMessage* soupMessage)
- : ResourceResponseBase()
- , m_soupFlags(static_cast<SoupMessageFlags>(0))
- , m_tlsErrors(static_cast<GTlsCertificateFlags>(0))
- {
- updateFromSoupMessage(soupMessage);
- }
+ ResourceResponse(SoupMessage*, const CString& sniffedContentType = CString());
void updateSoupMessageHeaders(SoupMessageHeaders*) const;
- void updateFromSoupMessage(SoupMessage*);
- void updateFromSoupMessageHeaders(const SoupMessageHeaders*);
+ void updateFromSoupMessageHeaders(SoupMessageHeaders*);
- SoupMessageFlags soupMessageFlags() const { return m_soupFlags; }
- void setSoupMessageFlags(SoupMessageFlags soupFlags) { m_soupFlags = soupFlags; }
-
- const String& sniffedContentType() const { return m_sniffedContentType; }
- void setSniffedContentType(const String& value) { m_sniffedContentType = value; }
-
GTlsCertificate* soupMessageCertificate() const { return m_certificate.get(); }
- void setSoupMessageCertificate(GTlsCertificate* certificate) { m_certificate = certificate; }
-
GTlsCertificateFlags soupMessageTLSErrors() const { return m_tlsErrors; }
- void setSoupMessageTLSErrors(GTlsCertificateFlags tlsErrors) { m_tlsErrors = tlsErrors; }
- template<class Encoder> void encode(Encoder&) const;
- template<class Decoder> static WARN_UNUSED_RETURN bool decode(Decoder&, ResourceResponse&);
-
private:
friend class ResourceResponseBase;
- SoupMessageFlags m_soupFlags;
String m_sniffedContentType;
GRefPtr<GTlsCertificate> m_certificate;
- GTlsCertificateFlags m_tlsErrors;
+ GTlsCertificateFlags m_tlsErrors { static_cast<GTlsCertificateFlags>(0) };
void doUpdateResourceResponse() { }
String platformSuggestedFilename() const;
@@ -88,25 +62,4 @@
CertificateInfo platformCertificateInfo() const;
};
-template<class Encoder>
-void ResourceResponse::encode(Encoder& encoder) const
-{
- ResourceResponseBase::encode(encoder);
- encoder << static_cast<uint64_t>(m_soupFlags);
-}
-
-template<class Decoder>
-bool ResourceResponse::decode(Decoder& decoder, ResourceResponse& response)
-{
- if (!ResourceResponseBase::decode(decoder, response))
- return false;
- Optional<uint64_t> soupFlags;
- decoder >> soupFlags;
- if (!soupFlags)
- return false;
- // FIXME: Verify that this is a valid value for SoupMessageFlags.
- response.m_soupFlags = static_cast<SoupMessageFlags>(*soupFlags);
- return true;
-}
-
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/network/soup/ResourceResponseSoup.cpp (272640 => 272641)
--- trunk/Source/WebCore/platform/network/soup/ResourceResponseSoup.cpp 2021-02-10 09:13:41 UTC (rev 272640)
+++ trunk/Source/WebCore/platform/network/soup/ResourceResponseSoup.cpp 2021-02-10 09:41:17 UTC (rev 272641)
@@ -34,14 +34,8 @@
namespace WebCore {
-void ResourceResponse::updateSoupMessageHeaders(SoupMessageHeaders* soupHeaders) const
+ResourceResponse::ResourceResponse(SoupMessage* soupMessage, const CString& sniffedContentType)
{
- for (const auto& header : httpHeaderFields())
- soup_message_headers_append(soupHeaders, header.key.utf8().data(), header.value.utf8().data());
-}
-
-void ResourceResponse::updateFromSoupMessage(SoupMessage* soupMessage)
-{
m_url = soupURIToURL(soup_message_get_uri(soupMessage));
switch (soup_message_get_http_version(soupMessage)) {
@@ -55,40 +49,40 @@
m_httpStatusCode = soupMessage->status_code;
setHTTPStatusText(soupMessage->reason_phrase);
- m_soupFlags = soup_message_get_flags(soupMessage);
-
GTlsCertificate* certificate = 0;
soup_message_get_https_status(soupMessage, &certificate, &m_tlsErrors);
m_certificate = certificate;
updateFromSoupMessageHeaders(soupMessage->response_headers);
+
+ String contentType;
+ const char* officialType = soup_message_headers_get_one(soupMessage->response_headers, "Content-Type");
+ if (!sniffedContentType.isNull() && m_httpStatusCode != SOUP_STATUS_NOT_MODIFIED && sniffedContentType != officialType)
+ contentType = sniffedContentType.data();
+ else
+ contentType = officialType;
+ setMimeType(extractMIMETypeFromMediaType(contentType));
+ if (m_mimeType.isEmpty() && m_httpStatusCode != SOUP_STATUS_NOT_MODIFIED)
+ setMimeType(MIMETypeRegistry::mimeTypeForPath(m_url.path().toString()));
+ setTextEncodingName(extractCharsetFromMediaType(contentType));
+
+ setExpectedContentLength(soup_message_headers_get_content_length(soupMessage->response_headers));
}
-void ResourceResponse::updateFromSoupMessageHeaders(const SoupMessageHeaders* messageHeaders)
+void ResourceResponse::updateSoupMessageHeaders(SoupMessageHeaders* soupHeaders) const
{
- SoupMessageHeaders* headers = const_cast<SoupMessageHeaders*>(messageHeaders);
+ for (const auto& header : httpHeaderFields())
+ soup_message_headers_append(soupHeaders, header.key.utf8().data(), header.value.utf8().data());
+}
+
+void ResourceResponse::updateFromSoupMessageHeaders(SoupMessageHeaders* soupHeaders)
+{
SoupMessageHeadersIter headersIter;
const char* headerName;
const char* headerValue;
-
- // updateFromSoupMessage could be called several times for the same ResourceResponse object,
- // thus, we need to clear old header values and update m_httpHeaderFields from soupMessage headers.
- m_httpHeaderFields.clear();
-
- soup_message_headers_iter_init(&headersIter, headers);
+ soup_message_headers_iter_init(&headersIter, soupHeaders);
while (soup_message_headers_iter_next(&headersIter, &headerName, &headerValue))
addHTTPHeaderField(String(headerName), String(headerValue));
-
- String contentType;
- const char* officialType = soup_message_headers_get_one(headers, "Content-Type");
- if (!m_sniffedContentType.isEmpty() && m_sniffedContentType != officialType)
- contentType = m_sniffedContentType;
- else
- contentType = officialType;
- setMimeType(extractMIMETypeFromMediaType(contentType));
- setTextEncodingName(extractCharsetFromMediaType(contentType));
-
- setExpectedContentLength(soup_message_headers_get_content_length(headers));
}
CertificateInfo ResourceResponse::platformCertificateInfo() const
Modified: trunk/Source/WebKit/ChangeLog (272640 => 272641)
--- trunk/Source/WebKit/ChangeLog 2021-02-10 09:13:41 UTC (rev 272640)
+++ trunk/Source/WebKit/ChangeLog 2021-02-10 09:41:17 UTC (rev 272641)
@@ -1,3 +1,27 @@
+2021-02-10 Carlos Garcia Campos <cgar...@igalia.com>
+
+ [SOUP] Simplify ResourceRequest and ResourceResponse
+ https://bugs.webkit.org/show_bug.cgi?id=221543
+
+ Reviewed by Adrian Perez de Castro.
+
+ Use new ResourceRequest and ResourceResponse API.
+
+ * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
+ (WebKit::NetworkDataTaskSoup::createRequest): Use ResourceRequest::createSoupMessage().
+ (WebKit::NetworkDataTaskSoup::didSendRequest): Use ResourceResponse passing the SoupMessage and sniffed content type.
+ (WebKit::NetworkDataTaskSoup::didRequestNextPart): Create a ResourceResponse passing the url, content type,
+ expected length and text encoding. Then call ResourceResponse::updateFromSoupMessageHeaders() to set the headers.
+ * NetworkProcess/soup/NetworkSessionSoup.cpp:
+ (WebKit::NetworkSessionSoup::createWebSocketTask): Use ResourceRequest::createSoupMessage() and pass the
+ ResourceRequest to WebSocketTask constructor.
+ * NetworkProcess/soup/WebSocketTaskSoup.cpp:
+ (WebKit::WebSocketTask::WebSocketTask): Save the ResourceRequest and then just call
+ ResourceRequest::updateFromSoupMessageHeaders() to update the headers after the response has been sent by libsoup.
+ (WebKit::WebSocketTask::didConnect): Use ResourceResponse constructor with the SoupMessage directly.
+ (WebKit::WebSocketTask::didFail): Ditto.
+ * NetworkProcess/soup/WebSocketTaskSoup.h:
+
2021-02-09 Alex Christensen <achristen...@webkit.org>
Use CompletionHandler instead of ApplicationManifestCallback
Modified: trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp (272640 => 272641)
--- trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp 2021-02-10 09:13:41 UTC (rev 272640)
+++ trunk/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp 2021-02-10 09:41:17 UTC (rev 272641)
@@ -121,17 +121,14 @@
return;
}
- GUniquePtr<SoupURI> soupURI = m_currentRequest.createSoupURI();
- if (!soupURI || !SOUP_URI_VALID_FOR_HTTP(soupURI.get())) {
+ restrictRequestReferrerToOriginIfNeeded(m_currentRequest);
+
+ m_soupMessage = m_currentRequest.createSoupMessage(m_session->blobRegistry());
+ if (!m_soupMessage) {
scheduleFailure(InvalidURLFailure);
return;
}
- restrictRequestReferrerToOriginIfNeeded(m_currentRequest);
-
- m_soupMessage = adoptGRef(soup_message_new_from_uri(SOUP_METHOD_GET, soupURI.get()));
- m_currentRequest.updateSoupMessage(m_soupMessage.get(), m_session->blobRegistry());
-
unsigned messageFlags = SOUP_MESSAGE_NO_REDIRECT;
if (m_shouldContentSniff == ContentSniffingPolicy::DoNotSniffContent)
soup_message_disable_feature(m_soupMessage.get(), SOUP_TYPE_CONTENT_SNIFFER);
@@ -145,7 +142,6 @@
#endif
}
soup_message_set_flags(m_soupMessage.get(), static_cast<SoupMessageFlags>(soup_message_get_flags(m_soupMessage.get()) | messageFlags));
- soup_message_set_priority(m_soupMessage.get(), toSoupMessagePriority(m_currentRequest.priority()));
#if ENABLE(RESOURCE_LOAD_STATISTICS)
bool shouldBlockCookies = wasBlockingCookies == WasBlockingCookies::Yes ? true : m_storedCredentialsPolicy == StoredCredentialsPolicy::EphemeralStateless;
@@ -374,11 +370,7 @@
void NetworkDataTaskSoup::didSendRequest(GRefPtr<GInputStream>&& inputStream)
{
- if (!m_sniffedContentType.isNull() && m_soupMessage->status_code != SOUP_STATUS_NOT_MODIFIED)
- m_response.setSniffedContentType(m_sniffedContentType.data());
- m_response.updateFromSoupMessage(m_soupMessage.get());
- if (m_response.mimeType().isEmpty() && m_soupMessage->status_code != SOUP_STATUS_NOT_MODIFIED)
- m_response.setMimeType(MIMETypeRegistry::mimeTypeForPath(m_response.url().path().toString()));
+ m_response = ResourceResponse(m_soupMessage.get(), m_sniffedContentType);
if (shouldStartHTTPRedirection()) {
m_inputStream = WTFMove(inputStream);
@@ -900,9 +892,11 @@
{
ASSERT(!m_inputStream);
m_inputStream = WTFMove(inputStream);
- m_response = ResourceResponse();
- m_response.setURL(m_firstRequest.url());
- m_response.updateFromSoupMessageHeaders(soup_multipart_input_stream_get_headers(m_multipartInputStream.get()));
+ auto* headers = soup_multipart_input_stream_get_headers(m_multipartInputStream.get());
+ String contentType = soup_message_headers_get_one(headers, "Content-Type");
+ m_response = ResourceResponse(m_firstRequest.url(), extractMIMETypeFromMediaType(contentType),
+ soup_message_headers_get_content_length(headers), extractCharsetFromMediaType(contentType));
+ m_response.updateFromSoupMessageHeaders(headers);
dispatchDidReceiveResponse();
}
Modified: trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp (272640 => 272641)
--- trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp 2021-02-10 09:13:41 UTC (rev 272640)
+++ trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp 2021-02-10 09:41:17 UTC (rev 272641)
@@ -123,15 +123,13 @@
std::unique_ptr<WebSocketTask> NetworkSessionSoup::createWebSocketTask(NetworkSocketChannel& channel, const ResourceRequest& request, const String& protocol)
{
- GUniquePtr<SoupURI> soupURI = request.createSoupURI();
- if (!soupURI)
+ GRefPtr<SoupMessage> soupMessage = request.createSoupMessage(blobRegistry());
+ if (!soupMessage)
return nullptr;
- GRefPtr<SoupMessage> soupMessage = adoptGRef(soup_message_new_from_uri(SOUP_METHOD_GET, soupURI.get()));
- request.updateSoupMessage(soupMessage.get(), blobRegistry());
if (request.url().protocolIs("wss"))
g_signal_connect(soupMessage.get(), "network-event", G_CALLBACK(webSocketMessageNetworkEventCallback), this);
- return makeUnique<WebSocketTask>(channel, soupSession(), soupMessage.get(), protocol);
+ return makeUnique<WebSocketTask>(channel, request, soupSession(), soupMessage.get(), protocol);
}
void NetworkSessionSoup::setIgnoreTLSErrors(bool ignoreTLSErrors)
Modified: trunk/Source/WebKit/NetworkProcess/soup/WebSocketTaskSoup.cpp (272640 => 272641)
--- trunk/Source/WebKit/NetworkProcess/soup/WebSocketTaskSoup.cpp 2021-02-10 09:13:41 UTC (rev 272640)
+++ trunk/Source/WebKit/NetworkProcess/soup/WebSocketTaskSoup.cpp 2021-02-10 09:41:17 UTC (rev 272641)
@@ -38,8 +38,9 @@
namespace WebKit {
-WebSocketTask::WebSocketTask(NetworkSocketChannel& channel, SoupSession* session, SoupMessage* msg, const String& protocol)
+WebSocketTask::WebSocketTask(NetworkSocketChannel& channel, const WebCore::ResourceRequest& request, SoupSession* session, SoupMessage* msg, const String& protocol)
: m_channel(channel)
+ , m_request(request)
, m_handshakeMessage(msg)
, m_cancellable(adoptGRef(g_cancellable_new()))
, m_delayFailTimer(RunLoop::main(), this, &WebSocketTask::delayFailTimerFired)
@@ -80,9 +81,8 @@
}, this);
g_signal_connect(msg, "starting", G_CALLBACK(+[](SoupMessage* msg, WebSocketTask* task) {
- WebCore::ResourceRequest request;
- request.updateFromSoupMessage(msg);
- task->m_channel.didSendHandshakeRequest(WTFMove(request));
+ task->m_request.updateFromSoupMessageHeaders(msg->request_headers);
+ task->m_channel.didSendHandshakeRequest(WTFMove(task->m_request));
}), this);
}
@@ -132,9 +132,7 @@
m_channel.didConnect(soup_websocket_connection_get_protocol(m_connection.get()), acceptedExtensions());
- WebCore::ResourceResponse response;
- response.updateFromSoupMessage(m_handshakeMessage.get());
- m_channel.didReceiveHandshakeResponse(WTFMove(response));
+ m_channel.didReceiveHandshakeResponse(m_handshakeMessage.get());
g_signal_handlers_disconnect_by_data(m_handshakeMessage.get(), this);
m_handshakeMessage = nullptr;
}
@@ -172,9 +170,7 @@
m_receivedDidFail = true;
if (m_handshakeMessage) {
- WebCore::ResourceResponse response;
- response.updateFromSoupMessage(m_handshakeMessage.get());
- m_channel.didReceiveHandshakeResponse(WTFMove(response));
+ m_channel.didReceiveHandshakeResponse(m_handshakeMessage.get());
g_signal_handlers_disconnect_by_data(m_handshakeMessage.get(), this);
m_handshakeMessage = nullptr;
}
Modified: trunk/Source/WebKit/NetworkProcess/soup/WebSocketTaskSoup.h (272640 => 272641)
--- trunk/Source/WebKit/NetworkProcess/soup/WebSocketTaskSoup.h 2021-02-10 09:13:41 UTC (rev 272640)
+++ trunk/Source/WebKit/NetworkProcess/soup/WebSocketTaskSoup.h 2021-02-10 09:41:17 UTC (rev 272641)
@@ -26,6 +26,7 @@
#pragma once
#include "DataReference.h"
+#include <WebCore/ResourceRequest.h>
#include <libsoup/soup.h>
#include <wtf/RunLoop.h>
#include <wtf/glib/GRefPtr.h>
@@ -36,7 +37,7 @@
class WebSocketTask {
WTF_MAKE_FAST_ALLOCATED;
public:
- WebSocketTask(NetworkSocketChannel&, SoupSession*, SoupMessage*, const String& protocol);
+ WebSocketTask(NetworkSocketChannel&, const WebCore::ResourceRequest&, SoupSession*, SoupMessage*, const String& protocol);
~WebSocketTask();
void sendString(const IPC::DataReference&, CompletionHandler<void()>&&);
@@ -59,6 +60,7 @@
static void didCloseCallback(WebSocketTask*);
NetworkSocketChannel& m_channel;
+ WebCore::ResourceRequest m_request;
GRefPtr<SoupMessage> m_handshakeMessage;
GRefPtr<SoupWebsocketConnection> m_connection;
GRefPtr<GCancellable> m_cancellable;