Reviewed by Darin Adler.
<rdar://problem/4072827> Downloaded non-ASCII file name becomes garbled
* platform/network/ResourceRequestBase.cpp:
(WebCore::ResourceRequestBase::setResponseContentDispositionEncodingFallbackArray):
* platform/network/ResourceRequestBase.h:
* platform/network/cf/ResourceRequestCFNet.cpp:
(WebCore::findCFURLRequestSetContentDispositionEncodingFallbackArrayFunction):
(WebCore::findCFURLRequestCopyContentDispositionEncodingFallbackArrayFunction):
(WebCore::setContentDispositionEncodingFallbackArray):
(WebCore::copyContentDispositionEncodingFallbackArray):
(WebCore::ResourceRequest::doUpdatePlatformRequest):
(WebCore::ResourceRequest::doUpdateResourceRequest):
* platform/network/mac/ResourceRequestMac.mm:
(WebCore::ResourceRequest::doUpdateResourceRequest):
(WebCore::ResourceRequest::doUpdatePlatformRequest):
Added a way to specify encoding fallback list for Content-Disposition header.
* loader/FrameLoader.cpp: (WebCore::FrameLoader::addExtraFieldsToRequest): Generate and
pass a list of encodings to try when decoding Content-Disposition header, as described
in comments.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@39026 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/loader/FrameLoader.cpp b/WebCore/loader/FrameLoader.cpp
index dbfc7d5..8018d93 100644
--- a/WebCore/loader/FrameLoader.cpp
+++ b/WebCore/loader/FrameLoader.cpp
@@ -3420,6 +3420,11 @@
// Make sure we send the Origin header.
addHTTPOriginIfNeeded(request, String());
+
+ // Always try UTF-8. If that fails, try frame encoding (if any) and then the default.
+ // For a newly opened frame with an empty URL, encoding() should not be used, because this methods asks decoder, which uses ISO-8859-1.
+ Settings* settings = m_frame->settings();
+ request.setResponseContentDispositionEncodingFallbackArray("UTF-8", m_URL.isEmpty() ? m_encoding : encoding(), settings ? settings->defaultTextEncodingName() : String());
}
void FrameLoader::addHTTPOriginIfNeeded(ResourceRequest& request, String origin)