Changeset 285919 in webkit
- Timestamp:
- Nov 17, 2021, 12:53:02 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 12 edited
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/UIProcess/API/glib/WebKitURISchemeRequest.cpp (modified) (5 diffs)
-
Source/WebKit/UIProcess/API/glib/WebKitURISchemeResponse.cpp (modified) (4 diffs)
-
Source/WebKit/UIProcess/API/glib/WebKitURISchemeResponsePrivate.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/gtk/WebKitURISchemeRequest.h (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/gtk/WebKitURISchemeResponse.h (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/wpe/WebKitURISchemeRequest.h (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/wpe/WebKitURISchemeResponse.h (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/wpe/docs/wpe-1.0-sections.txt (modified) (2 diffs)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r285914 r285919 1 2021-11-17 Zixing Liu <liushuyu011@gmail.com> 2 3 [GTK][WPE] Support getting and setting HTTP headers in custom URI scheme handlers 4 https://bugs.webkit.org/show_bug.cgi?id=203273 5 6 Reviewed by Carlos Garcia Campos. 7 8 * UIProcess/API/glib/WebKitURISchemeRequest.cpp: 9 (webkit_uri_scheme_request_get_http_headers): Added new API function 10 (webkitURISchemeRequestReadCallback): Include user-specified headers 11 * UIProcess/API/glib/WebKitURISchemeResponse.cpp: 12 (WebKitURISchemeResponseGetHeaders): Added a new private getter 13 (webkit_uri_scheme_response_set_http_headers): Added new API function 14 * UIProcess/API/glib/WebKitURISchemeResponsePrivate.h: 15 * UIProcess/API/gtk/WebKitURISchemeRequest.h: Added function prototype for 16 webkit_uri_scheme_request_get_http_headers 17 * UIProcess/API/gtk/WebKitURISchemeResponse.h: Added function prototype for 18 webkit_uri_scheme_request_set_http_headers 19 * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Added new symbols 20 * UIProcess/API/wpe/WebKitURISchemeRequest.h: Added function prototype for 21 webkit_uri_scheme_request_get_http_headers 22 * UIProcess/API/wpe/WebKitURISchemeResponse.h: Added function prototype for 23 webkit_uri_scheme_request_set_http_headers 24 * UIProcess/API/wpe/docs/wpe-1.0-sections.txt: Added new symbols 25 1 26 2021-11-16 Ross Kirsling <ross.kirsling@sony.com> 2 27 -
trunk/Source/WebKit/UIProcess/API/glib/WebKitURISchemeRequest.cpp
r285155 r285919 28 28 #include "WebKitWebView.h" 29 29 #include "WebPageProxy.h" 30 #include <WebCore/GUniquePtrSoup.h> 30 31 #include <WebCore/HTTPParsers.h> 31 32 #include <WebCore/MIMETypeRegistry.h> … … 71 72 uint64_t bytesRead; 72 73 const char* httpMethod; 74 GUniquePtr<SoupMessageHeaders> headers; 73 75 }; 74 76 … … 180 182 181 183 return request->priv->httpMethod; 184 } 185 186 /* 187 * webkit_uri_scheme_request_get_http_headers: 188 * @request: a #WebKitURISchemeRequest 189 * 190 * Get the #SoupMessageHeaders of the request. 191 * 192 * Returns: (transfer none): the #SoupMessageHeaders of the @request. 193 * 194 * Since: 2.36 195 */ 196 SoupMessageHeaders* webkit_uri_scheme_request_get_http_headers(WebKitURISchemeRequest* request) 197 { 198 g_return_val_if_fail(WEBKIT_IS_URI_SCHEME_REQUEST(request), nullptr); 199 200 if (!request->priv->headers) { 201 request->priv->headers.reset(soup_message_headers_new(SOUP_MESSAGE_HEADERS_REQUEST)); 202 request->priv->task->request().updateSoupMessageHeaders(request->priv->headers.get()); 203 } 204 205 return request->priv->headers.get(); 182 206 } 183 207 … … 200 224 WebKitURISchemeResponse* resp = priv->response.get(); 201 225 if (!priv->bytesRead) { 202 CString contentType = WebKitURISchemeResponseGetContentType(resp);203 ResourceResponse response(priv->task->request().url(), extractMIMETypeFromMediaType(contentType.data()), WebKitURISchemeResponseGetStreamLength(resp), emptyString());226 CString contentType = webKitURISchemeResponseGetContentType(resp); 227 ResourceResponse response(priv->task->request().url(), extractMIMETypeFromMediaType(contentType.data()), webKitURISchemeResponseGetStreamLength(resp), emptyString()); 204 228 response.setTextEncodingName(extractCharsetFromMediaType(contentType.data())); 205 const CString& statusMessage = WebKitURISchemeResponseGetStatusMessage(resp);229 const CString& statusMessage = webKitURISchemeResponseGetStatusMessage(resp); 206 230 if (statusMessage.isNull()) { 207 231 response.setHTTPStatusCode(200); 208 232 response.setHTTPStatusText("OK"_s); 209 233 } else { 210 response.setHTTPStatusCode( WebKitURISchemeResponseGetStatusCode(resp));234 response.setHTTPStatusCode(webKitURISchemeResponseGetStatusCode(resp)); 211 235 response.setHTTPStatusText(statusMessage.data()); 212 236 } 213 237 if (response.mimeType().isEmpty()) 214 238 response.setMimeType(MIMETypeRegistry::mimeTypeForPath(response.url().path().toString())); 239 if (auto* headers = webKitURISchemeResponseGetHeaders(resp)) 240 response.updateFromSoupMessageHeaders(headers); 215 241 priv->task->didReceiveResponse(response); 216 242 } … … 267 293 request->priv->response = response; 268 294 269 g_input_stream_read_async( WebKitURISchemeResponseGetStream(response), request->priv->readBuffer, gReadBufferSize, RunLoopSourcePriority::AsyncIONetwork, request->priv->cancellable.get(),295 g_input_stream_read_async(webKitURISchemeResponseGetStream(response), request->priv->readBuffer, gReadBufferSize, RunLoopSourcePriority::AsyncIONetwork, request->priv->cancellable.get(), 270 296 reinterpret_cast<GAsyncReadyCallback>(webkitURISchemeRequestReadCallback), g_object_ref(request)); 271 297 } -
trunk/Source/WebKit/UIProcess/API/glib/WebKitURISchemeResponse.cpp
r285155 r285919 22 22 23 23 #include "WebKitPrivate.h" 24 #include <WebCore/GUniquePtrSoup.h> 24 25 #include <glib/gi18n-lib.h> 25 26 #include <wtf/glib/GRefPtr.h> … … 63 64 CString statusMessage; 64 65 CString contentType; 66 GUniquePtr<SoupMessageHeaders> headers; 65 67 }; 66 68 … … 125 127 126 128 // Private getters 127 int WebKitURISchemeResponseGetStatusCode(const WebKitURISchemeResponse* response)129 int webKitURISchemeResponseGetStatusCode(const WebKitURISchemeResponse* response) 128 130 { 129 131 return response->priv->statusCode; 130 132 } 131 133 132 GInputStream* WebKitURISchemeResponseGetStream(const WebKitURISchemeResponse* response)134 GInputStream* webKitURISchemeResponseGetStream(const WebKitURISchemeResponse* response) 133 135 { 134 136 return response->priv->stream.get(); 135 137 } 136 138 137 const CString& WebKitURISchemeResponseGetStatusMessage(const WebKitURISchemeResponse* response)139 const CString& webKitURISchemeResponseGetStatusMessage(const WebKitURISchemeResponse* response) 138 140 { 139 141 return response->priv->statusMessage; 140 142 } 141 143 142 const CString& WebKitURISchemeResponseGetContentType(const WebKitURISchemeResponse* response)144 const CString& webKitURISchemeResponseGetContentType(const WebKitURISchemeResponse* response) 143 145 { 144 146 return response->priv->contentType; 145 147 } 146 148 147 uint64_t WebKitURISchemeResponseGetStreamLength(const WebKitURISchemeResponse* response)149 uint64_t webKitURISchemeResponseGetStreamLength(const WebKitURISchemeResponse* response) 148 150 { 149 151 return response->priv->streamLength; 152 } 153 154 SoupMessageHeaders* webKitURISchemeResponseGetHeaders(WebKitURISchemeResponse* response) 155 { 156 return response->priv->headers.get(); 150 157 } 151 158 … … 183 190 184 191 response->priv->contentType = contentType; 192 } 193 194 /* 195 * webkit_uri_scheme_response_set_http_headers: 196 * @response: a #WebKitURISchemeResponse 197 * @headers: (transfer full): the HTTP headers to be set 198 * 199 * Assign the provided #SoupMessageHeaders to the response. 200 * @headers need to be of the type %SOUP_MESSAGE_HEADERS_RESPONSE. 201 * Any existing headers will be overwritten. 202 * 203 * Since: 2.36 204 */ 205 void webkit_uri_scheme_response_set_http_headers(WebKitURISchemeResponse* response, SoupMessageHeaders* headers) 206 { 207 g_return_if_fail(WEBKIT_IS_URI_SCHEME_RESPONSE(response)); 208 g_return_if_fail(soup_message_headers_get_headers_type(headers) == SOUP_MESSAGE_HEADERS_RESPONSE); 209 210 response->priv->headers.reset(headers); 185 211 } 186 212 -
trunk/Source/WebKit/UIProcess/API/glib/WebKitURISchemeResponsePrivate.h
r285155 r285919 23 23 #include <wtf/text/CString.h> 24 24 25 int WebKitURISchemeResponseGetStatusCode(const WebKitURISchemeResponse*); 26 GInputStream* WebKitURISchemeResponseGetStream(const WebKitURISchemeResponse*); 27 const CString& WebKitURISchemeResponseGetStatusMessage(const WebKitURISchemeResponse*); 28 const CString& WebKitURISchemeResponseGetContentType(const WebKitURISchemeResponse*); 29 uint64_t WebKitURISchemeResponseGetStreamLength(const WebKitURISchemeResponse*); 25 int webKitURISchemeResponseGetStatusCode(const WebKitURISchemeResponse*); 26 GInputStream* webKitURISchemeResponseGetStream(const WebKitURISchemeResponse*); 27 const CString& webKitURISchemeResponseGetStatusMessage(const WebKitURISchemeResponse*); 28 const CString& webKitURISchemeResponseGetContentType(const WebKitURISchemeResponse*); 29 uint64_t webKitURISchemeResponseGetStreamLength(const WebKitURISchemeResponse*); 30 SoupMessageHeaders* webKitURISchemeResponseGetHeaders(WebKitURISchemeResponse*); -
trunk/Source/WebKit/UIProcess/API/gtk/WebKitURISchemeRequest.h
r285155 r285919 26 26 27 27 #include <glib-object.h> 28 #include <libsoup/soup.h> 28 29 #include <webkit2/WebKitDefines.h> 29 30 #include <webkit2/WebKitForwardDeclarations.h> … … 76 77 webkit_uri_scheme_request_get_http_method (WebKitURISchemeRequest *request); 77 78 79 WEBKIT_API SoupMessageHeaders * 80 webkit_uri_scheme_request_get_http_headers (WebKitURISchemeRequest *request); 81 78 82 WEBKIT_API void 79 83 webkit_uri_scheme_request_finish (WebKitURISchemeRequest *request, -
trunk/Source/WebKit/UIProcess/API/gtk/WebKitURISchemeResponse.h
r285155 r285919 26 26 27 27 #include <glib-object.h> 28 #include <libsoup/soup.h> 28 29 #include <webkit2/WebKitDefines.h> 29 30 #include <webkit2/WebKitForwardDeclarations.h> … … 73 74 const gchar *content_type); 74 75 76 WEBKIT_API void 77 webkit_uri_scheme_response_set_http_headers (WebKitURISchemeResponse *response, 78 SoupMessageHeaders *headers); 79 75 80 G_END_DECLS 76 81 -
trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt
r285155 r285919 1279 1279 webkit_uri_scheme_request_get_web_view 1280 1280 webkit_uri_scheme_request_get_http_method 1281 webkit_uri_scheme_request_get_http_headers 1281 1282 webkit_uri_scheme_request_finish 1282 1283 webkit_uri_scheme_request_finish_with_response … … 1303 1304 webkit_uri_scheme_response_set_content_type 1304 1305 webkit_uri_scheme_response_set_status 1306 webkit_uri_scheme_response_set_http_headers 1305 1307 1306 1308 <SUBSECTION Standard> -
trunk/Source/WebKit/UIProcess/API/wpe/WebKitURISchemeRequest.h
r285155 r285919 26 26 27 27 #include <glib-object.h> 28 #include <libsoup/soup.h> 28 29 #include <wpe/WebKitDefines.h> 29 30 #include <wpe/WebKitURISchemeResponse.h> … … 77 78 webkit_uri_scheme_request_get_http_method (WebKitURISchemeRequest *request); 78 79 80 WEBKIT_API SoupMessageHeaders * 81 webkit_uri_scheme_request_get_http_headers (WebKitURISchemeRequest *request); 82 79 83 WEBKIT_API void 80 84 webkit_uri_scheme_request_finish (WebKitURISchemeRequest *request, -
trunk/Source/WebKit/UIProcess/API/wpe/WebKitURISchemeResponse.h
r285155 r285919 26 26 27 27 #include <glib-object.h> 28 #include <libsoup/soup.h> 28 29 #include <wpe/WebKitDefines.h> 29 30 … … 72 73 const gchar *content_type); 73 74 75 WEBKIT_API void 76 webkit_uri_scheme_response_set_http_headers (WebKitURISchemeResponse *response, 77 SoupMessageHeaders *headers); 78 74 79 G_END_DECLS 75 80 -
trunk/Source/WebKit/UIProcess/API/wpe/docs/wpe-1.0-sections.txt
r285155 r285919 1216 1216 webkit_uri_scheme_request_get_web_view 1217 1217 webkit_uri_scheme_request_get_http_method 1218 webkit_uri_scheme_request_get_http_headers 1218 1219 webkit_uri_scheme_request_finish 1219 1220 webkit_uri_scheme_request_finish_with_response … … 1240 1241 webkit_uri_scheme_response_set_content_type 1241 1242 webkit_uri_scheme_response_set_status 1243 webkit_uri_scheme_response_set_http_headers 1242 1244 1243 1245 <SUBSECTION Standard> -
trunk/Tools/ChangeLog
r285900 r285919 1 2021-11-17 Zixing Liu <liushuyu011@gmail.com> 2 3 [GTK][WPE] Support getting and setting HTTP headers in custom URI scheme handlers 4 https://bugs.webkit.org/show_bug.cgi?id=203273 5 6 Reviewed by Carlos Garcia Campos. 7 8 * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp: 9 (testWebContextURIScheme): Added a new test to test getting and setting HTTP headers in custom URI scheme handlers 10 1 11 2021-11-16 Jonathan Bedard <jbedard@apple.com> 2 12 -
trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp
r285155 r285919 23 23 #include "WebKitTestServer.h" 24 24 #include <WebCore/SoupVersioning.h> 25 #include <libsoup/soup.h> 25 26 #include <limits.h> 26 27 #include <stdlib.h> … … 129 130 else 130 131 g_assert_cmpstr(method, ==, "GET"); 132 133 if (!g_strcmp0(scheme, "headers")) { 134 auto* headers = webkit_uri_scheme_request_get_http_headers(request); 135 g_assert_cmpstr(soup_message_headers_get_one(headers, "x-test"), ==, "A"); 136 g_assert_cmpstr(soup_message_headers_get_list(headers, "x-test2"), ==, "1, 2, 3, 4"); 137 } 131 138 132 139 const URISchemeHandler& handler = test->m_handlersMap.get(String::fromUTF8(scheme)); … … 167 174 webkit_uri_scheme_response_set_status(response.get(), handler.statusCode, nullptr); 168 175 webkit_uri_scheme_response_set_content_type(response.get(), handler.mimeType.data()); 176 if (!g_strcmp0(scheme, "headersresp")) { 177 auto* headers = soup_message_headers_new(SOUP_MESSAGE_HEADERS_RESPONSE); 178 soup_message_headers_append(headers, "x-test", "test_value"); 179 webkit_uri_scheme_response_set_http_headers(response.get(), headers); 180 } 169 181 webkit_uri_scheme_request_finish_with_response(request, response.get()); 170 182 } … … 332 344 g_assert_no_error(postError.get()); 333 345 test->waitUntilLoadFinished(); 346 g_assert_false(test->m_loadEvents.contains(LoadTrackingTest::ProvisionalLoadFailed)); 347 g_assert_false(test->m_loadEvents.contains(LoadTrackingTest::LoadFailed)); 348 349 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>"; 350 test->registerURISchemeHandler("headers", nullptr, 0, "application/json", 204); 351 test->m_loadEvents.clear(); 352 test->loadHtml(headersHTML, "headers:form"); 353 test->waitUntilLoadFinished(); 354 g_assert_false(test->m_loadEvents.contains(LoadTrackingTest::ProvisionalLoadFailed)); 355 g_assert_false(test->m_loadEvents.contains(LoadTrackingTest::LoadFailed)); 356 357 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>"; 358 test->registerURISchemeHandler("headersresp", nullptr, 0, "application/json", 204); 359 test->m_loadEvents.clear(); 360 test->loadHtml(respHTML, "headersresp:form"); 361 test->waitUntilLoadFinished(); 362 GUniqueOutPtr<GError> respError; 363 test->runJavaScriptAndWaitUntilFinished("if(window.hasError) throw 'Headers are missing or invalid'", &respError.outPtr()); 364 g_assert_no_error(respError.get()); 334 365 g_assert_false(test->m_loadEvents.contains(LoadTrackingTest::ProvisionalLoadFailed)); 335 366 g_assert_false(test->m_loadEvents.contains(LoadTrackingTest::LoadFailed));
Note:
See TracChangeset
for help on using the changeset viewer.