1 // -*- mode: c++; c-basic-offset: 4 -*-
3 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 #import "ResourceRequest.h"
29 #import "WebCoreSystemInterface.h"
31 #import "FormDataStreamMac.h"
33 #import <Foundation/Foundation.h>
37 NSURLRequest* ResourceRequest::nsURLRequest() const
39 updatePlatformRequest();
41 return [[m_nsRequest.get() retain] autorelease];
44 void ResourceRequest::doUpdateResourceRequest()
46 m_url = [m_nsRequest.get() URL];
47 m_cachePolicy = (ResourceRequestCachePolicy)[m_nsRequest.get() cachePolicy];
48 m_timeoutInterval = [m_nsRequest.get() timeoutInterval];
49 m_mainDocumentURL = [m_nsRequest.get() mainDocumentURL];
51 if (NSString* method = [m_nsRequest.get() HTTPMethod])
52 m_httpMethod = method;
53 m_allowHTTPCookies = [m_nsRequest.get() HTTPShouldHandleCookies];
55 NSDictionary *headers = [m_nsRequest.get() allHTTPHeaderFields];
56 NSEnumerator *e = [headers keyEnumerator];
58 while ((name = [e nextObject]))
59 m_httpHeaderFields.set(name, [headers objectForKey:name]);
61 if (NSData* bodyData = [m_nsRequest.get() HTTPBody])
62 m_httpBody = FormData::create([bodyData bytes], [bodyData length]);
63 else if (NSInputStream* bodyStream = [m_nsRequest.get() HTTPBodyStream])
64 if (FormData* formData = httpBodyFromStream(bodyStream))
65 m_httpBody = formData;
68 void ResourceRequest::doUpdatePlatformRequest()
75 NSMutableURLRequest* nsRequest = [m_nsRequest.get() mutableCopy];
78 [nsRequest setURL:url()];
80 nsRequest = [[NSMutableURLRequest alloc] initWithURL:url()];
82 wkSupportsMultipartXMixedReplace(nsRequest);
84 [nsRequest setCachePolicy:(NSURLRequestCachePolicy)cachePolicy()];
85 [nsRequest setTimeoutInterval:timeoutInterval()];
86 [nsRequest setMainDocumentURL:mainDocumentURL()];
87 if (!httpMethod().isEmpty())
88 [nsRequest setHTTPMethod:httpMethod()];
89 [nsRequest setHTTPShouldHandleCookies:allowHTTPCookies()];
91 HTTPHeaderMap::const_iterator end = httpHeaderFields().end();
92 for (HTTPHeaderMap::const_iterator it = httpHeaderFields().begin(); it != end; ++it)
93 [nsRequest setValue:it->second forHTTPHeaderField:it->first];
95 RefPtr<FormData> formData = httpBody();
96 if (formData && !formData->isEmpty())
97 WebCore::setHTTPBody(nsRequest, formData);
99 m_nsRequest.adoptNS(nsRequest);