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 <public/WebURLRequest.h>
34
#include "ResourceRequest.h"
35
#include "WebURLRequestPrivate.h"
36
#include <public/WebHTTPBody.h>
37
#include <public/WebHTTPHeaderVisitor.h>
38
#include <public/WebURL.h>
40
using namespace WebCore;
46
class ExtraDataContainer : public ResourceRequest::ExtraData {
48
static PassRefPtr<ExtraDataContainer> create(WebURLRequest::ExtraData* extraData) { return adoptRef(new ExtraDataContainer(extraData)); }
50
virtual ~ExtraDataContainer() { }
52
WebURLRequest::ExtraData* extraData() const { return m_extraData.get(); }
55
explicit ExtraDataContainer(WebURLRequest::ExtraData* extraData)
56
: m_extraData(adoptPtr(extraData))
60
OwnPtr<WebURLRequest::ExtraData> m_extraData;
65
// The standard implementation of WebURLRequestPrivate, which maintains
66
// ownership of a ResourceRequest instance.
67
class WebURLRequestPrivateImpl : public WebURLRequestPrivate {
69
WebURLRequestPrivateImpl()
71
m_resourceRequest = &m_resourceRequestAllocation;
74
WebURLRequestPrivateImpl(const WebURLRequestPrivate* p)
75
: m_resourceRequestAllocation(*p->m_resourceRequest)
77
m_resourceRequest = &m_resourceRequestAllocation;
78
m_allowStoredCredentials = p->m_allowStoredCredentials;
81
virtual void dispose() { delete this; }
84
virtual ~WebURLRequestPrivateImpl() { }
86
ResourceRequest m_resourceRequestAllocation;
89
void WebURLRequest::initialize()
91
assign(new WebURLRequestPrivateImpl());
94
void WebURLRequest::reset()
99
void WebURLRequest::assign(const WebURLRequest& r)
102
assign(r.m_private ? new WebURLRequestPrivateImpl(r.m_private) : 0);
105
bool WebURLRequest::isNull() const
107
return !m_private || m_private->m_resourceRequest->isNull();
110
WebURL WebURLRequest::url() const
112
return m_private->m_resourceRequest->url();
115
void WebURLRequest::setURL(const WebURL& url)
117
m_private->m_resourceRequest->setURL(url);
120
WebURL WebURLRequest::firstPartyForCookies() const
122
return m_private->m_resourceRequest->firstPartyForCookies();
125
void WebURLRequest::setFirstPartyForCookies(const WebURL& firstPartyForCookies)
127
m_private->m_resourceRequest->setFirstPartyForCookies(firstPartyForCookies);
130
bool WebURLRequest::allowCookies() const
132
return m_private->m_resourceRequest->allowCookies();
135
void WebURLRequest::setAllowCookies(bool allowCookies)
137
m_private->m_resourceRequest->setAllowCookies(allowCookies);
140
bool WebURLRequest::allowStoredCredentials() const
142
return m_private->m_allowStoredCredentials;
145
void WebURLRequest::setAllowStoredCredentials(bool allowStoredCredentials)
147
m_private->m_allowStoredCredentials = allowStoredCredentials;
150
WebURLRequest::CachePolicy WebURLRequest::cachePolicy() const
152
return static_cast<WebURLRequest::CachePolicy>(
153
m_private->m_resourceRequest->cachePolicy());
156
void WebURLRequest::setCachePolicy(CachePolicy cachePolicy)
158
m_private->m_resourceRequest->setCachePolicy(
159
static_cast<ResourceRequestCachePolicy>(cachePolicy));
162
WebString WebURLRequest::httpMethod() const
164
return m_private->m_resourceRequest->httpMethod();
167
void WebURLRequest::setHTTPMethod(const WebString& httpMethod)
169
m_private->m_resourceRequest->setHTTPMethod(httpMethod);
172
WebString WebURLRequest::httpHeaderField(const WebString& name) const
174
return m_private->m_resourceRequest->httpHeaderField(name);
177
void WebURLRequest::setHTTPHeaderField(const WebString& name, const WebString& value)
179
m_private->m_resourceRequest->setHTTPHeaderField(name, value);
182
void WebURLRequest::addHTTPHeaderField(const WebString& name, const WebString& value)
184
m_private->m_resourceRequest->addHTTPHeaderField(name, value);
187
void WebURLRequest::clearHTTPHeaderField(const WebString& name)
189
// FIXME: Add a clearHTTPHeaderField method to ResourceRequest.
190
const HTTPHeaderMap& map = m_private->m_resourceRequest->httpHeaderFields();
191
const_cast<HTTPHeaderMap*>(&map)->remove(name);
194
void WebURLRequest::visitHTTPHeaderFields(WebHTTPHeaderVisitor* visitor) const
196
const HTTPHeaderMap& map = m_private->m_resourceRequest->httpHeaderFields();
197
for (HTTPHeaderMap::const_iterator it = map.begin(); it != map.end(); ++it)
198
visitor->visitHeader(it->key, it->value);
201
WebHTTPBody WebURLRequest::httpBody() const
203
return WebHTTPBody(m_private->m_resourceRequest->httpBody());
206
void WebURLRequest::setHTTPBody(const WebHTTPBody& httpBody)
208
m_private->m_resourceRequest->setHTTPBody(httpBody);
211
bool WebURLRequest::reportUploadProgress() const
213
return m_private->m_resourceRequest->reportUploadProgress();
216
void WebURLRequest::setReportUploadProgress(bool reportUploadProgress)
218
m_private->m_resourceRequest->setReportUploadProgress(reportUploadProgress);
221
bool WebURLRequest::reportLoadTiming() const
223
return m_private->m_resourceRequest->reportLoadTiming();
226
void WebURLRequest::setReportRawHeaders(bool reportRawHeaders)
228
m_private->m_resourceRequest->setReportRawHeaders(reportRawHeaders);
231
bool WebURLRequest::reportRawHeaders() const
233
return m_private->m_resourceRequest->reportRawHeaders();
236
void WebURLRequest::setReportLoadTiming(bool reportLoadTiming)
238
m_private->m_resourceRequest->setReportLoadTiming(reportLoadTiming);
241
WebURLRequest::TargetType WebURLRequest::targetType() const
243
// FIXME: Temporary special case until downstream chromium.org knows of the new TargetTypes.
244
TargetType targetType = static_cast<TargetType>(m_private->m_resourceRequest->targetType());
245
if (targetType == TargetIsTextTrack || targetType == TargetIsUnspecified)
246
return TargetIsSubresource;
250
bool WebURLRequest::hasUserGesture() const
252
return m_private->m_resourceRequest->hasUserGesture();
255
void WebURLRequest::setHasUserGesture(bool hasUserGesture)
257
m_private->m_resourceRequest->setHasUserGesture(hasUserGesture);
260
void WebURLRequest::setTargetType(TargetType targetType)
262
m_private->m_resourceRequest->setTargetType(
263
static_cast<ResourceRequest::TargetType>(targetType));
266
int WebURLRequest::requestorID() const
268
return m_private->m_resourceRequest->requestorID();
271
void WebURLRequest::setRequestorID(int requestorID)
273
m_private->m_resourceRequest->setRequestorID(requestorID);
276
int WebURLRequest::requestorProcessID() const
278
return m_private->m_resourceRequest->requestorProcessID();
281
void WebURLRequest::setRequestorProcessID(int requestorProcessID)
283
m_private->m_resourceRequest->setRequestorProcessID(requestorProcessID);
286
int WebURLRequest::appCacheHostID() const
288
return m_private->m_resourceRequest->appCacheHostID();
291
void WebURLRequest::setAppCacheHostID(int appCacheHostID)
293
m_private->m_resourceRequest->setAppCacheHostID(appCacheHostID);
296
bool WebURLRequest::downloadToFile() const
298
return m_private->m_resourceRequest->downloadToFile();
301
void WebURLRequest::setDownloadToFile(bool downloadToFile)
303
m_private->m_resourceRequest->setDownloadToFile(downloadToFile);
306
WebURLRequest::ExtraData* WebURLRequest::extraData() const
308
RefPtr<ResourceRequest::ExtraData> data = m_private->m_resourceRequest->extraData();
311
return static_cast<ExtraDataContainer*>(data.get())->extraData();
314
void WebURLRequest::setExtraData(WebURLRequest::ExtraData* extraData)
316
m_private->m_resourceRequest->setExtraData(ExtraDataContainer::create(extraData));
319
ResourceRequest& WebURLRequest::toMutableResourceRequest()
322
ASSERT(m_private->m_resourceRequest);
324
return *m_private->m_resourceRequest;
327
const ResourceRequest& WebURLRequest::toResourceRequest() const
330
ASSERT(m_private->m_resourceRequest);
332
return *m_private->m_resourceRequest;
335
void WebURLRequest::assign(WebURLRequestPrivate* p)
337
// Subclasses may call this directly so a self-assignment check is needed
338
// here as well as in the public assign method.
342
m_private->dispose();
346
} // namespace WebKit