<rdar://problem/13740375> Non-ASCII downloaded file names are garbled when using NetworkProcess
https://bugs.webkit.org/show_bug.cgi?id=115520
Reviewed by Darin Adler.
* Shared/mac/WebCoreArgumentCodersMac.mm:
(CoreIPC::::encodePlatformData):
(CoreIPC::::decodePlatformData):
Send the encoding fallback array over IPC, so that it's present when NetworkProcess does its loading.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@149491 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 634cddd..1bf5f37 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,23 @@
+2013-05-02 Alexey Proskuryakov <ap@apple.com>
+
+ <rdar://problem/13740375> Non-ASCII downloaded file names are garbled when using NetworkProcess
+ https://bugs.webkit.org/show_bug.cgi?id=115520
+
+ Reviewed by Darin Adler.
+
+ Covered by existing tests when using NetworkProcess.
+
+ * WebCore.exp.in:
+ * platform/network/ResourceRequestBase.h:
+ (WebCore::ResourceRequestBase::responseContentDispositionEncodingFallbackArray):
+ Added a getter for encoding fallback array.
+
+ * platform/network/mac/ResourceRequestMac.mm:
+ (WebCore::ResourceRequest::doUpdateResourceRequest):
+ (WebCore::ResourceRequest::doUpdatePlatformRequest):
+ Removed obsolete checks for presence of fallback array methods, they were available
+ since 10.6.8.
+
2013-05-01 Enrica Casucci <enrica@apple.com>
text-combine: horizontal does not work properly for some fonts.
diff --git a/Source/WebCore/WebCore.exp.in b/Source/WebCore/WebCore.exp.in
index b075f69..1dd07c2 100644
--- a/Source/WebCore/WebCore.exp.in
+++ b/Source/WebCore/WebCore.exp.in
@@ -643,6 +643,7 @@
__ZN7WebCore19ResourceRequestBase22defaultTimeoutIntervalEv
__ZN7WebCore19ResourceRequestBase24s_defaultTimeoutIntervalE
__ZN7WebCore19ResourceRequestBase25setDefaultTimeoutIntervalEd
+__ZN7WebCore19ResourceRequestBase50setResponseContentDispositionEncodingFallbackArrayERKN3WTF6StringES4_S4_
__ZN7WebCore19ResourceRequestBase6setURLERKNS_4KURLE
__ZN7WebCore19TextResourceDecoder5flushEv
__ZN7WebCore19TextResourceDecoder6decodeEPKcm
diff --git a/Source/WebCore/platform/network/ResourceRequestBase.h b/Source/WebCore/platform/network/ResourceRequestBase.h
index a9fbdb9..ceff9b9 100644
--- a/Source/WebCore/platform/network/ResourceRequestBase.h
+++ b/Source/WebCore/platform/network/ResourceRequestBase.h
@@ -111,6 +111,7 @@
void setHTTPAccept(const String& httpAccept) { setHTTPHeaderField("Accept", httpAccept); }
void clearHTTPAccept();
+ const Vector<String>& responseContentDispositionEncodingFallbackArray() const { return m_responseContentDispositionEncodingFallbackArray; }
void setResponseContentDispositionEncodingFallbackArray(const String& encoding1, const String& encoding2 = String(), const String& encoding3 = String());
FormData* httpBody() const;
diff --git a/Source/WebCore/platform/network/mac/ResourceRequestMac.mm b/Source/WebCore/platform/network/mac/ResourceRequestMac.mm
index 6670652..f8239c3 100644
--- a/Source/WebCore/platform/network/mac/ResourceRequestMac.mm
+++ b/Source/WebCore/platform/network/mac/ResourceRequestMac.mm
@@ -100,17 +100,13 @@
while ((name = [e nextObject]))
m_httpHeaderFields.set(name, [headers objectForKey:name]);
- // The below check can be removed once we require a version of Foundation with -[NSURLRequest contentDispositionEncodingFallbackArray] method.
- static bool supportsContentDispositionEncodingFallbackArray = [NSURLRequest instancesRespondToSelector:@selector(contentDispositionEncodingFallbackArray)];
- if (supportsContentDispositionEncodingFallbackArray) {
- m_responseContentDispositionEncodingFallbackArray.clear();
- NSArray *encodingFallbacks = [m_nsRequest.get() contentDispositionEncodingFallbackArray];
- NSUInteger count = [encodingFallbacks count];
- for (NSUInteger i = 0; i < count; ++i) {
- CFStringEncoding encoding = CFStringConvertNSStringEncodingToEncoding([(NSNumber *)[encodingFallbacks objectAtIndex:i] unsignedLongValue]);
- if (encoding != kCFStringEncodingInvalidId)
- m_responseContentDispositionEncodingFallbackArray.append(CFStringConvertEncodingToIANACharSetName(encoding));
- }
+ m_responseContentDispositionEncodingFallbackArray.clear();
+ NSArray *encodingFallbacks = [m_nsRequest.get() contentDispositionEncodingFallbackArray];
+ NSUInteger count = [encodingFallbacks count];
+ for (NSUInteger i = 0; i < count; ++i) {
+ CFStringEncoding encoding = CFStringConvertNSStringEncodingToEncoding([(NSNumber *)[encodingFallbacks objectAtIndex:i] unsignedLongValue]);
+ if (encoding != kCFStringEncodingInvalidId)
+ m_responseContentDispositionEncodingFallbackArray.append(CFStringConvertEncodingToIANACharSetName(encoding));
}
#if ENABLE(CACHE_PARTITIONING)
@@ -177,20 +173,16 @@
for (HTTPHeaderMap::const_iterator it = httpHeaderFields().begin(); it != end; ++it)
[nsRequest setValue:it->value forHTTPHeaderField:it->key];
- // The below check can be removed once we require a version of Foundation with -[NSMutableURLRequest setContentDispositionEncodingFallbackArray:] method.
- static bool supportsContentDispositionEncodingFallbackArray = [NSMutableURLRequest instancesRespondToSelector:@selector(setContentDispositionEncodingFallbackArray:)];
- if (supportsContentDispositionEncodingFallbackArray) {
- NSMutableArray *encodingFallbacks = [NSMutableArray array];
- unsigned count = m_responseContentDispositionEncodingFallbackArray.size();
- for (unsigned i = 0; i != count; ++i) {
- RetainPtr<CFStringRef> encodingName = m_responseContentDispositionEncodingFallbackArray[i].createCFString();
- unsigned long nsEncoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding(encodingName.get()));
+ NSMutableArray *encodingFallbacks = [NSMutableArray array];
+ unsigned count = m_responseContentDispositionEncodingFallbackArray.size();
+ for (unsigned i = 0; i != count; ++i) {
+ RetainPtr<CFStringRef> encodingName = m_responseContentDispositionEncodingFallbackArray[i].createCFString();
+ unsigned long nsEncoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding(encodingName.get()));
- if (nsEncoding != kCFStringEncodingInvalidId)
- [encodingFallbacks addObject:[NSNumber numberWithUnsignedLong:nsEncoding]];
- }
- [nsRequest setContentDispositionEncodingFallbackArray:encodingFallbacks];
+ if (nsEncoding != kCFStringEncodingInvalidId)
+ [encodingFallbacks addObject:[NSNumber numberWithUnsignedLong:nsEncoding]];
}
+ [nsRequest setContentDispositionEncodingFallbackArray:encodingFallbacks];
#if ENABLE(CACHE_PARTITIONING)
String partition = cachePartition();
diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog
index 65f0d3b..707a7c2 100644
--- a/Source/WebKit2/ChangeLog
+++ b/Source/WebKit2/ChangeLog
@@ -1,3 +1,15 @@
+2013-05-02 Alexey Proskuryakov <ap@apple.com>
+
+ <rdar://problem/13740375> Non-ASCII downloaded file names are garbled when using NetworkProcess
+ https://bugs.webkit.org/show_bug.cgi?id=115520
+
+ Reviewed by Darin Adler.
+
+ * Shared/mac/WebCoreArgumentCodersMac.mm:
+ (CoreIPC::::encodePlatformData):
+ (CoreIPC::::decodePlatformData):
+ Send the encoding fallback array over IPC, so that it's present when NetworkProcess does its loading.
+
2013-05-01 Alexey Proskuryakov <ap@apple.com>
REGRESSION (r149422): -[WKBrowsingContextController loadFileURL:restrictToFilesWithin:]
diff --git a/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm b/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm
index 6e82670..c126000 100644
--- a/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm
+++ b/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm
@@ -58,6 +58,9 @@
RetainPtr<CFDictionaryRef> dictionary = adoptCF(WKNSURLRequestCreateSerializableRepresentation(requestToSerialize.get(), CoreIPC::tokenNullTypeRef()));
CoreIPC::encode(encoder, dictionary.get());
+
+ // The fallback array is part of NSURLRequest, but it is not encoded by WKNSURLRequestCreateSerializableRepresentation.
+ encoder << resourceRequest.responseContentDispositionEncodingFallbackArray();
}
bool ArgumentCoder<ResourceRequest>::decodePlatformData(ArgumentDecoder& decoder, ResourceRequest& resourceRequest)
@@ -80,6 +83,17 @@
return false;
resourceRequest = ResourceRequest(nsURLRequest);
+
+ Vector<String> responseContentDispositionEncodingFallbackArray;
+ if (!decoder.decode(responseContentDispositionEncodingFallbackArray))
+ return false;
+
+ resourceRequest.setResponseContentDispositionEncodingFallbackArray(
+ responseContentDispositionEncodingFallbackArray.size() > 0 ? responseContentDispositionEncodingFallbackArray[0] : String(),
+ responseContentDispositionEncodingFallbackArray.size() > 1 ? responseContentDispositionEncodingFallbackArray[1] : String(),
+ responseContentDispositionEncodingFallbackArray.size() > 2 ? responseContentDispositionEncodingFallbackArray[2] : String()
+ );
+
return true;
}