Title: [231434] releases/WebKitGTK/webkit-2.20
Revision
231434
Author
[email protected]
Date
2018-05-07 03:07:31 -0700 (Mon, 07 May 2018)

Log Message

Merge r231350 - [GTK] Epiphany (GNOME Web) says "Error downloading: Service Unavailable." when trying to download an image from discogs.com
https://bugs.webkit.org/show_bug.cgi?id=174730

Reviewed by Michael Catanzaro.

Source/WebCore:

Export ResourceRequestBase::hasHTTPHeaderField().

* platform/network/ResourceRequestBase.h:

Source/WebKit:

The problem is that we don't send any User-Agent HTTP header for downloads started by WebProcessPool::download().

* UIProcess/API/glib/WebKitDownload.cpp:
(webkitDownloadUpdateRequest): Helper to update the cached request.
(webkitDownloadStarted): Updated the cached request if we have one.
(webkit_download_get_request): Use webkitDownloadUpdateRequest().
* UIProcess/API/glib/WebKitDownloadClient.cpp:
* UIProcess/API/glib/WebKitDownloadPrivate.h:
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::download): Set the User-Agent HTTP header if there isn't any.

Tools:

Update unit tests to check that User-Agent header is included in HTTP download requests.

* TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp:
(testDownloadRemoteFile):
(testWebViewDownloadURI):
(testPolicyResponseDownload):
(testPolicyResponseDownloadCancel):
(testDownloadMIMEType):
(testContextMenuDownloadActions):

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.20/Source/WebCore/ChangeLog (231433 => 231434)


--- releases/WebKitGTK/webkit-2.20/Source/WebCore/ChangeLog	2018-05-07 09:49:20 UTC (rev 231433)
+++ releases/WebKitGTK/webkit-2.20/Source/WebCore/ChangeLog	2018-05-07 10:07:31 UTC (rev 231434)
@@ -1,3 +1,14 @@
+2018-05-04  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] Epiphany (GNOME Web) says "Error downloading: Service Unavailable." when trying to download an image from discogs.com
+        https://bugs.webkit.org/show_bug.cgi?id=174730
+
+        Reviewed by Michael Catanzaro.
+
+        Export ResourceRequestBase::hasHTTPHeaderField().
+
+        * platform/network/ResourceRequestBase.h:
+
 2018-05-03  Miguel Gomez  <[email protected]>
 
         WebCore::TextureMapperLayer object used after freed

Modified: releases/WebKitGTK/webkit-2.20/Source/WebCore/platform/network/ResourceRequestBase.h (231433 => 231434)


--- releases/WebKitGTK/webkit-2.20/Source/WebCore/platform/network/ResourceRequestBase.h	2018-05-07 09:49:20 UTC (rev 231433)
+++ releases/WebKitGTK/webkit-2.20/Source/WebCore/platform/network/ResourceRequestBase.h	2018-05-07 10:07:31 UTC (rev 231434)
@@ -92,7 +92,7 @@
     void addHTTPHeaderField(const String& name, const String& value);
     void addHTTPHeaderFieldIfNotPresent(HTTPHeaderName, const String&);
 
-    bool hasHTTPHeaderField(HTTPHeaderName) const;
+    WEBCORE_EXPORT bool hasHTTPHeaderField(HTTPHeaderName) const;
 
     // Instead of passing a string literal to any of these functions, just use a HTTPHeaderName instead.
     template<size_t length> String httpHeaderField(const char (&)[length]) const = delete;

Modified: releases/WebKitGTK/webkit-2.20/Source/WebKit/ChangeLog (231433 => 231434)


--- releases/WebKitGTK/webkit-2.20/Source/WebKit/ChangeLog	2018-05-07 09:49:20 UTC (rev 231433)
+++ releases/WebKitGTK/webkit-2.20/Source/WebKit/ChangeLog	2018-05-07 10:07:31 UTC (rev 231434)
@@ -1,3 +1,21 @@
+2018-05-04  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] Epiphany (GNOME Web) says "Error downloading: Service Unavailable." when trying to download an image from discogs.com
+        https://bugs.webkit.org/show_bug.cgi?id=174730
+
+        Reviewed by Michael Catanzaro.
+
+        The problem is that we don't send any User-Agent HTTP header for downloads started by WebProcessPool::download().
+
+        * UIProcess/API/glib/WebKitDownload.cpp:
+        (webkitDownloadUpdateRequest): Helper to update the cached request.
+        (webkitDownloadStarted): Updated the cached request if we have one.
+        (webkit_download_get_request): Use webkitDownloadUpdateRequest().
+        * UIProcess/API/glib/WebKitDownloadClient.cpp:
+        * UIProcess/API/glib/WebKitDownloadPrivate.h:
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::download): Set the User-Agent HTTP header if there isn't any.
+
 2018-04-28  Carlos Garcia Campos  <[email protected]>
 
         [GTK] WebProcess from WebKitGtk+ 2.19.92 SIGSEVs in WebCore::TextureMapperGL::~TextureMapperGL

Modified: releases/WebKitGTK/webkit-2.20/Source/WebKit/UIProcess/API/glib/WebKitDownload.cpp (231433 => 231434)


--- releases/WebKitGTK/webkit-2.20/Source/WebKit/UIProcess/API/glib/WebKitDownload.cpp	2018-05-07 09:49:20 UTC (rev 231433)
+++ releases/WebKitGTK/webkit-2.20/Source/WebKit/UIProcess/API/glib/WebKitDownload.cpp	2018-05-07 10:07:31 UTC (rev 231434)
@@ -323,6 +323,18 @@
     return download;
 }
 
+static void webkitDownloadUpdateRequest(WebKitDownload* download)
+{
+    download->priv->request = adoptGRef(webkitURIRequestCreateForResourceRequest(download->priv->download->request()));
+}
+
+void webkitDownloadStarted(WebKitDownload* download)
+{
+    // Update with the final request if needed.
+    if (download->priv->request)
+        webkitDownloadUpdateRequest(download);
+}
+
 void webkitDownloadSetResponse(WebKitDownload* download, WebKitURIResponse* response)
 {
     download->priv->response = response;
@@ -436,11 +448,11 @@
  */
 WebKitURIRequest* webkit_download_get_request(WebKitDownload* download)
 {
-    g_return_val_if_fail(WEBKIT_IS_DOWNLOAD(download), 0);
+    g_return_val_if_fail(WEBKIT_IS_DOWNLOAD(download), nullptr);
 
     WebKitDownloadPrivate* priv = download->priv;
     if (!priv->request)
-        priv->request = adoptGRef(webkitURIRequestCreateForResourceRequest(priv->download->request()));
+        webkitDownloadUpdateRequest(download);
     return priv->request.get();
 }
 

Modified: releases/WebKitGTK/webkit-2.20/Source/WebKit/UIProcess/API/glib/WebKitDownloadClient.cpp (231433 => 231434)


--- releases/WebKitGTK/webkit-2.20/Source/WebKit/UIProcess/API/glib/WebKitDownloadClient.cpp	2018-05-07 09:49:20 UTC (rev 231433)
+++ releases/WebKitGTK/webkit-2.20/Source/WebKit/UIProcess/API/glib/WebKitDownloadClient.cpp	2018-05-07 10:07:31 UTC (rev 231434)
@@ -43,6 +43,7 @@
     void didStart(WebProcessPool&, DownloadProxy& downloadProxy) override
     {
         GRefPtr<WebKitDownload> download = webkitWebContextGetOrCreateDownload(&downloadProxy);
+        webkitDownloadStarted(download.get());
         webkitWebContextDownloadStarted(m_webContext, download.get());
     }
 

Modified: releases/WebKitGTK/webkit-2.20/Source/WebKit/UIProcess/API/glib/WebKitDownloadPrivate.h (231433 => 231434)


--- releases/WebKitGTK/webkit-2.20/Source/WebKit/UIProcess/API/glib/WebKitDownloadPrivate.h	2018-05-07 09:49:20 UTC (rev 231433)
+++ releases/WebKitGTK/webkit-2.20/Source/WebKit/UIProcess/API/glib/WebKitDownloadPrivate.h	2018-05-07 10:07:31 UTC (rev 231434)
@@ -24,6 +24,7 @@
 #include <WebCore/ResourceRequest.h>
 
 WebKitDownload* webkitDownloadCreate(WebKit::DownloadProxy*);
+void webkitDownloadStarted(WebKitDownload*);
 bool webkitDownloadIsCancelled(WebKitDownload*);
 void webkitDownloadSetResponse(WebKitDownload*, WebKitURIResponse*);
 void webkitDownloadSetWebView(WebKitDownload*, WebKitWebView*);

Modified: releases/WebKitGTK/webkit-2.20/Source/WebKit/UIProcess/WebProcessPool.cpp (231433 => 231434)


--- releases/WebKitGTK/webkit-2.20/Source/WebKit/UIProcess/WebProcessPool.cpp	2018-05-07 09:49:20 UTC (rev 231433)
+++ releases/WebKitGTK/webkit-2.20/Source/WebKit/UIProcess/WebProcessPool.cpp	2018-05-07 10:07:31 UTC (rev 231434)
@@ -1119,10 +1119,15 @@
         ResourceRequest updatedRequest(request);
         // Request's firstPartyForCookies will be used as Original URL of the download request.
         // We set the value to top level document's URL.
-        if (initiatingPage)
+        if (initiatingPage) {
             updatedRequest.setFirstPartyForCookies(URL(URL(), initiatingPage->pageLoadState().url()));
-        else
+            if (!updatedRequest.hasHTTPHeaderField(HTTPHeaderName::UserAgent))
+                updatedRequest.setHTTPUserAgent(initiatingPage->userAgent());
+        } else {
             updatedRequest.setFirstPartyForCookies(URL());
+            if (!updatedRequest.hasHTTPHeaderField(HTTPHeaderName::UserAgent))
+                updatedRequest.setHTTPUserAgent(WebPageProxy::standardUserAgent());
+        }
         networkProcess()->send(Messages::NetworkProcess::DownloadRequest(sessionID, downloadProxy->downloadID(), updatedRequest, suggestedFilename), 0);
         return downloadProxy;
     }

Modified: releases/WebKitGTK/webkit-2.20/Tools/ChangeLog (231433 => 231434)


--- releases/WebKitGTK/webkit-2.20/Tools/ChangeLog	2018-05-07 09:49:20 UTC (rev 231433)
+++ releases/WebKitGTK/webkit-2.20/Tools/ChangeLog	2018-05-07 10:07:31 UTC (rev 231434)
@@ -1,3 +1,20 @@
+2018-05-04  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] Epiphany (GNOME Web) says "Error downloading: Service Unavailable." when trying to download an image from discogs.com
+        https://bugs.webkit.org/show_bug.cgi?id=174730
+
+        Reviewed by Michael Catanzaro.
+
+        Update unit tests to check that User-Agent header is included in HTTP download requests.
+
+        * TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp:
+        (testDownloadRemoteFile):
+        (testWebViewDownloadURI):
+        (testPolicyResponseDownload):
+        (testPolicyResponseDownloadCancel):
+        (testDownloadMIMEType):
+        (testContextMenuDownloadActions):
+
 2018-04-30  Michael Catanzaro  <[email protected]>
 
         [GTK] Webkit should spoof as Safari on a Mac when on Chase.com

Modified: releases/WebKitGTK/webkit-2.20/Tools/TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp (231433 => 231434)


--- releases/WebKitGTK/webkit-2.20/Tools/TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp	2018-05-07 09:49:20 UTC (rev 231433)
+++ releases/WebKitGTK/webkit-2.20/Tools/TestWebKitAPI/Tests/WebKitGLib/TestDownloads.cpp	2018-05-07 10:07:31 UTC (rev 231434)
@@ -453,6 +453,9 @@
     g_assert(request);
     ASSERT_CMP_CSTRING(webkit_uri_request_get_uri(request), ==, kServer->getURIForPath("/test.pdf"));
 
+    auto headers = webkit_uri_request_get_http_headers(request);
+    g_assert_nonnull(soup_message_headers_get_one(headers, "User-Agent"));
+
     g_assert(webkit_download_get_destination(download.get()));
     g_assert_cmpfloat(webkit_download_get_estimated_progress(download.get()), ==, 1);
     GUniquePtr<char> expectedFilename(g_strdup_printf("%s.pdf", kServerSuggestedFilename));
@@ -566,6 +569,13 @@
     test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(download.get()));
     test->waitUntilDownloadStarted();
     g_assert(test->m_webView == webkit_download_get_web_view(download.get()));
+
+    WebKitURIRequest* request = webkit_download_get_request(download.get());
+    g_assert(request);
+    ASSERT_CMP_CSTRING(webkit_uri_request_get_uri(request), ==, kServer->getURIForPath("/test.pdf"));
+
+    auto headers = webkit_uri_request_get_http_headers(request);
+    g_assert_nonnull(soup_message_headers_get_one(headers, "User-Agent"));
     test->waitUntilDownloadFinished();
 
     GRefPtr<GFile> downloadFile = adoptGRef(g_file_new_for_uri(webkit_download_get_destination(download.get())));
@@ -619,6 +629,9 @@
     ASSERT_CMP_CSTRING(webkit_uri_request_get_uri(request), ==, requestURI);
 
     g_assert(test->m_webView == webkit_download_get_web_view(test->m_download.get()));
+
+    auto headers = webkit_uri_request_get_http_headers(request);
+    g_assert_nonnull(soup_message_headers_get_one(headers, "User-Agent"));
     test->waitUntilDownloadFinished();
 
     GRefPtr<GFile> downloadFile = adoptGRef(g_file_new_for_uri(webkit_download_get_destination(test->m_download.get())));
@@ -638,6 +651,9 @@
     ASSERT_CMP_CSTRING(webkit_uri_request_get_uri(request), ==, requestURI);
 
     g_assert(test->m_webView == webkit_download_get_web_view(test->m_download.get()));
+
+    auto headers = webkit_uri_request_get_http_headers(request);
+    g_assert_nonnull(soup_message_headers_get_one(headers, "User-Agent"));
     test->cancelDownloadAndWaitUntilFinished();
 }
 
@@ -659,6 +675,9 @@
     WEBKIT_IS_URI_REQUEST(request);
     ASSERT_CMP_CSTRING(webkit_uri_request_get_uri(request), ==, kServer->getURIForPath("/unknown"));
 
+    auto headers = webkit_uri_request_get_http_headers(request);
+    g_assert_nonnull(soup_message_headers_get_one(headers, "User-Agent"));
+
     WebKitURIResponse* response = webkit_download_get_response(download.get());
     WEBKIT_IS_URI_RESPONSE(response);
     g_assert_cmpstr(webkit_uri_response_get_mime_type(response), ==, "application/pdf");
@@ -718,6 +737,14 @@
     test->waitUntilDownloadStarted();
 
     g_assert(test->m_webView == webkit_download_get_web_view(test->m_download.get()));
+
+    WebKitURIRequest* request = webkit_download_get_request(test->m_download.get());
+    WEBKIT_IS_URI_REQUEST(request);
+    ASSERT_CMP_CSTRING(webkit_uri_request_get_uri(request), ==, kServer->getURIForPath("/test.pdf"));
+
+    auto headers = webkit_uri_request_get_http_headers(request);
+    g_assert_nonnull(soup_message_headers_get_one(headers, "User-Agent"));
+
     test->waitUntilDownloadFinished();
 
     GRefPtr<GFile> downloadFile = adoptGRef(g_file_new_for_uri(webkit_download_get_destination(test->m_download.get())));
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to