2 * Copyright (C) 2009 Google Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the
14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 #include "WebURLRequest.h"
34 #include "ResourceRequest.h"
36 #include "WebHTTPBody.h"
37 #include "WebHTTPHeaderVisitor.h"
39 #include "WebURLRequestPrivate.h"
41 using namespace WebCore;
47 class ExtraDataContainer : public ResourceRequest::ExtraData {
49 static PassRefPtr<ExtraDataContainer> create(WebURLRequest::ExtraData* extraData) { return adoptRef(new ExtraDataContainer(extraData)); }
51 virtual ~ExtraDataContainer() { }
53 WebURLRequest::ExtraData* extraData() const { return m_extraData.get(); }
56 explicit ExtraDataContainer(WebURLRequest::ExtraData* extraData)
57 : m_extraData(adoptPtr(extraData))
61 OwnPtr<WebURLRequest::ExtraData> m_extraData;
66 // The standard implementation of WebURLRequestPrivate, which maintains
67 // ownership of a ResourceRequest instance.
68 class WebURLRequestPrivateImpl : public WebURLRequestPrivate {
70 WebURLRequestPrivateImpl()
72 m_resourceRequest = &m_resourceRequestAllocation;
75 WebURLRequestPrivateImpl(const WebURLRequestPrivate* p)
76 : m_resourceRequestAllocation(*p->m_resourceRequest)
78 m_resourceRequest = &m_resourceRequestAllocation;
79 m_allowStoredCredentials = p->m_allowStoredCredentials;
82 virtual void dispose() { delete this; }
85 virtual ~WebURLRequestPrivateImpl() { }
87 ResourceRequest m_resourceRequestAllocation;
90 void WebURLRequest::initialize()
92 assign(new WebURLRequestPrivateImpl());
95 void WebURLRequest::reset()
100 void WebURLRequest::assign(const WebURLRequest& r)
103 assign(r.m_private ? new WebURLRequestPrivateImpl(r.m_private) : 0);
106 bool WebURLRequest::isNull() const
108 return !m_private || m_private->m_resourceRequest->isNull();
111 WebURL WebURLRequest::url() const
113 return m_private->m_resourceRequest->url();
116 void WebURLRequest::setURL(const WebURL& url)
118 m_private->m_resourceRequest->setURL(url);
121 WebURL WebURLRequest::firstPartyForCookies() const
123 return m_private->m_resourceRequest->firstPartyForCookies();
126 void WebURLRequest::setFirstPartyForCookies(const WebURL& firstPartyForCookies)
128 m_private->m_resourceRequest->setFirstPartyForCookies(firstPartyForCookies);
131 bool WebURLRequest::allowCookies() const
133 return m_private->m_resourceRequest->allowCookies();
136 void WebURLRequest::setAllowCookies(bool allowCookies)
138 m_private->m_resourceRequest->setAllowCookies(allowCookies);
141 bool WebURLRequest::allowStoredCredentials() const
143 return m_private->m_allowStoredCredentials;
146 void WebURLRequest::setAllowStoredCredentials(bool allowStoredCredentials)
148 m_private->m_allowStoredCredentials = allowStoredCredentials;
151 WebURLRequest::CachePolicy WebURLRequest::cachePolicy() const
153 return static_cast<WebURLRequest::CachePolicy>(
154 m_private->m_resourceRequest->cachePolicy());
157 void WebURLRequest::setCachePolicy(CachePolicy cachePolicy)
159 m_private->m_resourceRequest->setCachePolicy(
160 static_cast<ResourceRequestCachePolicy>(cachePolicy));
163 WebString WebURLRequest::httpMethod() const
165 return m_private->m_resourceRequest->httpMethod();
168 void WebURLRequest::setHTTPMethod(const WebString& httpMethod)
170 m_private->m_resourceRequest->setHTTPMethod(httpMethod);
173 WebString WebURLRequest::httpHeaderField(const WebString& name) const
175 return m_private->m_resourceRequest->httpHeaderField(name);
178 void WebURLRequest::setHTTPHeaderField(const WebString& name, const WebString& value)
180 m_private->m_resourceRequest->setHTTPHeaderField(name, value);
183 void WebURLRequest::addHTTPHeaderField(const WebString& name, const WebString& value)
185 m_private->m_resourceRequest->addHTTPHeaderField(name, value);
188 void WebURLRequest::clearHTTPHeaderField(const WebString& name)
190 // FIXME: Add a clearHTTPHeaderField method to ResourceRequest.
191 const HTTPHeaderMap& map = m_private->m_resourceRequest->httpHeaderFields();
192 const_cast<HTTPHeaderMap*>(&map)->remove(name);
195 void WebURLRequest::visitHTTPHeaderFields(WebHTTPHeaderVisitor* visitor) const
197 const HTTPHeaderMap& map = m_private->m_resourceRequest->httpHeaderFields();
198 for (HTTPHeaderMap::const_iterator it = map.begin(); it != map.end(); ++it)
199 visitor->visitHeader(it->first, it->second);
202 WebHTTPBody WebURLRequest::httpBody() const
204 return WebHTTPBody(m_private->m_resourceRequest->httpBody());
207 void WebURLRequest::setHTTPBody(const WebHTTPBody& httpBody)
209 m_private->m_resourceRequest->setHTTPBody(httpBody);
212 bool WebURLRequest::reportUploadProgress() const
214 return m_private->m_resourceRequest->reportUploadProgress();
217 void WebURLRequest::setReportUploadProgress(bool reportUploadProgress)
219 m_private->m_resourceRequest->setReportUploadProgress(reportUploadProgress);
222 bool WebURLRequest::reportLoadTiming() const
224 return m_private->m_resourceRequest->reportLoadTiming();
227 void WebURLRequest::setReportRawHeaders(bool reportRawHeaders)
229 m_private->m_resourceRequest->setReportRawHeaders(reportRawHeaders);
232 bool WebURLRequest::reportRawHeaders() const
234 return m_private->m_resourceRequest->reportRawHeaders();
237 void WebURLRequest::setReportLoadTiming(bool reportLoadTiming)
239 m_private->m_resourceRequest->setReportLoadTiming(reportLoadTiming);
242 WebURLRequest::TargetType WebURLRequest::targetType() const
244 // FIXME: Temporary special case until downstream chromium.org knows of the new TargetTypes.
245 TargetType targetType = static_cast<TargetType>(m_private->m_resourceRequest->targetType());
246 if (targetType == TargetIsTextTrack || targetType == TargetIsUnspecified)
247 return TargetIsSubresource;
251 bool WebURLRequest::hasUserGesture() const
253 return m_private->m_resourceRequest->hasUserGesture();
256 void WebURLRequest::setHasUserGesture(bool hasUserGesture)
258 m_private->m_resourceRequest->setHasUserGesture(hasUserGesture);
261 void WebURLRequest::setTargetType(TargetType targetType)
263 m_private->m_resourceRequest->setTargetType(
264 static_cast<ResourceRequest::TargetType>(targetType));
267 int WebURLRequest::requestorID() const
269 return m_private->m_resourceRequest->requestorID();
272 void WebURLRequest::setRequestorID(int requestorID)
274 m_private->m_resourceRequest->setRequestorID(requestorID);
277 int WebURLRequest::requestorProcessID() const
279 return m_private->m_resourceRequest->requestorProcessID();
282 void WebURLRequest::setRequestorProcessID(int requestorProcessID)
284 m_private->m_resourceRequest->setRequestorProcessID(requestorProcessID);
287 int WebURLRequest::appCacheHostID() const
289 return m_private->m_resourceRequest->appCacheHostID();
292 void WebURLRequest::setAppCacheHostID(int appCacheHostID)
294 m_private->m_resourceRequest->setAppCacheHostID(appCacheHostID);
297 bool WebURLRequest::downloadToFile() const
299 return m_private->m_resourceRequest->downloadToFile();
302 void WebURLRequest::setDownloadToFile(bool downloadToFile)
304 m_private->m_resourceRequest->setDownloadToFile(downloadToFile);
307 WebURLRequest::ExtraData* WebURLRequest::extraData() const
309 RefPtr<ResourceRequest::ExtraData> data = m_private->m_resourceRequest->extraData();
312 return static_cast<ExtraDataContainer*>(data.get())->extraData();
315 void WebURLRequest::setExtraData(WebURLRequest::ExtraData* extraData)
317 m_private->m_resourceRequest->setExtraData(ExtraDataContainer::create(extraData));
320 ResourceRequest& WebURLRequest::toMutableResourceRequest()
323 ASSERT(m_private->m_resourceRequest);
325 return *m_private->m_resourceRequest;
328 const ResourceRequest& WebURLRequest::toResourceRequest() const
331 ASSERT(m_private->m_resourceRequest);
333 return *m_private->m_resourceRequest;
336 void WebURLRequest::assign(WebURLRequestPrivate* p)
338 // Subclasses may call this directly so a self-assignment check is needed
339 // here as well as in the public assign method.
343 m_private->dispose();
347 } // namespace WebKit