Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 3524e0b12a24b4427183d7789b4ca9f9436b783b
https://github.com/WebKit/WebKit/commit/3524e0b12a24b4427183d7789b4ca9f9436b783b
Author: Ahmad Saleem <[email protected]>
Date: 2026-07-30 (Thu, 30 Jul 2026)
Changed paths:
A
LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-chunked-response.window-expected.txt
A
LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-chunked-response.window.html
A
LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-chunked-response.window.js
A
LayoutTests/imported/w3c/web-platform-tests/xhr/resources/content-in-chunks.py
M Source/WebCore/xml/XMLHttpRequest.cpp
M Source/WebCore/xml/XMLHttpRequest.h
Log Message:
-----------
[XHR] Final response charset is recomputed for every received data chunk
https://bugs.webkit.org/show_bug.cgi?id=320579
rdar://183557495
Reviewed by Chris Dumez.
didReceiveData() resolved the final response charset into m_responseEncoding on
every chunk, costing a media type parse and a String allocation per network
callback. It was only read by finalResponseCharset() feeding createDecoder(),
which runs once per load, and neither input can change in between:
overrideMimeType() and the responseType setter throw once the state reaches
LOADING.
Resolve the charset directly from the two inputs in finalResponseCharset(), per
<https://xhr.spec.whatwg.org/#final-charset>, and remove m_responseEncoding.
This also drops a second extractCharsetFromMediaType() call that could never
match, since its input was that same parser's output. No behavior change.
Add coverage for a charset spanning chunk boundaries; the existing
overrideMimeType() tests all use single-chunk responses.
Test:
imported/w3c/web-platform-tests/xhr/overridemimetype-chunked-response.window.html
*
LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-chunked-response.window-expected.txt:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-chunked-response.window.html:
Added.
*
LayoutTests/imported/w3c/web-platform-tests/xhr/overridemimetype-chunked-response.window.js:
Added.
(chunkedURL):
(async_test.t.client.onload.t.step_func_done):
*
LayoutTests/imported/w3c/web-platform-tests/xhr/resources/content-in-chunks.py:
Added.
(main):
* Source/WebCore/xml/XMLHttpRequest.cpp:
(WebCore::XMLHttpRequest::clearResponseBuffers):
(WebCore::XMLHttpRequest::didFinishLoading):
(WebCore::XMLHttpRequest::finalResponseCharset const):
(WebCore::XMLHttpRequest::didReceiveData):
* Source/WebCore/xml/XMLHttpRequest.h:
Canonical link: https://commits.webkit.org/318297@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications