Title: [285919] trunk
Revision
285919
Author
[email protected]
Date
2021-11-17 00:53:02 -0800 (Wed, 17 Nov 2021)

Log Message

[GTK][WPE] Support getting and setting HTTP headers in custom URI scheme handlers
https://bugs.webkit.org/show_bug.cgi?id=203273

Patch by Zixing Liu <[email protected]> on 2021-11-17
Reviewed by Carlos Garcia Campos.

Source/WebKit:

* UIProcess/API/glib/WebKitURISchemeRequest.cpp:
(webkit_uri_scheme_request_get_http_headers): Added new API function
(webkitURISchemeRequestReadCallback): Include user-specified headers
* UIProcess/API/glib/WebKitURISchemeResponse.cpp:
(WebKitURISchemeResponseGetHeaders): Added a new private getter
(webkit_uri_scheme_response_set_http_headers): Added new API function
* UIProcess/API/glib/WebKitURISchemeResponsePrivate.h:
* UIProcess/API/gtk/WebKitURISchemeRequest.h: Added function prototype for
webkit_uri_scheme_request_get_http_headers
* UIProcess/API/gtk/WebKitURISchemeResponse.h: Added function prototype for
webkit_uri_scheme_request_set_http_headers
* UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Added new symbols
* UIProcess/API/wpe/WebKitURISchemeRequest.h: Added function prototype for
webkit_uri_scheme_request_get_http_headers
* UIProcess/API/wpe/WebKitURISchemeResponse.h: Added function prototype for
webkit_uri_scheme_request_set_http_headers
* UIProcess/API/wpe/docs/wpe-1.0-sections.txt: Added new symbols

Tools:

* TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
(testWebContextURIScheme): Added a new test to test getting and setting HTTP headers in custom URI scheme handlers

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (285918 => 285919)


--- trunk/Source/WebKit/ChangeLog	2021-11-17 07:54:59 UTC (rev 285918)
+++ trunk/Source/WebKit/ChangeLog	2021-11-17 08:53:02 UTC (rev 285919)
@@ -1,3 +1,28 @@
+2021-11-17  Zixing Liu  <[email protected]>
+
+        [GTK][WPE] Support getting and setting HTTP headers in custom URI scheme handlers
+        https://bugs.webkit.org/show_bug.cgi?id=203273
+
+        Reviewed by Carlos Garcia Campos.
+
+        * UIProcess/API/glib/WebKitURISchemeRequest.cpp:
+        (webkit_uri_scheme_request_get_http_headers): Added new API function
+        (webkitURISchemeRequestReadCallback): Include user-specified headers
+        * UIProcess/API/glib/WebKitURISchemeResponse.cpp:
+        (WebKitURISchemeResponseGetHeaders): Added a new private getter
+        (webkit_uri_scheme_response_set_http_headers): Added new API function
+        * UIProcess/API/glib/WebKitURISchemeResponsePrivate.h:
+        * UIProcess/API/gtk/WebKitURISchemeRequest.h: Added function prototype for 
+        webkit_uri_scheme_request_get_http_headers
+        * UIProcess/API/gtk/WebKitURISchemeResponse.h: Added function prototype for 
+        webkit_uri_scheme_request_set_http_headers
+        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Added new symbols
+        * UIProcess/API/wpe/WebKitURISchemeRequest.h: Added function prototype for 
+        webkit_uri_scheme_request_get_http_headers
+        * UIProcess/API/wpe/WebKitURISchemeResponse.h: Added function prototype for 
+        webkit_uri_scheme_request_set_http_headers
+        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt: Added new symbols
+
 2021-11-16  Ross Kirsling  <[email protected]>
 
         Unreviewed, fix WinCairo build following r285881.

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitURISchemeRequest.cpp (285918 => 285919)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitURISchemeRequest.cpp	2021-11-17 07:54:59 UTC (rev 285918)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitURISchemeRequest.cpp	2021-11-17 08:53:02 UTC (rev 285919)
@@ -27,6 +27,7 @@
 #include "WebKitWebContextPrivate.h"
 #include "WebKitWebView.h"
 #include "WebPageProxy.h"
+#include <WebCore/GUniquePtrSoup.h>
 #include <WebCore/HTTPParsers.h>
 #include <WebCore/MIMETypeRegistry.h>
 #include <WebCore/ResourceError.h>
@@ -70,6 +71,7 @@
     char readBuffer[gReadBufferSize];
     uint64_t bytesRead;
     const char* httpMethod;
+    GUniquePtr<SoupMessageHeaders> headers;
 };
 
 WEBKIT_DEFINE_TYPE(WebKitURISchemeRequest, webkit_uri_scheme_request, G_TYPE_OBJECT)
@@ -181,6 +183,28 @@
     return request->priv->httpMethod;
 }
 
+/*
+ * webkit_uri_scheme_request_get_http_headers:
+ * @request: a #WebKitURISchemeRequest
+ *
+ * Get the #SoupMessageHeaders of the request.
+ *
+ * Returns: (transfer none): the #SoupMessageHeaders of the @request.
+ *
+ * Since: 2.36
+ */
+SoupMessageHeaders* webkit_uri_scheme_request_get_http_headers(WebKitURISchemeRequest* request)
+{
+    g_return_val_if_fail(WEBKIT_IS_URI_SCHEME_REQUEST(request), nullptr);
+
+    if (!request->priv->headers) {
+        request->priv->headers.reset(soup_message_headers_new(SOUP_MESSAGE_HEADERS_REQUEST));
+        request->priv->task->request().updateSoupMessageHeaders(request->priv->headers.get());
+    }
+
+    return request->priv->headers.get();
+}
+
 static void webkitURISchemeRequestReadCallback(GInputStream* inputStream, GAsyncResult* result, WebKitURISchemeRequest* schemeRequest)
 {
     GRefPtr<WebKitURISchemeRequest> request = adoptGRef(schemeRequest);
@@ -199,19 +223,21 @@
 
     WebKitURISchemeResponse* resp = priv->response.get();
     if (!priv->bytesRead) {
-        CString contentType = WebKitURISchemeResponseGetContentType(resp);
-        ResourceResponse response(priv->task->request().url(), extractMIMETypeFromMediaType(contentType.data()), WebKitURISchemeResponseGetStreamLength(resp), emptyString());
+        CString contentType = webKitURISchemeResponseGetContentType(resp);
+        ResourceResponse response(priv->task->request().url(), extractMIMETypeFromMediaType(contentType.data()), webKitURISchemeResponseGetStreamLength(resp), emptyString());
         response.setTextEncodingName(extractCharsetFromMediaType(contentType.data()));
-        const CString& statusMessage = WebKitURISchemeResponseGetStatusMessage(resp);
+        const CString& statusMessage = webKitURISchemeResponseGetStatusMessage(resp);
         if (statusMessage.isNull()) {
             response.setHTTPStatusCode(200);
             response.setHTTPStatusText("OK"_s);
         } else {
-            response.setHTTPStatusCode(WebKitURISchemeResponseGetStatusCode(resp));
+            response.setHTTPStatusCode(webKitURISchemeResponseGetStatusCode(resp));
             response.setHTTPStatusText(statusMessage.data());
         }
         if (response.mimeType().isEmpty())
             response.setMimeType(MIMETypeRegistry::mimeTypeForPath(response.url().path().toString()));
+        if (auto* headers = webKitURISchemeResponseGetHeaders(resp))
+            response.updateFromSoupMessageHeaders(headers);
         priv->task->didReceiveResponse(response);
     }
 
@@ -266,7 +292,7 @@
     request->priv->cancellable = adoptGRef(g_cancellable_new());
     request->priv->response = response;
 
-    g_input_stream_read_async(WebKitURISchemeResponseGetStream(response), request->priv->readBuffer, gReadBufferSize, RunLoopSourcePriority::AsyncIONetwork, request->priv->cancellable.get(),
+    g_input_stream_read_async(webKitURISchemeResponseGetStream(response), request->priv->readBuffer, gReadBufferSize, RunLoopSourcePriority::AsyncIONetwork, request->priv->cancellable.get(),
         reinterpret_cast<GAsyncReadyCallback>(webkitURISchemeRequestReadCallback), g_object_ref(request));
 }
 

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitURISchemeResponse.cpp (285918 => 285919)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitURISchemeResponse.cpp	2021-11-17 07:54:59 UTC (rev 285918)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitURISchemeResponse.cpp	2021-11-17 08:53:02 UTC (rev 285919)
@@ -21,6 +21,7 @@
 #include "WebKitURISchemeResponsePrivate.h"
 
 #include "WebKitPrivate.h"
+#include <WebCore/GUniquePtrSoup.h>
 #include <glib/gi18n-lib.h>
 #include <wtf/glib/GRefPtr.h>
 #include <wtf/glib/WTFGType.h>
@@ -62,6 +63,7 @@
     int statusCode { -1 };
     CString statusMessage;
     CString contentType;
+    GUniquePtr<SoupMessageHeaders> headers;
 };
 
 WEBKIT_DEFINE_TYPE(WebKitURISchemeResponse, webkit_uri_scheme_response, G_TYPE_OBJECT)
@@ -124,31 +126,36 @@
 }
 
 // Private getters
-int WebKitURISchemeResponseGetStatusCode(const WebKitURISchemeResponse* response)
+int webKitURISchemeResponseGetStatusCode(const WebKitURISchemeResponse* response)
 {
     return response->priv->statusCode;
 }
 
-GInputStream* WebKitURISchemeResponseGetStream(const WebKitURISchemeResponse* response)
+GInputStream* webKitURISchemeResponseGetStream(const WebKitURISchemeResponse* response)
 {
     return response->priv->stream.get();
 }
 
-const CString& WebKitURISchemeResponseGetStatusMessage(const WebKitURISchemeResponse* response)
+const CString& webKitURISchemeResponseGetStatusMessage(const WebKitURISchemeResponse* response)
 {
     return response->priv->statusMessage;
 }
 
-const CString& WebKitURISchemeResponseGetContentType(const WebKitURISchemeResponse* response)
+const CString& webKitURISchemeResponseGetContentType(const WebKitURISchemeResponse* response)
 {
     return response->priv->contentType;
 }
 
-uint64_t WebKitURISchemeResponseGetStreamLength(const WebKitURISchemeResponse* response)
+uint64_t webKitURISchemeResponseGetStreamLength(const WebKitURISchemeResponse* response)
 {
     return response->priv->streamLength;
 }
 
+SoupMessageHeaders* webKitURISchemeResponseGetHeaders(WebKitURISchemeResponse* response)
+{
+    return response->priv->headers.get();
+}
+
 /**
  * webkit_uri_scheme_response_new:
  * @input_stream: a #GInputStream to read the contents of the request
@@ -184,6 +191,25 @@
     response->priv->contentType = contentType;
 }
 
+/*
+ * webkit_uri_scheme_response_set_http_headers:
+ * @response: a #WebKitURISchemeResponse
+ * @headers: (transfer full): the HTTP headers to be set
+ *
+ * Assign the provided #SoupMessageHeaders to the response.
+ * @headers need to be of the type %SOUP_MESSAGE_HEADERS_RESPONSE.
+ * Any existing headers will be overwritten.
+ *
+ * Since: 2.36
+ */
+void webkit_uri_scheme_response_set_http_headers(WebKitURISchemeResponse* response, SoupMessageHeaders* headers)
+{
+    g_return_if_fail(WEBKIT_IS_URI_SCHEME_RESPONSE(response));
+    g_return_if_fail(soup_message_headers_get_headers_type(headers) == SOUP_MESSAGE_HEADERS_RESPONSE);
+
+    response->priv->headers.reset(headers);
+}
+
 /**
  * webkit_uri_scheme_response_set_status:
  * @response: a #WebKitURISchemeResponse

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitURISchemeResponsePrivate.h (285918 => 285919)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitURISchemeResponsePrivate.h	2021-11-17 07:54:59 UTC (rev 285918)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitURISchemeResponsePrivate.h	2021-11-17 08:53:02 UTC (rev 285919)
@@ -22,8 +22,9 @@
 #include "WebKitURISchemeResponse.h"
 #include <wtf/text/CString.h>
 
-int WebKitURISchemeResponseGetStatusCode(const WebKitURISchemeResponse*);
-GInputStream* WebKitURISchemeResponseGetStream(const WebKitURISchemeResponse*);
-const CString& WebKitURISchemeResponseGetStatusMessage(const WebKitURISchemeResponse*);
-const CString& WebKitURISchemeResponseGetContentType(const WebKitURISchemeResponse*);
-uint64_t WebKitURISchemeResponseGetStreamLength(const WebKitURISchemeResponse*);
+int webKitURISchemeResponseGetStatusCode(const WebKitURISchemeResponse*);
+GInputStream* webKitURISchemeResponseGetStream(const WebKitURISchemeResponse*);
+const CString& webKitURISchemeResponseGetStatusMessage(const WebKitURISchemeResponse*);
+const CString& webKitURISchemeResponseGetContentType(const WebKitURISchemeResponse*);
+uint64_t webKitURISchemeResponseGetStreamLength(const WebKitURISchemeResponse*);
+SoupMessageHeaders* webKitURISchemeResponseGetHeaders(WebKitURISchemeResponse*);

Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitURISchemeRequest.h (285918 => 285919)


--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitURISchemeRequest.h	2021-11-17 07:54:59 UTC (rev 285918)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitURISchemeRequest.h	2021-11-17 08:53:02 UTC (rev 285919)
@@ -25,6 +25,7 @@
 #define WebKitURISchemeRequest_h
 
 #include <glib-object.h>
+#include <libsoup/soup.h>
 #include <webkit2/WebKitDefines.h>
 #include <webkit2/WebKitForwardDeclarations.h>
 #include <webkit2/WebKitURISchemeResponse.h>
@@ -75,6 +76,9 @@
 WEBKIT_API const gchar *
 webkit_uri_scheme_request_get_http_method (WebKitURISchemeRequest *request);
 
+WEBKIT_API SoupMessageHeaders *
+webkit_uri_scheme_request_get_http_headers (WebKitURISchemeRequest *request);
+
 WEBKIT_API void
 webkit_uri_scheme_request_finish       (WebKitURISchemeRequest *request,
                                         GInputStream           *stream,

Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitURISchemeResponse.h (285918 => 285919)


--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitURISchemeResponse.h	2021-11-17 07:54:59 UTC (rev 285918)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitURISchemeResponse.h	2021-11-17 08:53:02 UTC (rev 285919)
@@ -25,6 +25,7 @@
 #define WebKitURISchemeResponse_h
 
 #include <glib-object.h>
+#include <libsoup/soup.h>
 #include <webkit2/WebKitDefines.h>
 #include <webkit2/WebKitForwardDeclarations.h>
 
@@ -72,6 +73,10 @@
 webkit_uri_scheme_response_set_content_type   (WebKitURISchemeResponse *response,
                                                const gchar             *content_type);
 
+WEBKIT_API void
+webkit_uri_scheme_response_set_http_headers   (WebKitURISchemeResponse *response,
+                                               SoupMessageHeaders      *headers);
+
 G_END_DECLS
 
 #endif

Modified: trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt (285918 => 285919)


--- trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt	2021-11-17 07:54:59 UTC (rev 285918)
+++ trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt	2021-11-17 08:53:02 UTC (rev 285919)
@@ -1278,6 +1278,7 @@
 webkit_uri_scheme_request_get_path
 webkit_uri_scheme_request_get_web_view
 webkit_uri_scheme_request_get_http_method
+webkit_uri_scheme_request_get_http_headers
 webkit_uri_scheme_request_finish
 webkit_uri_scheme_request_finish_with_response
 webkit_uri_scheme_request_finish_error
@@ -1302,6 +1303,7 @@
 webkit_uri_scheme_response_new
 webkit_uri_scheme_response_set_content_type
 webkit_uri_scheme_response_set_status
+webkit_uri_scheme_response_set_http_headers
 
 <SUBSECTION Standard>
 WebKitURISchemeResponseClass

Modified: trunk/Source/WebKit/UIProcess/API/wpe/WebKitURISchemeRequest.h (285918 => 285919)


--- trunk/Source/WebKit/UIProcess/API/wpe/WebKitURISchemeRequest.h	2021-11-17 07:54:59 UTC (rev 285918)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WebKitURISchemeRequest.h	2021-11-17 08:53:02 UTC (rev 285919)
@@ -25,6 +25,7 @@
 #define WebKitURISchemeRequest_h
 
 #include <glib-object.h>
+#include <libsoup/soup.h>
 #include <wpe/WebKitDefines.h>
 #include <wpe/WebKitURISchemeResponse.h>
 
@@ -76,6 +77,9 @@
 WEBKIT_API const gchar *
 webkit_uri_scheme_request_get_http_method (WebKitURISchemeRequest *request);
 
+WEBKIT_API SoupMessageHeaders *
+webkit_uri_scheme_request_get_http_headers (WebKitURISchemeRequest *request);
+
 WEBKIT_API void
 webkit_uri_scheme_request_finish       (WebKitURISchemeRequest *request,
                                         GInputStream           *stream,

Modified: trunk/Source/WebKit/UIProcess/API/wpe/WebKitURISchemeResponse.h (285918 => 285919)


--- trunk/Source/WebKit/UIProcess/API/wpe/WebKitURISchemeResponse.h	2021-11-17 07:54:59 UTC (rev 285918)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WebKitURISchemeResponse.h	2021-11-17 08:53:02 UTC (rev 285919)
@@ -25,6 +25,7 @@
 #define WebKitURISchemeResponse_h
 
 #include <glib-object.h>
+#include <libsoup/soup.h>
 #include <wpe/WebKitDefines.h>
 
 G_BEGIN_DECLS
@@ -71,6 +72,10 @@
 webkit_uri_scheme_response_set_content_type   (WebKitURISchemeResponse *response,
                                                const gchar             *content_type);
 
+WEBKIT_API void
+webkit_uri_scheme_response_set_http_headers   (WebKitURISchemeResponse *response,
+                                               SoupMessageHeaders      *headers);
+
 G_END_DECLS
 
 #endif

Modified: trunk/Source/WebKit/UIProcess/API/wpe/docs/wpe-1.0-sections.txt (285918 => 285919)


--- trunk/Source/WebKit/UIProcess/API/wpe/docs/wpe-1.0-sections.txt	2021-11-17 07:54:59 UTC (rev 285918)
+++ trunk/Source/WebKit/UIProcess/API/wpe/docs/wpe-1.0-sections.txt	2021-11-17 08:53:02 UTC (rev 285919)
@@ -1215,6 +1215,7 @@
 webkit_uri_scheme_request_get_path
 webkit_uri_scheme_request_get_web_view
 webkit_uri_scheme_request_get_http_method
+webkit_uri_scheme_request_get_http_headers
 webkit_uri_scheme_request_finish
 webkit_uri_scheme_request_finish_with_response
 webkit_uri_scheme_request_finish_error
@@ -1239,6 +1240,7 @@
 webkit_uri_scheme_response_new
 webkit_uri_scheme_response_set_content_type
 webkit_uri_scheme_response_set_status
+webkit_uri_scheme_response_set_http_headers
 
 <SUBSECTION Standard>
 WebKitURISchemeResponseClass

Modified: trunk/Tools/ChangeLog (285918 => 285919)


--- trunk/Tools/ChangeLog	2021-11-17 07:54:59 UTC (rev 285918)
+++ trunk/Tools/ChangeLog	2021-11-17 08:53:02 UTC (rev 285919)
@@ -1,3 +1,13 @@
+2021-11-17  Zixing Liu  <[email protected]>
+
+        [GTK][WPE] Support getting and setting HTTP headers in custom URI scheme handlers
+        https://bugs.webkit.org/show_bug.cgi?id=203273
+
+        Reviewed by Carlos Garcia Campos.
+
+        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
+        (testWebContextURIScheme): Added a new test to test getting and setting HTTP headers in custom URI scheme handlers
+
 2021-11-16  Jonathan Bedard  <[email protected]>
 
         [webkitscmpy] Load secrets in kubernetes

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp (285918 => 285919)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp	2021-11-17 07:54:59 UTC (rev 285918)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp	2021-11-17 08:53:02 UTC (rev 285919)
@@ -22,6 +22,7 @@
 #include "LoadTrackingTest.h"
 #include "WebKitTestServer.h"
 #include <WebCore/SoupVersioning.h>
+#include <libsoup/soup.h>
 #include <limits.h>
 #include <stdlib.h>
 #include <wtf/HashMap.h>
@@ -129,6 +130,12 @@
         else
             g_assert_cmpstr(method, ==, "GET");
 
+        if (!g_strcmp0(scheme, "headers")) {
+            auto* headers = webkit_uri_scheme_request_get_http_headers(request);
+            g_assert_cmpstr(soup_message_headers_get_one(headers, "x-test"), ==, "A");
+            g_assert_cmpstr(soup_message_headers_get_list(headers, "x-test2"), ==, "1, 2, 3, 4");
+        }
+
         const URISchemeHandler& handler = test->m_handlersMap.get(String::fromUTF8(scheme));
 
         GRefPtr<GInputStream> inputStream = adoptGRef(g_memory_input_stream_new());
@@ -166,6 +173,11 @@
         auto response = adoptGRef(webkit_uri_scheme_response_new(inputStream.get(), handler.replyLength));
         webkit_uri_scheme_response_set_status(response.get(), handler.statusCode, nullptr);
         webkit_uri_scheme_response_set_content_type(response.get(), handler.mimeType.data());
+        if (!g_strcmp0(scheme, "headersresp")) {
+            auto* headers = soup_message_headers_new(SOUP_MESSAGE_HEADERS_RESPONSE);
+            soup_message_headers_append(headers, "x-test", "test_value");
+            webkit_uri_scheme_response_set_http_headers(response.get(), headers);
+        }
         webkit_uri_scheme_request_finish_with_response(request, response.get());
     }
 
@@ -334,6 +346,25 @@
     g_assert_false(test->m_loadEvents.contains(LoadTrackingTest::ProvisionalLoadFailed));
     g_assert_false(test->m_loadEvents.contains(LoadTrackingTest::LoadFailed));
 
+    static const char* headersHTML = "<html><body><script>let hdrs = new Headers({'X-Test': 'A', 'X-Test2': '1, 2, 3'});hdrs.append('X-Test2', '4');fetch('headers:data', {headers: hdrs})</script></body></html>";
+    test->registerURISchemeHandler("headers", nullptr, 0, "application/json", 204);
+    test->m_loadEvents.clear();
+    test->loadHtml(headersHTML, "headers:form");
+    test->waitUntilLoadFinished();
+    g_assert_false(test->m_loadEvents.contains(LoadTrackingTest::ProvisionalLoadFailed));
+    g_assert_false(test->m_loadEvents.contains(LoadTrackingTest::LoadFailed));
+
+    static const char* respHTML = "<html><head><script>fetch('headersresp:data').then((d)=>{if(d.headers.get('X-Test') !== 'test_value') window.hasError=1}).catch((e)=> window.hasError=1)</script></head></html>";
+    test->registerURISchemeHandler("headersresp", nullptr, 0, "application/json", 204);
+    test->m_loadEvents.clear();
+    test->loadHtml(respHTML, "headersresp:form");
+    test->waitUntilLoadFinished();
+    GUniqueOutPtr<GError> respError;
+    test->runJavaScriptAndWaitUntilFinished("if(window.hasError) throw 'Headers are missing or invalid'", &respError.outPtr());
+    g_assert_no_error(respError.get());
+    g_assert_false(test->m_loadEvents.contains(LoadTrackingTest::ProvisionalLoadFailed));
+    g_assert_false(test->m_loadEvents.contains(LoadTrackingTest::LoadFailed));
+
     // Torture test time: make sure it still works if we issue a bunch of different requests all at
     // once. Each request should finish and return exactly the same data.
     int numIterations = 25;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to