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)