Title: [272641] trunk/Source
Revision
272641
Author
carlo...@webkit.org
Date
2021-02-10 01:41:17 -0800 (Wed, 10 Feb 2021)

Log Message

[SOUP] Simplify ResourceRequest and ResourceResponse
https://bugs.webkit.org/show_bug.cgi?id=221543

Reviewed by Adrian Perez de Castro.

Source/WebCore:

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):

Source/WebKit:

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:

Modified Paths

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;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to