Changeset 149491 in webkit


Ignore:
Timestamp:
May 2, 2013 12:26:04 PM (11 years ago)
Author:
ap@apple.com
Message:

<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.
Location:
trunk/Source
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r149474 r149491  
     12013-05-02  Alexey Proskuryakov  <ap@apple.com>
     2
     3        <rdar://problem/13740375> Non-ASCII downloaded file names are garbled when using NetworkProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=115520
     5
     6        Reviewed by Darin Adler.
     7
     8        Covered by existing tests when using NetworkProcess.
     9
     10        * WebCore.exp.in:
     11        * platform/network/ResourceRequestBase.h:
     12        (WebCore::ResourceRequestBase::responseContentDispositionEncodingFallbackArray):
     13        Added a getter for encoding fallback array.
     14
     15        * platform/network/mac/ResourceRequestMac.mm:
     16        (WebCore::ResourceRequest::doUpdateResourceRequest):
     17        (WebCore::ResourceRequest::doUpdatePlatformRequest):
     18        Removed obsolete checks for presence of fallback array methods, they were available
     19        since 10.6.8.
     20
    1212013-05-01  Enrica Casucci  <enrica@apple.com>
    222
  • trunk/Source/WebCore/WebCore.exp.in

    r149464 r149491  
    644644__ZN7WebCore19ResourceRequestBase24s_defaultTimeoutIntervalE
    645645__ZN7WebCore19ResourceRequestBase25setDefaultTimeoutIntervalEd
     646__ZN7WebCore19ResourceRequestBase50setResponseContentDispositionEncodingFallbackArrayERKN3WTF6StringES4_S4_
    646647__ZN7WebCore19ResourceRequestBase6setURLERKNS_4KURLE
    647648__ZN7WebCore19TextResourceDecoder5flushEv
  • trunk/Source/WebCore/platform/network/ResourceRequestBase.h

    r148929 r149491  
    112112        void clearHTTPAccept();
    113113
     114        const Vector<String>& responseContentDispositionEncodingFallbackArray() const { return m_responseContentDispositionEncodingFallbackArray; }
    114115        void setResponseContentDispositionEncodingFallbackArray(const String& encoding1, const String& encoding2 = String(), const String& encoding3 = String());
    115116
  • trunk/Source/WebCore/platform/network/mac/ResourceRequestMac.mm

    r149255 r149491  
    101101        m_httpHeaderFields.set(name, [headers objectForKey:name]);
    102102
    103     // The below check can be removed once we require a version of Foundation with -[NSURLRequest contentDispositionEncodingFallbackArray] method.
    104     static bool supportsContentDispositionEncodingFallbackArray = [NSURLRequest instancesRespondToSelector:@selector(contentDispositionEncodingFallbackArray)];
    105     if (supportsContentDispositionEncodingFallbackArray) {
    106         m_responseContentDispositionEncodingFallbackArray.clear();
    107         NSArray *encodingFallbacks = [m_nsRequest.get() contentDispositionEncodingFallbackArray];
    108         NSUInteger count = [encodingFallbacks count];
    109         for (NSUInteger i = 0; i < count; ++i) {
    110             CFStringEncoding encoding = CFStringConvertNSStringEncodingToEncoding([(NSNumber *)[encodingFallbacks objectAtIndex:i] unsignedLongValue]);
    111             if (encoding != kCFStringEncodingInvalidId)
    112                 m_responseContentDispositionEncodingFallbackArray.append(CFStringConvertEncodingToIANACharSetName(encoding));
    113         }
     103    m_responseContentDispositionEncodingFallbackArray.clear();
     104    NSArray *encodingFallbacks = [m_nsRequest.get() contentDispositionEncodingFallbackArray];
     105    NSUInteger count = [encodingFallbacks count];
     106    for (NSUInteger i = 0; i < count; ++i) {
     107        CFStringEncoding encoding = CFStringConvertNSStringEncodingToEncoding([(NSNumber *)[encodingFallbacks objectAtIndex:i] unsignedLongValue]);
     108        if (encoding != kCFStringEncodingInvalidId)
     109            m_responseContentDispositionEncodingFallbackArray.append(CFStringConvertEncodingToIANACharSetName(encoding));
    114110    }
    115111
     
    178174        [nsRequest setValue:it->value forHTTPHeaderField:it->key];
    179175
    180     // The below check can be removed once we require a version of Foundation with -[NSMutableURLRequest setContentDispositionEncodingFallbackArray:] method.
    181     static bool supportsContentDispositionEncodingFallbackArray = [NSMutableURLRequest instancesRespondToSelector:@selector(setContentDispositionEncodingFallbackArray:)];
    182     if (supportsContentDispositionEncodingFallbackArray) {
    183         NSMutableArray *encodingFallbacks = [NSMutableArray array];
    184         unsigned count = m_responseContentDispositionEncodingFallbackArray.size();
    185         for (unsigned i = 0; i != count; ++i) {
    186             RetainPtr<CFStringRef> encodingName = m_responseContentDispositionEncodingFallbackArray[i].createCFString();
    187             unsigned long nsEncoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding(encodingName.get()));
    188 
    189             if (nsEncoding != kCFStringEncodingInvalidId)
    190                 [encodingFallbacks addObject:[NSNumber numberWithUnsignedLong:nsEncoding]];
    191         }
    192         [nsRequest setContentDispositionEncodingFallbackArray:encodingFallbacks];
    193     }
     176    NSMutableArray *encodingFallbacks = [NSMutableArray array];
     177    unsigned count = m_responseContentDispositionEncodingFallbackArray.size();
     178    for (unsigned i = 0; i != count; ++i) {
     179        RetainPtr<CFStringRef> encodingName = m_responseContentDispositionEncodingFallbackArray[i].createCFString();
     180        unsigned long nsEncoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding(encodingName.get()));
     181
     182        if (nsEncoding != kCFStringEncodingInvalidId)
     183            [encodingFallbacks addObject:[NSNumber numberWithUnsignedLong:nsEncoding]];
     184    }
     185    [nsRequest setContentDispositionEncodingFallbackArray:encodingFallbacks];
    194186
    195187#if ENABLE(CACHE_PARTITIONING)
  • trunk/Source/WebKit2/ChangeLog

    r149488 r149491  
     12013-05-02  Alexey Proskuryakov  <ap@apple.com>
     2
     3        <rdar://problem/13740375> Non-ASCII downloaded file names are garbled when using NetworkProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=115520
     5
     6        Reviewed by Darin Adler.
     7
     8        * Shared/mac/WebCoreArgumentCodersMac.mm:
     9        (CoreIPC::::encodePlatformData):
     10        (CoreIPC::::decodePlatformData):
     11        Send the encoding fallback array over IPC, so that it's present when NetworkProcess does its loading.
     12
    1132013-05-01  Alexey Proskuryakov  <ap@apple.com>
    214
  • trunk/Source/WebKit2/Shared/mac/WebCoreArgumentCodersMac.mm

    r149255 r149491  
    5959    RetainPtr<CFDictionaryRef> dictionary = adoptCF(WKNSURLRequestCreateSerializableRepresentation(requestToSerialize.get(), CoreIPC::tokenNullTypeRef()));
    6060    CoreIPC::encode(encoder, dictionary.get());
     61
     62    // The fallback array is part of NSURLRequest, but it is not encoded by WKNSURLRequestCreateSerializableRepresentation.
     63    encoder << resourceRequest.responseContentDispositionEncodingFallbackArray();
    6164}
    6265
     
    8184
    8285    resourceRequest = ResourceRequest(nsURLRequest);
     86   
     87    Vector<String> responseContentDispositionEncodingFallbackArray;
     88    if (!decoder.decode(responseContentDispositionEncodingFallbackArray))
     89        return false;
     90
     91    resourceRequest.setResponseContentDispositionEncodingFallbackArray(
     92        responseContentDispositionEncodingFallbackArray.size() > 0 ? responseContentDispositionEncodingFallbackArray[0] : String(),
     93        responseContentDispositionEncodingFallbackArray.size() > 1 ? responseContentDispositionEncodingFallbackArray[1] : String(),
     94        responseContentDispositionEncodingFallbackArray.size() > 2 ? responseContentDispositionEncodingFallbackArray[2] : String()
     95    );
     96
    8397    return true;
    8498}
Note: See TracChangeset for help on using the changeset viewer.