Changeset 155633 in webkit
- Timestamp:
- Sep 12, 2013 11:26:17 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r155631 r155633 1 2013-09-12 Peter Gal <galpeter@inf.u-szeged.hu> 2 3 [curl] Improve multipart response handling 4 https://bugs.webkit.org/show_bug.cgi?id=117735 5 6 Reviewed by Brent Fulgham. 7 8 The multipart/x-mixed-replace mime type in responses are ignored 9 with the curl network backend. To handle such responses the 10 MultipartHandle is introduced which will split the content using 11 the boundary specified by the mime type. 12 13 There are already existing tests (http/tests/multipart). 14 15 * WebCore.vcxproj/WebCore.vcxproj: 16 * WebCore.vcxproj/WebCore.vcxproj.filters: 17 * platform/network/HTTPParsers.cpp: 18 (WebCore::parseHTTPHeader): 19 * platform/network/HTTPParsers.h: 20 * platform/network/ResourceHandleInternal.h: 21 * platform/network/curl/MultipartHandle.cpp: Added. 22 (WebCore::MultipartHandle::extractBoundary): 23 (WebCore::MultipartHandle::matchForBoundary): 24 (WebCore::MultipartHandle::checkForBoundary): 25 (WebCore::MultipartHandle::parseHeadersIfPossible): 26 (WebCore::MultipartHandle::contentReceived): 27 (WebCore::MultipartHandle::processContent): 28 (WebCore::MultipartHandle::contentEnded): 29 (WebCore::MultipartHandle::didReceiveData): 30 (WebCore::MultipartHandle::didReceiveResponse): 31 * platform/network/curl/MultipartHandle.h: Added. 32 (WebCore::MultipartHandle::MultipartHandle): 33 (WebCore::MultipartHandle::~MultipartHandle): 34 * platform/network/curl/ResourceHandleManager.cpp: 35 (WebCore::writeCallback): 36 (WebCore::headerCallback): 37 (WebCore::ResourceHandleManager::downloadTimerCallback): 38 1 39 2013-09-12 Andreas Kling <akling@apple.com> 2 40 -
trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj
r155631 r155633 8310 8310 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|Win32'">true</ExcludedFromBuild> 8311 8311 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|x64'">true</ExcludedFromBuild> 8312 </ClCompile> 8313 <ClCompile Include="..\platform\network\curl\MultipartHandle.cpp"> 8314 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> 8315 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugSuffix|Win32'">true</ExcludedFromBuild> 8316 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> 8317 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|Win32'">true</ExcludedFromBuild> 8312 8318 </ClCompile> 8313 8319 <ClCompile Include="..\platform\network\curl\ProxyServerCurl.cpp"> … … 19679 19685 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|Win32'">true</ExcludedFromBuild> 19680 19686 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|x64'">true</ExcludedFromBuild> 19687 </CustomBuildStep> 19688 <CustomBuildStep Include="..\platform\network\curl\MultipartHandle.h"> 19689 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> 19690 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugSuffix|Win32'">true</ExcludedFromBuild> 19691 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> 19692 <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Production|Win32'">true</ExcludedFromBuild> 19681 19693 </CustomBuildStep> 19682 19694 <CustomBuildStep Include="..\platform\network\curl\ResourceError.h"> -
trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters
r155631 r155633 1969 1969 <Filter>platform\network\curl</Filter> 1970 1970 </ClCompile> 1971 <ClCompile Include="..\platform\network\curl\MultipartHandle.cpp"> 1972 <Filter>platform\network\curl</Filter> 1973 </ClCompile> 1971 1974 <ClCompile Include="..\platform\network\curl\ProxyServerCurl.cpp"> 1972 1975 <Filter>platform\network\curl</Filter> … … 15796 15799 <Filter>platform\network\curl</Filter> 15797 15800 </CustomBuildStep> 15801 <CustomBuildStep Include="..\platform\network\curl\MultipartHandle.h"> 15802 <Filter>platform\network\curl</Filter> 15803 </CustomBuildStep> 15798 15804 <CustomBuildStep Include="..\platform\network\curl\ResourceError.h"> 15799 15805 <Filter>platform\network\curl</Filter> -
trunk/Source/WebCore/platform/network/HTTPParsers.cpp
r147086 r155633 606 606 } 607 607 608 size_t parseHTTPHeader(const char* start, size_t length, String& failureReason, AtomicString& nameStr, String& valueStr )608 size_t parseHTTPHeader(const char* start, size_t length, String& failureReason, AtomicString& nameStr, String& valueStr, bool strict) 609 609 { 610 610 const char* p = start; … … 649 649 break; 650 650 case '\n': 651 failureReason = "Unexpected LF in value at " + trimInputSample(value.data(), value.size()); 652 return 0; 651 if (strict) { 652 failureReason = "Unexpected LF in value at " + trimInputSample(value.data(), value.size()); 653 return 0; 654 } 655 break; 653 656 default: 654 657 value.append(*p); 655 658 } 656 if (*p == '\r' ) {659 if (*p == '\r' || (!strict && *p == '\n')) { 657 660 ++p; 658 661 break; 659 662 } 660 663 } 661 if (p >= end || *p != '\n') {664 if (p >= end || (strict && *p != '\n')) { 662 665 failureReason = "CR doesn't follow LF after value at " + trimInputSample(p, end - p); 663 666 return 0; -
trunk/Source/WebCore/platform/network/HTTPParsers.h
r153039 r155633 87 87 enum HTTPVersion { Unknown, HTTP_1_0, HTTP_1_1 }; 88 88 size_t parseHTTPRequestLine(const char* data, size_t length, String& failureReason, String& method, String& url, HTTPVersion&); 89 size_t parseHTTPHeader(const char* data, size_t length, String& failureReason, AtomicString& nameStr, String& valueStr );89 size_t parseHTTPHeader(const char* data, size_t length, String& failureReason, AtomicString& nameStr, String& valueStr, bool strict = true); 90 90 size_t parseHTTPRequestBody(const char* data, size_t length, Vector<unsigned char>& body); 91 91 -
trunk/Source/WebCore/platform/network/ResourceHandleInternal.h
r152908 r155633 45 45 #include <curl/curl.h> 46 46 #include "FormDataStreamCurl.h" 47 #include "MultipartHandle.h" 47 48 #endif 48 49 … … 191 192 FormDataStream m_formDataStream; 192 193 Vector<char> m_postBytes; 194 195 OwnPtr<MultipartHandle> m_multipartHandle; 193 196 #endif 194 197 #if USE(SOUP) -
trunk/Source/WebCore/platform/network/curl/ResourceHandleManager.cpp
r154386 r155633 40 40 #include "HTTPParsers.h" 41 41 #include "MIMETypeRegistry.h" 42 #include "MultipartHandle.h" 42 43 #include "NotImplemented.h" 43 44 #include "ResourceError.h" … … 241 242 } 242 243 243 if (d->client()) 244 if (d->m_multipartHandle) 245 d->m_multipartHandle->contentReceived(static_cast<const char*>(ptr), totalSize); 246 else if (d->client()) 244 247 d->client()->didReceiveData(job, static_cast<char*>(ptr), totalSize, 0); 248 245 249 return totalSize; 246 250 } … … 397 401 d->m_response.setSuggestedFilename(filenameFromHTTPContentDisposition(d->m_response.httpHeaderField("Content-Disposition"))); 398 402 403 if (d->m_response.isMultipart()) { 404 String boundary; 405 bool parsed = MultipartHandle::extractBoundary(d->m_response.httpHeaderField("Content-Type"), boundary); 406 if (parsed) 407 d->m_multipartHandle = MultipartHandle::create(job, boundary); 408 } 409 399 410 // HTTP redirection 400 411 if (isHttpRedirect(httpCode)) { … … 566 577 } 567 578 } 579 580 if (d->m_multipartHandle) 581 d->m_multipartHandle->contentEnded(); 568 582 569 583 if (d->client())
Note: See TracChangeset
for help on using the changeset viewer.