From cebc10654f3cbebbc8defbf4bdb4b97cff316c39 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Tue, 11 Apr 2023 01:46:43 -0700 Subject: [PATCH] [SOUP] Do not handle HSTS upgrade as a redirection in case of redirection https://bugs.webkit.org/show_bug.cgi?id=255218 Reviewed by Adrian Perez de Castro. We handle HSTS upgrades as a redirection to let Web and UI processes know about the URL change, but in case of redirection, the new request is originated in the network process, so we can just update the URL. * Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp: (WebKit::NetworkDataTaskSoup::protocolUpgradedViaHSTS): Canonical link: https://commits.webkit.org/262817@main --- .../WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp b/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp index 3644f10a9e86..1d603bd278d2 100644 --- a/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp +++ b/Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp @@ -1620,8 +1620,14 @@ bool NetworkDataTaskSoup::shouldAllowHSTSProtocolUpgrade() const void NetworkDataTaskSoup::protocolUpgradedViaHSTS(SoupMessage* soupMessage) { - m_response = ResourceResponse::syntheticRedirectResponse(m_currentRequest.url(), soupURIToURL(soup_message_get_uri(soupMessage))); - continueHTTPRedirection(); + if (!m_response.isNull() && !m_response.httpHeaderField(HTTPHeaderName::Location).isEmpty()) { + // We handle HSTS upgrades as a redirection to let Web and UI processes know about the URL change, but in + // case of redirection, the new request is originated in the network process, so we can just update the URL. + m_currentRequest.setURL(soupURIToURL(soup_message_get_uri(m_soupMessage.get()))); + } else { + m_response = ResourceResponse::syntheticRedirectResponse(m_currentRequest.url(), soupURIToURL(soup_message_get_uri(soupMessage))); + continueHTTPRedirection(); + } } #if USE(SOUP2)