Changeset 17408 in webkit


Ignore:
Timestamp:
Oct 29, 2006 1:47:23 AM (18 years ago)
Author:
darin
Message:

WebCore:

Reviewed by Maciej.

  • eliminate use of NSArray to carry form data around
  • WebCore.exp:
  • WebCore.xcodeproj/project.pbxproj:
  • bridge/mac/FormDataMac.h: Removed.
  • bridge/mac/FormDataMac.mm: Removed.
  • bridge/mac/FrameMac.h:
  • bridge/mac/WebCoreFrameBridge.h:
  • bridge/mac/WebCoreFrameBridge.mm:
  • html/HTMLFormElement.cpp: (WebCore::HTMLFormElement::submit):
  • loader/FormData.h: (WebCore::FormData::isEmpty):
  • loader/mac/FrameLoader.h:
  • loader/mac/FrameLoader.mm: (WebCore::FrameLoader::load): (WebCore::FrameLoader::post): (WebCore::FrameLoader::loadEmptyDocumentSynchronously): (WebCore::FrameLoader::loadResourceSynchronously):
  • loader/mac/LoaderFunctionsMac.mm: (WebCore::ServeSynchronousRequest):
  • loader/mac/WebFormDataStream.h:
  • loader/mac/WebFormDataStream.m: (WebCore::pairRetain): (WebCore::pairRelease): (WebCore::pairEqual): (WebCore::pairHash): (WebCore::closeCurrentStream): (WebCore::scheduleWithPair): (WebCore::advanceCurrentStream): (WebCore::openNextStream): (WebCore::formCreate): (WebCore::formFinalize): (WebCore::formOpen): (WebCore::formRead): (WebCore::formCanRead): (WebCore::formClose): (WebCore::formSchedule): (WebCore::formUnschedule): (WebCore::formEventCallback): (WebCore::setHTTPBody):
  • loader/mac/WebSubresourceLoader.h:
  • loader/mac/WebSubresourceLoader.mm: (WebCore::SubresourceLoader::create):
  • platform/network/mac/ResourceLoaderMac.mm:

WebKit:

Reviewed by Maciej.

  • eliminate use of NSArray to carry form data around (the code in this framework was actually using the NSArray to hold a single

NSData anyway, so I just went back to an NSData for now)

  • History/WebHistoryItem.m: (-[WebHistoryItem _setFormInfoFromRequest:]): (-[WebHistoryItem formData]):
  • History/WebHistoryItemPrivate.h:
  • WebCoreSupport/WebFrameLoaderClient.mm: (WebFrameLoaderClient::dispatchWillSubmitForm):
  • WebView/WebFrame.mm: (-[WebFrame _loadItem:withLoadType:]):
Location:
trunk
Files:
2 deleted
21 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r17407 r17408  
     1t2006-10-29  Darin Adler  <darin@apple.com>
     2
     3        Reviewed by Maciej.
     4
     5        - eliminate use of NSArray to carry form data around
     6
     7        * WebCore.exp:
     8        * WebCore.xcodeproj/project.pbxproj:
     9        * bridge/mac/FormDataMac.h: Removed.
     10        * bridge/mac/FormDataMac.mm: Removed.
     11        * bridge/mac/FrameMac.h:
     12        * bridge/mac/WebCoreFrameBridge.h:
     13        * bridge/mac/WebCoreFrameBridge.mm:
     14        * html/HTMLFormElement.cpp:
     15        (WebCore::HTMLFormElement::submit):
     16        * loader/FormData.h:
     17        (WebCore::FormData::isEmpty):
     18        * loader/mac/FrameLoader.h:
     19        * loader/mac/FrameLoader.mm:
     20        (WebCore::FrameLoader::load):
     21        (WebCore::FrameLoader::post):
     22        (WebCore::FrameLoader::loadEmptyDocumentSynchronously):
     23        (WebCore::FrameLoader::loadResourceSynchronously):
     24        * loader/mac/LoaderFunctionsMac.mm:
     25        (WebCore::ServeSynchronousRequest):
     26        * loader/mac/WebFormDataStream.h:
     27        * loader/mac/WebFormDataStream.m:
     28        (WebCore::pairRetain):
     29        (WebCore::pairRelease):
     30        (WebCore::pairEqual):
     31        (WebCore::pairHash):
     32        (WebCore::closeCurrentStream):
     33        (WebCore::scheduleWithPair):
     34        (WebCore::advanceCurrentStream):
     35        (WebCore::openNextStream):
     36        (WebCore::formCreate):
     37        (WebCore::formFinalize):
     38        (WebCore::formOpen):
     39        (WebCore::formRead):
     40        (WebCore::formCanRead):
     41        (WebCore::formClose):
     42        (WebCore::formSchedule):
     43        (WebCore::formUnschedule):
     44        (WebCore::formEventCallback):
     45        (WebCore::setHTTPBody):
     46        * loader/mac/WebSubresourceLoader.h:
     47        * loader/mac/WebSubresourceLoader.mm:
     48        (WebCore::SubresourceLoader::create):
     49        * platform/network/mac/ResourceLoaderMac.mm:
     50
    1512006-10-29  Maciej Stachowiak  <mjs@apple.com>
    252
  • trunk/WebCore/WebCore.exp

    r17405 r17408  
    302302_urlWithData
    303303_urlWithDataRelativeToURL
    304 _webSetHTTPBody
    305304_wkCGContextGetShouldSmoothFonts
    306305_wkClearGlyphVector
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r17406 r17408  
    15611561                93F199ED08245E59001E9ABC /* XSLTProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC06F24C06D18A7E004A6FA3 /* XSLTProcessor.h */; };
    15621562                93F199EE08245E59001E9ABC /* FormData.h in Headers */ = {isa = PBXBuildFile; fileRef = 93ABCE5E06E1A42E0085925B /* FormData.h */; settings = {ATTRIBUTES = (Private, ); }; };
    1563                 93F199EF08245E59001E9ABC /* FormDataMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 93B641F206E28C5C0055F610 /* FormDataMac.h */; };
    15641563                93F199F008245E59001E9ABC /* WebCoreView.h in Headers */ = {isa = PBXBuildFile; fileRef = BE855F7F0701E83500239769 /* WebCoreView.h */; settings = {ATTRIBUTES = (Private, ); }; };
    15651564                93F199F108245E59001E9ABC /* WebDashboardRegion.h in Headers */ = {isa = PBXBuildFile; fileRef = 5150C2A10702629000AF642C /* WebDashboardRegion.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    16031602                93F19B0408245E59001E9ABC /* XSLTProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC06F24B06D18A7E004A6FA3 /* XSLTProcessor.cpp */; };
    16041603                93F19B0508245E59001E9ABC /* FormData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93ABCE5D06E1A42E0085925B /* FormData.cpp */; };
    1605                 93F19B0608245E59001E9ABC /* FormDataMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 93B641F106E28C5C0055F610 /* FormDataMac.mm */; };
    16061604                93F19B0708245E59001E9ABC /* WebCoreView.m in Sources */ = {isa = PBXBuildFile; fileRef = BE8560510701F91100239769 /* WebCoreView.m */; };
    16071605                93F19B0808245E59001E9ABC /* WebDashboardRegion.m in Sources */ = {isa = PBXBuildFile; fileRef = 5150C2A50702629800AF642C /* WebDashboardRegion.m */; };
     
    32453243                656D371F0ADBA5DE00A4554D /* WebDocumentLoader.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = WebDocumentLoader.mm; sourceTree = "<group>"; };
    32463244                656D37200ADBA5DE00A4554D /* WebFormDataStream.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WebFormDataStream.h; sourceTree = "<group>"; };
    3247                 656D37210ADBA5DE00A4554D /* WebFormDataStream.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = WebFormDataStream.m; sourceTree = "<group>"; };
     3245                656D37210ADBA5DE00A4554D /* WebFormDataStream.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = WebFormDataStream.m; sourceTree = "<group>"; };
    32483246                656D37220ADBA5DE00A4554D /* WebFormState.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WebFormState.h; sourceTree = "<group>"; };
    32493247                656D37230ADBA5DE00A4554D /* WebFormState.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 30; path = WebFormState.mm; sourceTree = "<group>"; };
     
    43374335                93B0FD880A759BED0080AD44 /* StringImplMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = StringImplMac.mm; sourceTree = "<group>"; };
    43384336                93B0FD890A759BED0080AD44 /* StringMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = StringMac.mm; sourceTree = "<group>"; };
    4339                 93B641F106E28C5C0055F610 /* FormDataMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FormDataMac.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
    4340                 93B641F206E28C5C0055F610 /* FormDataMac.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = FormDataMac.h; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; };
    43414337                93B70D4109EB0C7C009D8468 /* JSXMLHttpRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSXMLHttpRequest.cpp; sourceTree = "<group>"; };
    43424338                93B70D4209EB0C7C009D8468 /* JSXMLHttpRequest.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSXMLHttpRequest.h; sourceTree = "<group>"; };
     
    64856481                                BCEA4945097F0F770094C9E4 /* BrowserExtensionMac.h */,
    64866482                                BCEA4946097F0F770094C9E4 /* BrowserExtensionMac.mm */,
    6487                                 93B641F206E28C5C0055F610 /* FormDataMac.h */,
    6488                                 93B641F106E28C5C0055F610 /* FormDataMac.mm */,
    64896483                                65BF023B0974819000C43196 /* FrameMac.h */,
    64906484                                65BF023C0974819000C43196 /* FrameMac.mm */,
     
    91059099                                93F199ED08245E59001E9ABC /* XSLTProcessor.h in Headers */,
    91069100                                93F199EE08245E59001E9ABC /* FormData.h in Headers */,
    9107                                 93F199EF08245E59001E9ABC /* FormDataMac.h in Headers */,
    91089101                                93F199F008245E59001E9ABC /* WebCoreView.h in Headers */,
    91099102                                93F199F108245E59001E9ABC /* WebDashboardRegion.h in Headers */,
     
    1063710630                                93F19B0408245E59001E9ABC /* XSLTProcessor.cpp in Sources */,
    1063810631                                93F19B0508245E59001E9ABC /* FormData.cpp in Sources */,
    10639                                 93F19B0608245E59001E9ABC /* FormDataMac.mm in Sources */,
    1064010632                                93F19B0708245E59001E9ABC /* WebCoreView.m in Sources */,
    1064110633                                93F19B0808245E59001E9ABC /* WebDashboardRegion.m in Sources */,
  • trunk/WebCore/bridge/mac/FrameMac.h

    r17405 r17408  
    122122        const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType);
    123123
    124     void clear(bool clearWindowProperties = true);
     124    virtual void clear(bool clearWindowProperties = true);
    125125
    126126    void setBridge(WebCoreFrameBridge* p);
    127127    WebCoreFrameBridge* bridge() const { return _bridge; }
     128
    128129    virtual void setView(FrameView*);
    129130    virtual void frameDetached();
     
    226227    bool passWheelEventToWidget(Widget*);
    227228   
    228     NSString* searchForLabelsAboveCell(RegularExpression* regExp, HTMLTableCellElement* cell);
     229    NSString* searchForLabelsAboveCell(RegularExpression*, HTMLTableCellElement*);
    229230    NSString* searchForLabelsBeforeElement(NSArray* labels, Element* element);
    230231    NSString* matchLabelsAgainstElement(NSArray* labels, Element* element);
  • trunk/WebCore/bridge/mac/WebCoreFrameBridge.h

    r17406 r17408  
    395395- (void)frameDetached;
    396396- (void)receivedData:(NSData *)data textEncodingName:(NSString *)textEncodingName;
    397 - (NSData *)syncLoadResourceWithMethod:(NSString *)method URL:(NSURL *)URL customHeaders:(NSDictionary *)requestHeaders postData:(NSArray *)postData finalURL:(NSURL **)finalNSURL responseHeaders:(NSDictionary **)responseHeaderDict statusCode:(int *)statusCode;
    398397
    399398@end
  • trunk/WebCore/bridge/mac/WebCoreFrameBridge.mm

    r17405 r17408  
    20702070}
    20712071
    2072 - (NSData *)syncLoadResourceWithMethod:(NSString *)method URL:(NSURL *)URL customHeaders:(NSDictionary *)requestHeaders postData:(NSArray *)postData finalURL:(NSURL **)finalURL responseHeaders:(NSDictionary **)responseHeaderDict statusCode:(int *)statusCode
    2073 {
    2074     // Since this is a subresource, we can load any URL (we ignore the return value).
    2075     // But we still want to know whether we should hide the referrer or not, so we call the canLoadURL method.
    2076     String referrer = m_frame->referrer();
    2077     bool hideReferrer;
    2078     m_frame->loader()->canLoad(URL, referrer, hideReferrer);
    2079     if (hideReferrer)
    2080         referrer = String();
    2081    
    2082     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL];
    2083     [request setTimeoutInterval:10];
    2084    
    2085     // setHTTPMethod is not called for GET requests to work around <rdar://4464032>.
    2086     if (![method isEqualToString:@"GET"])
    2087         [request setHTTPMethod:method];
    2088    
    2089     if (postData)       
    2090         webSetHTTPBody(request, postData);
    2091    
    2092     NSEnumerator *e = [requestHeaders keyEnumerator];
    2093     NSString *key;
    2094     while ((key = (NSString *)[e nextObject]) != nil) {
    2095         [request addValue:[requestHeaders objectForKey:key] forHTTPHeaderField:key];
    2096     }
    2097    
    2098     if (isConditionalRequest(request))
    2099         [request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
    2100     else
    2101         [request setCachePolicy:[m_frame->loader()->documentLoader()->request() cachePolicy]];
    2102    
    2103     if (!referrer.isNull())
    2104         setHTTPReferrer(request, referrer);
    2105    
    2106     [request setMainDocumentURL:[m_frame->page()->mainFrame()->loader()->documentLoader()->request() URL]];
    2107     [request setValue:m_frame->loader()->client()->userAgent([request URL]) forHTTPHeaderField:@"User-Agent"];
    2108    
    2109     NSError *error = nil;
    2110     id identifier = nil;   
    2111     NSURLRequest *newRequest = m_frame->loader()->requestFromDelegate(request, identifier, error);
    2112    
    2113     NSURLResponse *response = nil;
    2114     NSData *result = nil;
    2115     if (error == nil) {
    2116         ASSERT(newRequest != nil);
    2117         result = [NSURLConnection sendSynchronousRequest:newRequest returningResponse:&response error:&error];
    2118     }
    2119    
    2120     if (error == nil) {
    2121         *finalURL = [response URL];
    2122         if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
    2123             NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
    2124             *responseHeaderDict = [httpResponse allHeaderFields];
    2125             *statusCode = [httpResponse statusCode];
    2126         } else {
    2127             *responseHeaderDict = [NSDictionary dictionary];
    2128             *statusCode = 200;
    2129         }
    2130     } else {
    2131         *finalURL = URL;
    2132         *responseHeaderDict = [NSDictionary dictionary];
    2133         if ([error domain] == NSURLErrorDomain)
    2134             *statusCode = [error code];
    2135         else
    2136             *statusCode = 404;
    2137     }
    2138    
    2139     m_frame->loader()->sendRemainingDelegateMessages(identifier, response, [result length], error);
    2140     [request release];
    2141    
    2142     return result;
    2143 }
    2144 
    21452072// -------------------
    21462073
  • trunk/WebCore/html/HTMLFormElement.cpp

    r17346 r17408  
    326326}
    327327
    328 void HTMLFormElement::submit( bool activateSubmitButton )
     328void HTMLFormElement::submit(bool activateSubmitButton)
    329329{
    330330    FrameView *view = document()->view();
     
    346346    for (unsigned i = 0; i < formElements.size(); ++i) {
    347347        HTMLGenericFormElement* current = formElements[i];
    348         // Our app needs to get form values for password fields for doing password autocomplete,
    349         // so we are more lenient in pushing values, and let the app decide what to save when.
    350348        if (current->hasLocalName(inputTag)) {
    351             HTMLInputElement *input = static_cast<HTMLInputElement*>(current);
     349            HTMLInputElement* input = static_cast<HTMLInputElement*>(current);
    352350            if (input->isTextField()) {
    353                 frame->recordFormValue(input->name().deprecatedString(), input->value().deprecatedString(), this);
     351                frame->recordFormValue(input->name(), input->value(), this);
    354352                if (input->renderer() && input->inputType() == HTMLInputElement::SEARCH)
    355353                    static_cast<RenderLineEdit*>(input->renderer())->addSearchResult();
    356354            }
    357355        }
    358 
    359356        if (needButtonActivation) {
    360357            if (current->isActivatedSubmit())
  • trunk/WebCore/loader/FormData.h

    r17263 r17408  
    5050    String flattenToString() const; // omits files
    5151
     52    bool isEmpty() const { return m_elements.isEmpty(); }
    5253    const Vector<FormDataElement>& elements() const { return m_elements; }
    5354
  • trunk/WebCore/loader/mac/FrameLoader.h

    r17406 r17408  
    4242#ifdef __OBJC__
    4343
    44 @class WebCoreFrameBridge;
    4544@class WebCorePageState;
    4645
    47 @class NSArray;
     46@class NSData;
    4847@class NSDate;
     48@class NSDictionary;
     49@class NSError;
     50@class NSEvent;
     51@class NSMutableURLRequest;
    4952@class NSURL;
     53@class NSURLAuthenticationChallenge;
    5054@class NSURLConnection;
    5155@class NSURLRequest;
    5256@class NSURLResponse;
    53 @class NSDictionary;
    54 @class NSEvent;
    55 @class NSError;
    56 @class NSData;
    57 @class NSMutableURLRequest;
    58 @class NSURLAuthenticationChallenge;
    5957
    6058@protocol WebCoreResourceLoader;
     
    6361#else
    6462
    65 class WebCoreFrameBridge;
    6663class WebCorePageState;
    6764
    68 class NSArray;
     65class NSData;
    6966class NSDate;
     67class NSDictionary;
     68class NSError;
     69class NSEvent;
     70class NSMutableURLRequest;
    7071class NSURL;
     72class NSURLAuthenticationChallenge;
    7173class NSURLConnection;
    7274class NSURLRequest;
    7375class NSURLResponse;
    74 class NSDictionary;
    75 class NSEvent;
    76 class NSError;
    77 class NSData;
    78 class NSMutableURLRequest;
    79 class NSURLAuthenticationChallenge;
    8076
    8177#endif // __OBJC__
     
    8783    class DocumentLoader;
    8884    class Element;
     85    class FormData;
    8986    class FormState;
    9087    class Frame;
    9188    class FrameLoadRequest;
    9289    class FrameLoaderClient;
     90    class KURL;
    9391    class MainResourceLoader;
     92    class ResourceRequest;
    9493    class String;
    9594    class SubresourceLoader;
     
    148147        void load(const FrameLoadRequest&, bool userGesture, NSEvent* triggeringEvent,
    149148            Element* submitForm, const HashMap<String, String>& formValues);
    150         void load(NSURL *, const String& referrer, FrameLoadType, const String& target, NSEvent *event,
    151             Element* form, const HashMap<String, String>& formValues);
    152         void post(NSURL *, const String& referrer, const String& target, NSArray *postData, const String& contentType, NSEvent *,
    153             Element* form, const HashMap<String, String>&);
     149        void load(NSURL *, const String& referrer, FrameLoadType, const String& target,
     150            NSEvent *event, Element* form, const HashMap<String, String>& formValues);
     151        void post(NSURL *, const String& referrer, const String& target,
     152            const FormData&, const String& contentType,
     153            NSEvent *, Element* form, const HashMap<String, String>&);
    154154        void load(NSURLRequest *);
    155155        void load(NSURLRequest *, const String& frameName);
     
    159159
    160160        bool canLoad(NSURL *, const String& referrer, bool& hideReferrer);
     161
     162        void loadResourceSynchronously(const ResourceRequest&,
     163            KURL& finalURL, NSDictionary *& responseHeaders, int& statusCode, Vector<char>& data);
    161164
    162165        // Also not cool.
  • trunk/WebCore/loader/mac/FrameLoader.mm

    r17406 r17408  
    3434#import "DOMElementInternal.h"
    3535#import "Element.h"
    36 #import "FormDataMac.h"
    3736#import "FrameLoadRequest.h"
    3837#import "FrameMac.h"
     
    198197    } else
    199198        post(request.m_request.url().getNSURL(), referrer, (request.m_frameName.length() ? (NSString *)request.m_frameName : nil),
    200             arrayFromFormData(request.m_request.httpBody()), request.m_request.httpContentType(), triggeringEvent, submitForm, formValues);
     199            request.m_request.httpBody(), request.m_request.httpContentType(), triggeringEvent, submitForm, formValues);
    201200
    202201    if (targetFrame && targetFrame != m_frame)
     
    17601759}
    17611760
    1762 void FrameLoader::post(NSURL *URL, const String& referrer, const String& frameName, NSArray *postData,
     1761void FrameLoader::post(NSURL *URL, const String& referrer, const String& frameName, const FormData& formData,
    17631762    const String& contentType, NSEvent *event, Element* form, const HashMap<String, String>& formValues)
    17641763{
     
    17741773    setHTTPReferrer(request, referrer);
    17751774    [request setHTTPMethod:@"POST"];
    1776     webSetHTTPBody(request, postData);
     1775    setHTTPBody(request, formData);
    17771776    [request setValue:contentType forHTTPHeaderField:@"Content-Type"];
    17781777
     
    19151914    NSURL *url = [[NSURL alloc] initWithString:@""];
    19161915    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    1917     m_frame->loader()->load(request);
     1916    load(request);
    19181917    [request release];
    19191918    [url release];
     1919}
     1920
     1921void FrameLoader::loadResourceSynchronously(const ResourceRequest& request,
     1922            KURL& finalURL, NSDictionary *& responseHeaders, int& statusCode, Vector<char>& data)
     1923{
     1924#if 0
     1925    NSDictionary *headerDict = nil;
     1926    const HTTPHeaderMap& requestHeaders = request.httpHeaderFields();
     1927
     1928    if (!requestHeaders.isEmpty())
     1929        headerDict = [NSDictionary _webcore_dictionaryWithHeaderMap:requestHeaders];
     1930   
     1931    FormData postData;
     1932    if (!request.httpBody().elements().isEmpty())
     1933        postData = request.httpBody();
     1934    Vector<char> results([resultData length]);
     1935
     1936    memcpy(results.data(), [resultData bytes], [resultData length]);
     1937#endif
     1938
     1939    NSURL *URL = request.url().getNSURL();
     1940
     1941    // Since this is a subresource, we can load any URL (we ignore the return value).
     1942    // But we still want to know whether we should hide the referrer or not, so we call the canLoadURL method.
     1943    String referrer = m_frame->referrer();
     1944    bool hideReferrer;
     1945    canLoad(URL, referrer, hideReferrer);
     1946    if (hideReferrer)
     1947        referrer = String();
     1948   
     1949    NSMutableURLRequest *initialRequest = [[NSMutableURLRequest alloc] initWithURL:URL];
     1950    [initialRequest setTimeoutInterval:10];
     1951   
     1952    [initialRequest setHTTPMethod:request.httpMethod()];
     1953   
     1954    if (!request.httpBody().isEmpty())       
     1955        setHTTPBody(initialRequest, request.httpBody());
     1956   
     1957    HTTPHeaderMap::const_iterator end = request.httpHeaderFields().end();
     1958    for (HTTPHeaderMap::const_iterator it = request.httpHeaderFields().begin(); it != end; ++it)
     1959        [initialRequest addValue:it->second forHTTPHeaderField:it->first];
     1960   
     1961    if (isConditionalRequest(initialRequest))
     1962        [initialRequest setCachePolicy:NSURLRequestReloadIgnoringCacheData];
     1963    else
     1964        [initialRequest setCachePolicy:[documentLoader()->request() cachePolicy]];
     1965   
     1966    if (!referrer.isNull())
     1967        setHTTPReferrer(initialRequest, referrer);
     1968   
     1969    [initialRequest setMainDocumentURL:[m_frame->page()->mainFrame()->loader()->documentLoader()->request() URL]];
     1970    [initialRequest setValue:client()->userAgent(URL) forHTTPHeaderField:@"User-Agent"];
     1971   
     1972    NSError *error = nil;
     1973    id identifier = nil;   
     1974    NSURLRequest *newRequest = requestFromDelegate(initialRequest, identifier, error);
     1975   
     1976    NSURLResponse *response = nil;
     1977    NSData *result = nil;
     1978    if (error == nil) {
     1979        ASSERT(newRequest != nil);
     1980        result = [NSURLConnection sendSynchronousRequest:newRequest returningResponse:&response error:&error];
     1981    }
     1982   
     1983    [initialRequest release];
     1984
     1985    if (error == nil) {
     1986        finalURL = [response URL];
     1987        if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
     1988            NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
     1989            responseHeaders = [httpResponse allHeaderFields];
     1990            statusCode = [httpResponse statusCode];
     1991        } else {
     1992            responseHeaders = [NSDictionary dictionary];
     1993            statusCode = 200;
     1994        }
     1995    } else {
     1996        finalURL = URL;
     1997        responseHeaders = [NSDictionary dictionary];
     1998        if ([error domain] == NSURLErrorDomain)
     1999            statusCode = [error code];
     2000        else
     2001            statusCode = 404;
     2002    }
     2003   
     2004    sendRemainingDelegateMessages(identifier, response, [result length], error);
     2005   
     2006    data.resize([result length]);
     2007    memcpy(data.data(), [result bytes], [result length]);
    19202008}
    19212009
  • trunk/WebCore/loader/mac/LoaderFunctionsMac.mm

    r17406 r17408  
    3535#import "FrameMac.h"
    3636#import "FormData.h"
    37 #import "FormDataMac.h"
    3837#import "FrameLoader.h"
    3938#import "Logging.h"
     
    9695        return Vector<char>();
    9796   
    98     WebCoreFrameBridge *bridge = frame->bridge();
    99 
    10097    frame->didTellBridgeAboutLoad(request.url().url());
    10198
    10299    BEGIN_BLOCK_OBJC_EXCEPTIONS;
    103100
    104     NSDictionary *headerDict = nil;
    105     const HTTPHeaderMap& requestHeaders = request.httpHeaderFields();
    106 
    107     if (!requestHeaders.isEmpty())
    108         headerDict = [NSDictionary _webcore_dictionaryWithHeaderMap:requestHeaders];
    109    
    110     NSArray *postData = nil;
    111     if (!request.httpBody().elements().isEmpty())
    112         postData = arrayFromFormData(request.httpBody());
    113 
    114     NSURL *finalNSURL = nil;
    115101    NSDictionary *responseHeaderDict = nil;
    116102    int statusCode = 0;
    117     NSData *resultData = [bridge syncLoadResourceWithMethod:request.httpMethod() URL:request.url().getNSURL() customHeaders:headerDict postData:postData finalURL:&finalNSURL responseHeaders:&responseHeaderDict statusCode:&statusCode];
    118    
    119     finalURL = finalNSURL;
     103    Vector<char> result;
     104    frame->loader()->loadResourceSynchronously(request, finalURL, responseHeaderDict, statusCode, result);
     105   
    120106    responseHeaders = DeprecatedString::fromNSString(HeaderStringFromDictionary(responseHeaderDict, statusCode));
    121107
    122     Vector<char> results([resultData length]);
    123 
    124     memcpy(results.data(), [resultData bytes], [resultData length]);
    125 
    126     return results;
     108    return result;
    127109
    128110    END_BLOCK_OBJC_EXCEPTIONS;
  • trunk/WebCore/loader/mac/WebFormDataStream.h

    r16999 r17408  
    11/*
    2  * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
     2 * Copyright (C) 2005, 2006 Apple Computer, Inc.  All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2727 */
    2828
    29 @class NSArray;
    3029@class NSMutableURLRequest;
    3130
    32 #ifdef __cplusplus
    33 extern "C" {
    34 #endif
    35 
    36 void webSetHTTPBody(NSMutableURLRequest *request, NSArray *formData);
    37 
    38 #ifdef __cplusplus
     31namespace WebCore {
     32    class FormData;
     33    void setHTTPBody(NSMutableURLRequest *, const FormData&);
    3934}
    40 #endif
  • trunk/WebCore/loader/mac/WebFormDataStream.m

    r17259 r17408  
    11/*
    2  * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
     2 * Copyright (C) 2005, 2006 Apple Computer, Inc.  All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3232#import "WebFormDataStream.h"
    3333
     34#import "CString.h"
     35#import "FormData.h"
     36#import "WebCoreSystemInterface.h"
     37#import <sys/stat.h>
    3438#import <sys/types.h>
    35 #import <sys/stat.h>
    36 
    3739#import <wtf/Assertions.h>
    38 #import "WebCoreSystemInterface.h"
    39 
    40 static void formEventCallback(CFReadStreamRef stream, CFStreamEventType type, void *context);
    41 
    42 typedef struct {
     40
     41namespace WebCore {
     42
     43static void formEventCallback(CFReadStreamRef stream, CFStreamEventType type, void* context);
     44
     45struct FormStreamFields {
    4346    CFMutableSetRef scheduledRunLoopPairs;
    44     CFMutableArrayRef formDataArray;
     47    Vector<FormDataElement> remainingElements; // in reverse order
    4548    CFReadStreamRef currentStream;
    46     CFDataRef currentData;
     49    char* currentData;
    4750    CFReadStreamRef formStream;
    48 } FormStreamFields;
    49 
    50 typedef struct {
     51};
     52
     53struct SchedulePair {
    5154    CFRunLoopRef runLoop;
    5255    CFStringRef mode;
    53 } SchedulePair;
    54 
    55 static const void *pairRetain(CFAllocatorRef alloc, const void *value)
    56 {
    57     const SchedulePair *pair = (const SchedulePair *)value;
    58 
    59     SchedulePair *result = CFAllocatorAllocate(alloc, sizeof(SchedulePair), 0);
     56};
     57
     58static const void* pairRetain(CFAllocatorRef alloc, const void* value)
     59{
     60    const SchedulePair* pair = static_cast<const SchedulePair*>(value);
     61
     62    SchedulePair* result = new SchedulePair;
    6063    CFRetain(pair->runLoop);
    6164    result->runLoop = pair->runLoop;
     
    6467}
    6568
    66 static void pairRelease(CFAllocatorRef alloc, const void *value)
    67 {
    68     const SchedulePair *pair = (const SchedulePair *)value;
     69static void pairRelease(CFAllocatorRef alloc, const void* value)
     70{
     71    const SchedulePair* pair = static_cast<const SchedulePair*>(value);
    6972
    7073    CFRelease(pair->runLoop);
    7174    CFRelease(pair->mode);
    72     CFAllocatorDeallocate(alloc, (void *)pair);
    73 }
    74 
    75 static Boolean pairEqual(const void *a, const void *b)
    76 {
    77     const SchedulePair *pairA = (const SchedulePair *)a;
    78     const SchedulePair *pairB = (const SchedulePair *)b;
     75    delete pair;
     76}
     77
     78static Boolean pairEqual(const void* a, const void* b)
     79{
     80    const SchedulePair* pairA = static_cast<const SchedulePair*>(a);
     81    const SchedulePair* pairB = static_cast<const SchedulePair*>(b);
    7982
    8083    return pairA->runLoop == pairB->runLoop && CFEqual(pairA->mode, pairB->mode);
    8184}
    8285
    83 static CFHashCode pairHash(const void *value)
    84 {
    85     const SchedulePair *pair = (const SchedulePair *)value;
    86 
    87     return ((CFHashCode)pair->runLoop) ^ CFHash(pair->mode);
     86static CFHashCode pairHash(const void* value)
     87{
     88    const SchedulePair* pair = static_cast<const SchedulePair*>(value);
     89
     90    return (CFHashCode)pair->runLoop ^ CFHash(pair->mode);
    8891}
    8992
     
    97100    }
    98101    if (form->currentData) {
    99         CFRelease(form->currentData);
    100         form->currentData = NULL;
    101     }
    102 }
    103 
    104 static void scheduleWithPair(const void *value, void *context)
    105 {
    106     const SchedulePair *pair = (const SchedulePair *)value;
     102        fastFree(form->currentData);
     103        form->currentData = 0;
     104    }
     105}
     106
     107static void scheduleWithPair(const void* value, void* context)
     108{
     109    const SchedulePair* pair = static_cast<const SchedulePair*>(value);
    107110    CFReadStreamRef stream = (CFReadStreamRef)context;
    108111
     
    114117    closeCurrentStream(form);
    115118
    116     // Handle the case where we're at the end of the array.
    117     if (CFArrayGetCount(form->formDataArray) == 0) {
     119    if (form->remainingElements.isEmpty())
    118120        return;
    119     }
    120121
    121122    // Create the new stream.
    122     CFAllocatorRef alloc = CFGetAllocator(form->formDataArray);
    123     CFTypeRef nextInput = CFArrayGetValueAtIndex(form->formDataArray, 0);
    124     if (CFGetTypeID(nextInput) == CFDataGetTypeID()) {
    125         // nextInput is a CFData containing an absolute path
    126         CFDataRef data = (CFDataRef)nextInput;
    127         form->currentStream = CFReadStreamCreateWithBytesNoCopy(alloc, CFDataGetBytePtr(data), CFDataGetLength(data), kCFAllocatorNull);
     123    FormDataElement& nextInput = form->remainingElements.last();
     124    if (nextInput.m_type == FormDataElement::data) {
     125        size_t size = nextInput.m_data.size();
     126        char* data = nextInput.m_data.releaseBuffer();
     127        form->currentStream = CFReadStreamCreateWithBytesNoCopy(0, reinterpret_cast<const UInt8*>(data), size, kCFAllocatorNull);
    128128        form->currentData = data;
    129         CFRetain(data);
    130129    } else {
    131         // nextInput is a CFString containing an absolute path
    132         CFStringRef path = (CFStringRef)nextInput;
    133         CFURLRef fileURL = CFURLCreateWithFileSystemPath(alloc, path, kCFURLPOSIXPathStyle, FALSE);
    134         form->currentStream = CFReadStreamCreateWithFile(alloc, fileURL);
     130        CFStringRef filename = nextInput.m_filename.createCFString();
     131        CFURLRef fileURL = CFURLCreateWithFileSystemPath(0, filename, kCFURLPOSIXPathStyle, FALSE);
     132        CFRelease(filename);
     133        form->currentStream = CFReadStreamCreateWithFile(0, fileURL);
    135134        CFRelease(fileURL);
    136135    }
    137     CFArrayRemoveValueAtIndex(form->formDataArray, 0);
     136    form->remainingElements.removeLast();
    138137
    139138    // Set up the callback.
     
    146145}
    147146
    148 static void openNextStream(FormStreamFields *form)
     147static void openNextStream(FormStreamFields* form)
    149148{
    150149    // Skip over any streams we can't open.
     
    152151    // can't really do anything useful with an error at this point, so this is better.
    153152    advanceCurrentStream(form);
    154     while (form->currentStream && !CFReadStreamOpen(form->currentStream)) {
     153    while (form->currentStream && !CFReadStreamOpen(form->currentStream))
    155154        advanceCurrentStream(form);
    156     }
    157 }
    158 
    159 static void *formCreate(CFReadStreamRef stream, void *context)
    160 {
    161     CFArrayRef formDataArray = (CFArrayRef)context;
     155}
     156
     157static void* formCreate(CFReadStreamRef stream, void* context)
     158{
     159    const FormData* formData = static_cast<const FormData*>(context);
    162160
    163161    CFSetCallBacks runLoopAndModeCallBacks = { 0, pairRetain, pairRelease, NULL, pairEqual, pairHash };
    164162
    165     CFAllocatorRef alloc = CFGetAllocator(stream);
    166     FormStreamFields *newInfo = CFAllocatorAllocate(alloc, sizeof(FormStreamFields), 0);
    167     newInfo->scheduledRunLoopPairs = CFSetCreateMutable(alloc, 0, &runLoopAndModeCallBacks);
    168     newInfo->formDataArray = CFArrayCreateMutableCopy(alloc, CFArrayGetCount(formDataArray), formDataArray);
     163    FormStreamFields* newInfo = new FormStreamFields;
     164    newInfo->scheduledRunLoopPairs = CFSetCreateMutable(0, 0, &runLoopAndModeCallBacks);
    169165    newInfo->currentStream = NULL;
    170     newInfo->currentData = NULL;
     166    newInfo->currentData = 0;
    171167    newInfo->formStream = stream; // Don't retain. That would create a reference cycle.
     168
     169    // Append in reverse order since we remove elements from the end.
     170    size_t size = formData->elements().size();
     171    newInfo->remainingElements.reserveCapacity(size);
     172    for (size_t i = 0; i < size; ++i)
     173        newInfo->remainingElements.append(formData->elements()[size - i - 1]);
     174
    172175    return newInfo;
    173176}
    174177
    175 static void formFinalize(CFReadStreamRef stream, void *context)
    176 {
    177     FormStreamFields *form = (FormStreamFields *)context;
    178 
    179     closeCurrentStream(context);
     178static void formFinalize(CFReadStreamRef stream, void* context)
     179{
     180    FormStreamFields* form = static_cast<FormStreamFields*>(context);
     181
     182    closeCurrentStream(form);
    180183    CFRelease(form->scheduledRunLoopPairs);
    181     CFRelease(form->formDataArray);
    182     CFAllocatorDeallocate(CFGetAllocator(stream), context);
    183 }
    184 
    185 static Boolean formOpen(CFReadStreamRef stream, CFStreamError *error, Boolean *openComplete, void *context)
    186 {
    187     FormStreamFields *form = (FormStreamFields *)context;
     184    delete form;
     185}
     186
     187static Boolean formOpen(CFReadStreamRef stream, CFStreamError* error, Boolean* openComplete, void* context)
     188{
     189    FormStreamFields* form = static_cast<FormStreamFields*>(context);
    188190
    189191    openNextStream(form);
     
    194196}
    195197
    196 static CFIndex formRead(CFReadStreamRef stream, UInt8 *buffer, CFIndex bufferLength, CFStreamError *error, Boolean *atEOF, void *context)
    197 {
    198     FormStreamFields *form = (FormStreamFields *)context;
     198static CFIndex formRead(CFReadStreamRef stream, UInt8* buffer, CFIndex bufferLength, CFStreamError* error, Boolean* atEOF, void* context)
     199{
     200    FormStreamFields* form = static_cast<FormStreamFields*>(context);
    199201
    200202    while (form->currentStream) {
     
    217219}
    218220
    219 static Boolean formCanRead(CFReadStreamRef stream, void *context)
    220 {
    221     FormStreamFields *form = (FormStreamFields *)context;
     221static Boolean formCanRead(CFReadStreamRef stream, void* context)
     222{
     223    FormStreamFields* form = static_cast<FormStreamFields*>(context);
    222224
    223225    while (form->currentStream && CFReadStreamGetStatus(form->currentStream) == kCFStreamStatusAtEnd) {
     
    231233}
    232234
    233 static void formClose(CFReadStreamRef stream, void *context)
    234 {
    235     FormStreamFields *form = (FormStreamFields *)context;
     235static void formClose(CFReadStreamRef stream, void* context)
     236{
     237    FormStreamFields* form = static_cast<FormStreamFields*>(context);
    236238
    237239    closeCurrentStream(form);
    238240}
    239241
    240 static void formSchedule(CFReadStreamRef stream, CFRunLoopRef runLoop, CFStringRef runLoopMode, void *context)
    241 {
    242     FormStreamFields *form = (FormStreamFields *)context;
    243 
    244     if (form->currentStream) {
     242static void formSchedule(CFReadStreamRef stream, CFRunLoopRef runLoop, CFStringRef runLoopMode, void* context)
     243{
     244    FormStreamFields* form = static_cast<FormStreamFields*>(context);
     245
     246    if (form->currentStream)
    245247        CFReadStreamScheduleWithRunLoop(form->currentStream, runLoop, runLoopMode);
    246     }
    247248    SchedulePair pair = { runLoop, runLoopMode };
    248249    CFSetAddValue(form->scheduledRunLoopPairs, &pair);
    249250}
    250251
    251 static void formUnschedule(CFReadStreamRef stream, CFRunLoopRef runLoop, CFStringRef runLoopMode, void *context)
    252 {
    253     FormStreamFields *form = (FormStreamFields *)context;
    254 
    255     if (form->currentStream) {
     252static void formUnschedule(CFReadStreamRef stream, CFRunLoopRef runLoop, CFStringRef runLoopMode, void* context)
     253{
     254    FormStreamFields* form = static_cast<FormStreamFields*>(context);
     255
     256    if (form->currentStream)
    256257        CFReadStreamUnscheduleFromRunLoop(form->currentStream, runLoop, runLoopMode);
    257     }
    258258    SchedulePair pair = { runLoop, runLoopMode };
    259259    CFSetRemoveValue(form->scheduledRunLoopPairs, &pair);
    260260}
    261261
    262 static void formEventCallback(CFReadStreamRef stream, CFStreamEventType type, void *context)
    263 {
    264     FormStreamFields *form = (FormStreamFields *)context;
     262static void formEventCallback(CFReadStreamRef stream, CFStreamEventType type, void* context)
     263{
     264    FormStreamFields* form = static_cast<FormStreamFields*>(context);
    265265
    266266    switch (type) {
     
    291291}
    292292
    293 void webSetHTTPBody(NSMutableURLRequest *request, NSArray *formData)
    294 {
    295     size_t count = [formData count];
     293void setHTTPBody(NSMutableURLRequest *request, const FormData& formData)
     294{
     295    size_t count = formData.elements().size();
    296296
    297297    // Handle the common special case of one piece of form data, with no files.
    298298    if (count == 1) {
    299         id d = [formData objectAtIndex:0];
    300         if ([d isKindOfClass:[NSData class]]) {
    301             [request setHTTPBody:(NSData *)d];
     299        const FormDataElement& element = formData.elements()[0];
     300        if (element.m_type == FormDataElement::data) {
     301            NSData *data = [[NSData alloc] initWithBytes:element.m_data.data() length:element.m_data.size()];
     302            [request setHTTPBody:data];
     303            [data release];
    302304            return;
    303305        }
     
    306308    // Precompute the content length so NSURLConnection doesn't use chunked mode.
    307309    long long length = 0;
    308     unsigned i;
    309     for (i = 0; i < count; ++i) {
    310         id data = [formData objectAtIndex:i];
    311         if ([data isKindOfClass:[NSData class]]) {
    312             NSData *d = data;
    313             length += [d length];
    314         } else if ([data isKindOfClass:[NSString class]]) {
    315             NSString *s = data;
     310    for (size_t i = 0; i < count; ++i) {
     311        const FormDataElement& element = formData.elements()[i];
     312        if (element.m_type == FormDataElement::data)
     313            length += element.m_data.size();
     314        else {
    316315            struct stat sb;
    317             int statResult = stat([s fileSystemRepresentation], &sb);
    318             if (statResult == 0 && (sb.st_mode & S_IFMT) == S_IFREG) {
     316            int statResult = stat(element.m_filename.utf8(), &sb);
     317            if (statResult == 0 && (sb.st_mode & S_IFMT) == S_IFREG)
    319318                length += sb.st_size;
    320             }
    321         } else {
    322             LOG_ERROR("item in form data array is neither NSData nor NSString");
    323             return;
    324319        }
    325320    }
     
    329324
    330325    // Create and set the stream.
    331     CFReadStreamRef stream = wkCreateCustomCFReadStream(formCreate, formFinalize, formOpen, formRead, formCanRead, formClose, formSchedule, formUnschedule, formData);
     326    CFReadStreamRef stream = wkCreateCustomCFReadStream(formCreate, formFinalize,
     327        formOpen, formRead, formCanRead, formClose, formSchedule, formUnschedule,
     328        const_cast<FormData*>(&formData));
    332329    [request setHTTPBodyStream:(NSInputStream *)stream];
    333330    CFRelease(stream);
    334331}
     332
     333}
  • trunk/WebCore/loader/mac/WebSubresourceLoader.h

    r17407 r17408  
    4141namespace WebCore {
    4242
     43    class FormData;
    4344    class String;
    4445    class ResourceLoader;
  • trunk/WebCore/loader/mac/WebSubresourceLoader.mm

    r17407 r17408  
    3535#import "LoaderNSURLExtras.h"
    3636#import "LoaderNSURLRequestExtras.h"
    37 #import "FormDataMac.h"
    3837#import "ResourceLoader.h"
    3938#import "WebCoreFrameBridge.h"
     
    8382    // FIXME: Because of <rdar://problem/4803505>, the method has to be set before the body.
    8483    [newRequest setHTTPMethod:request.httpMethod()];
    85     if (!request.httpBody().elements().isEmpty())
    86         webSetHTTPBody(newRequest, arrayFromFormData(request.httpBody()));
     84    if (!request.httpBody().isEmpty())
     85        setHTTPBody(newRequest, request.httpBody());
    8786
    8887    wkSupportsMultipartXMixedReplace(newRequest);
  • trunk/WebCore/platform/network/mac/ResourceLoaderMac.mm

    r17407 r17408  
    3434#import "FrameMac.h"
    3535#import "KURL.h"
    36 #import "FormDataMac.h"
    3736#import "LoaderFunctions.h"
    3837#import "Logging.h"
  • trunk/WebKit/ChangeLog

    r17405 r17408  
     12006-10-29  Darin Adler  <darin@apple.com>
     2
     3        Reviewed by Maciej.
     4
     5        - eliminate use of NSArray to carry form data around
     6          (the code in this framework was actually using the NSArray to hold a single
     7           NSData anyway, so I just went back to an NSData for now)
     8
     9        * History/WebHistoryItem.m:
     10        (-[WebHistoryItem _setFormInfoFromRequest:]):
     11        (-[WebHistoryItem formData]):
     12        * History/WebHistoryItemPrivate.h:
     13        * WebCoreSupport/WebFrameLoaderClient.mm:
     14        (WebFrameLoaderClient::dispatchWillSubmitForm):
     15        * WebView/WebFrame.mm:
     16        (-[WebFrame _loadItem:withLoadType:]):
     17
    1182006-10-28  Darin Adler  <darin@apple.com>
    219
  • trunk/WebKit/History/WebHistoryItem.m

    r17238 r17408  
    7575    int visitCount;
    7676    // info used to repost form data
    77     NSArray *formData;
     77    NSData *formData;
    7878    NSString *formContentType;
    7979    NSString *formReferrer;
     
    485485- (void)_setFormInfoFromRequest:(NSURLRequest *)request
    486486{
    487     NSArray *newData = nil;
     487    NSData *newData = nil;
    488488    NSString *newContentType = nil;
    489489    NSString *newReferrer = nil;
     
    493493        // FIXME: Eventually we have to make this smart enough to handle the case where
    494494        // we have a stream for the body to handle the "data interspersed with files" feature.
    495         NSData *body = [request HTTPBody];
    496         if (body) {
    497             body = [body copy];
    498             newData = [[NSArray alloc] initWithObjects:body, nil];
    499             [body release];
    500         }
    501 
     495        newData = [[request HTTPBody] copy];
    502496        newContentType = [[request _web_HTTPContentType] copy];
    503497        newReferrer = [[request _web_HTTPReferrer] copy];
     
    514508}
    515509
    516 - (NSArray *)formData
     510- (NSData *)formData
    517511{
    518512    return _private->formData;
  • trunk/WebKit/History/WebHistoryItemPrivate.h

    r15106 r17408  
    5353- (NSArray *)documentState;
    5454- (BOOL)isTargetItem;
    55 - (NSArray *)formData;
     55- (NSData *)formData;
    5656- (NSString *)formContentType;
    5757- (NSString *)formReferrer;
  • trunk/WebKit/WebCoreSupport/WebFrameLoaderClient.mm

    r17405 r17408  
    691691    HashMap<String, String>::const_iterator end = formState->values().end();
    692692    for (HashMap<String, String>::const_iterator it = formState->values().begin(); it != end; ++it)
    693         [dictionary setObject:it->second forKey:it->first];
     693        if (!it->first.isNull() && !it->second.isNull())
     694            [dictionary setObject:it->second forKey:it->first];
    694695
    695696    [formDelegate frame:m_webFrame.get()
  • trunk/WebKit/WebView/WebFrame.mm

    r17405 r17408  
    414414    NSURL *itemOriginalURL = [NSURL _web_URLWithDataAsString:[item originalURLString]];
    415415    NSURL *currentURL = [[[self dataSource] request] URL];
    416     NSArray *formData = [item formData];
     416    NSData *formData = [item formData];
    417417
    418418    // Are we navigating to an anchor within the page?
     
    484484                [request setHTTPMethod:@"POST"];
    485485                [request _web_setHTTPReferrer:[item formReferrer]];
    486                 webSetHTTPBody(request, formData);
     486                [request setHTTPBody:formData];
    487487                [request _web_setHTTPContentType:[item formContentType]];
    488488
Note: See TracChangeset for help on using the changeset viewer.