From c3be3f413388c44a4d81e978dd54398e84684b00 Mon Sep 17 00:00:00 2001 From: aroben Date: Tue, 14 Nov 2006 18:06:07 +0000 Subject: [PATCH] 2006-11-14 Darin Adler Reviewed by Adam. Fix up usages of FormData within CFNet loader code. * platform/network/ResourceRequest.h: (WebCore::ResourceRequest::httpBody): * platform/network/cf/FormDataStreamCFNet.cpp: (WebCore::getStreamFormDatas): Store RefPtrs in the streamFormDatas HashMap. (WebCore::formCreate): (WebCore::formFinalize): Removed delete because the remove() will deref and delete if necessary. (WebCore::setHTTPBody): Changed parameter to PassRefPtr. (WebCore::httpBodyFromStream): * platform/network/cf/FormDataStreamCFNet.h: Fix declarations. * platform/network/cf/ResourceRequestCFNet.cpp: (WebCore::getResourceRequest): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@17759 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- WebCore/ChangeLog | 20 +++++++++++++ WebCore/platform/network/ResourceRequest.h | 3 +- .../network/cf/FormDataStreamCFNet.cpp | 28 ++++++++----------- .../platform/network/cf/FormDataStreamCFNet.h | 5 ++-- .../network/cf/ResourceRequestCFNet.cpp | 6 ++-- 5 files changed, 39 insertions(+), 23 deletions(-) diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog index d72300872ad6..418d0cd6e569 100644 --- a/WebCore/ChangeLog +++ b/WebCore/ChangeLog @@ -1,3 +1,23 @@ +2006-11-14 Darin Adler + + Reviewed by Adam. + + Fix up usages of FormData within CFNet loader code. + + * platform/network/ResourceRequest.h: + (WebCore::ResourceRequest::httpBody): + * platform/network/cf/FormDataStreamCFNet.cpp: + (WebCore::getStreamFormDatas): Store RefPtrs in the + streamFormDatas HashMap. + (WebCore::formCreate): + (WebCore::formFinalize): Removed delete because the remove() will deref + and delete if necessary. + (WebCore::setHTTPBody): Changed parameter to PassRefPtr. + (WebCore::httpBodyFromStream): + * platform/network/cf/FormDataStreamCFNet.h: Fix declarations. + * platform/network/cf/ResourceRequestCFNet.cpp: + (WebCore::getResourceRequest): + 2006-11-14 Greg Jackson Reviewed by Darin. diff --git a/WebCore/platform/network/ResourceRequest.h b/WebCore/platform/network/ResourceRequest.h index e56be596a9bf..717bdc507c9d 100644 --- a/WebCore/platform/network/ResourceRequest.h +++ b/WebCore/platform/network/ResourceRequest.h @@ -114,8 +114,7 @@ namespace WebCore { String httpAccept() const { return httpHeaderField("Accept"); } void setHTTPAccept(const String& httpUserAgent) { setHTTPHeaderField("Accept", httpUserAgent); } - const PassRefPtr httpBody() const { return m_httpBody; } - PassRefPtr httpBody() { return m_httpBody; } + FormData* httpBody() const { return m_httpBody.get(); } void setHTTPBody(PassRefPtr httpBody) { m_httpBody = httpBody; } bool allowHTTPCookies() const { return m_allowHTTPCookies; } diff --git a/WebCore/platform/network/cf/FormDataStreamCFNet.cpp b/WebCore/platform/network/cf/FormDataStreamCFNet.cpp index cdc5e049fea7..5fbd1aee2ab4 100644 --- a/WebCore/platform/network/cf/FormDataStreamCFNet.cpp +++ b/WebCore/platform/network/cf/FormDataStreamCFNet.cpp @@ -44,12 +44,9 @@ namespace WebCore { -static HashMap* streamFormDatas = 0; - -static HashMap* getStreamFormDatas() +static HashMap >& getStreamFormDatas() { - if (!streamFormDatas) - streamFormDatas = new HashMap(); + static HashMap > streamFormDatas; return streamFormDatas; } @@ -169,7 +166,7 @@ static void openNextStream(FormStreamFields* form) static void* formCreate(CFReadStreamRef stream, void* context) { - const FormData* formData = static_cast(context); + FormData* formData = static_cast(context); CFSetCallBacks runLoopAndModeCallBacks = { 0, pairRetain, pairRelease, NULL, pairEqual, pairHash }; @@ -185,7 +182,7 @@ static void* formCreate(CFReadStreamRef stream, void* context) for (size_t i = 0; i < size; ++i) newInfo->remainingElements.append(formData->elements()[size - i - 1]); - getStreamFormDatas()->set(stream, new FormData(*formData)); + getStreamFormDatas().set(stream, adoptRef(formData)); return newInfo; } @@ -194,8 +191,7 @@ static void formFinalize(CFReadStreamRef stream, void* context) { FormStreamFields* form = static_cast(context); - delete getStreamFormDatas()->get(stream); - getStreamFormDatas()->remove(stream); + getStreamFormDatas().remove(stream); closeCurrentStream(form); CFRelease(form->scheduledRunLoopPairs); @@ -307,16 +303,16 @@ static void formEventCallback(CFReadStreamRef stream, CFStreamEventType type, vo } } -void setHTTPBody(CFMutableURLRequestRef request, const FormData& formData) +void setHTTPBody(CFMutableURLRequestRef request, PassRefPtr formData) { - size_t count = formData.elements().size(); + size_t count = formData->elements().size(); if (count == 0) return; // Handle the common special case of one piece of form data, with no files. if (count == 1) { - const FormDataElement& element = formData.elements()[0]; + const FormDataElement& element = formData->elements()[0]; if (element.m_type == FormDataElement::data) { CFDataRef data = CFDataCreate(0, reinterpret_cast(element.m_data.data()), element.m_data.size()); CFURLRequestSetHTTPRequestBody(request, data); @@ -329,7 +325,7 @@ void setHTTPBody(CFMutableURLRequestRef request, const FormData& formData) bool haveLength = true; long long length = 0; for (size_t i = 0; i < count; ++i) { - const FormDataElement& element = formData.elements()[i]; + const FormDataElement& element = formData->elements()[i]; if (element.m_type == FormDataElement::data) length += element.m_data.size(); else { @@ -351,15 +347,15 @@ void setHTTPBody(CFMutableURLRequestRef request, const FormData& formData) static CFReadStreamCallBacks formDataStreamCallbacks = { 1, formCreate, formFinalize, 0, formOpen, 0, formRead, 0, formCanRead, formClose, 0, 0, 0, formSchedule, formUnschedule}; - CFReadStreamRef stream = CFReadStreamCreate(0, &formDataStreamCallbacks, const_cast(&formData)); + CFReadStreamRef stream = CFReadStreamCreate(0, &formDataStreamCallbacks, formData.releaseRef()); CFURLRequestSetHTTPRequestBodyStream(request, stream); CFRelease(stream); } -const FormData* httpBodyFromStream(CFReadStreamRef stream) +FormData* httpBodyFromStream(CFReadStreamRef stream) { - return getStreamFormDatas()->get(stream); + return getStreamFormDatas().get(stream).get(); } } diff --git a/WebCore/platform/network/cf/FormDataStreamCFNet.h b/WebCore/platform/network/cf/FormDataStreamCFNet.h index ae3c4f1b778a..aa8b0ad924d5 100644 --- a/WebCore/platform/network/cf/FormDataStreamCFNet.h +++ b/WebCore/platform/network/cf/FormDataStreamCFNet.h @@ -30,13 +30,14 @@ #define FormDataStreamCFNet_h_ #include +#include typedef struct _CFURLRequest* CFMutableURLRequestRef; namespace WebCore { class FormData; - void setHTTPBody(CFMutableURLRequestRef, const FormData&); - const FormData* httpBodyFromStream(CFReadStreamRef); + void setHTTPBody(CFMutableURLRequestRef, PassRefPtr); + FormData* httpBodyFromStream(CFReadStreamRef); } #endif FormDataStreamCFNet_h_ diff --git a/WebCore/platform/network/cf/ResourceRequestCFNet.cpp b/WebCore/platform/network/cf/ResourceRequestCFNet.cpp index 60d4f90b8fc8..08eeb926a78e 100644 --- a/WebCore/platform/network/cf/ResourceRequestCFNet.cpp +++ b/WebCore/platform/network/cf/ResourceRequestCFNet.cpp @@ -59,11 +59,11 @@ namespace WebCore { if (CFDataRef bodyData = CFURLRequestCopyHTTPRequestBody(cfRequest)) { - request.setHTTPBody(FormData(CFDataGetBytePtr(bodyData), CFDataGetLength(bodyData))); + request.setHTTPBody(new FormData(CFDataGetBytePtr(bodyData), CFDataGetLength(bodyData))); CFRelease(bodyData); } else if (CFReadStreamRef bodyStream = CFURLRequestCopyHTTPRequestBodyStream(cfRequest)) { - if (const FormData* formData = httpBodyFromStream(bodyStream)) - request.setHTTPBody(*formData); + if (FormData* formData = httpBodyFromStream(bodyStream)) + request.setHTTPBody(formData); CFRelease(bodyStream); } // FIXME: what to do about arbitrary body streams? -- 2.36.0