Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / platform / exported / WebURLRequest.cpp
1 /*
2  * Copyright (C) 2009 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
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
13  * distribution.
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.
17  *
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.
29  */
30
31 #include "config.h"
32 #include "public/platform/WebURLRequest.h"
33
34 #include "platform/exported/WebURLRequestPrivate.h"
35 #include "platform/network/ResourceRequest.h"
36 #include "public/platform/WebHTTPBody.h"
37 #include "public/platform/WebHTTPHeaderVisitor.h"
38 #include "public/platform/WebURL.h"
39
40 using namespace WebCore;
41
42 namespace blink {
43
44 namespace {
45
46 class ExtraDataContainer : public ResourceRequest::ExtraData {
47 public:
48     static PassRefPtr<ExtraDataContainer> create(WebURLRequest::ExtraData* extraData) { return adoptRef(new ExtraDataContainer(extraData)); }
49
50     virtual ~ExtraDataContainer() { }
51
52     WebURLRequest::ExtraData* extraData() const { return m_extraData.get(); }
53
54 private:
55     explicit ExtraDataContainer(WebURLRequest::ExtraData* extraData)
56         : m_extraData(adoptPtr(extraData))
57     {
58     }
59
60     OwnPtr<WebURLRequest::ExtraData> m_extraData;
61 };
62
63 } // namespace
64
65 // The standard implementation of WebURLRequestPrivate, which maintains
66 // ownership of a ResourceRequest instance.
67 class WebURLRequestPrivateImpl : public WebURLRequestPrivate {
68 public:
69     WebURLRequestPrivateImpl()
70     {
71         m_resourceRequest = &m_resourceRequestAllocation;
72     }
73
74     WebURLRequestPrivateImpl(const WebURLRequestPrivate* p)
75         : m_resourceRequestAllocation(*p->m_resourceRequest)
76     {
77         m_resourceRequest = &m_resourceRequestAllocation;
78         m_allowStoredCredentials = p->m_allowStoredCredentials;
79     }
80
81     virtual void dispose() { delete this; }
82
83 private:
84     virtual ~WebURLRequestPrivateImpl() { }
85
86     ResourceRequest m_resourceRequestAllocation;
87 };
88
89 void WebURLRequest::initialize()
90 {
91     assign(new WebURLRequestPrivateImpl());
92 }
93
94 void WebURLRequest::reset()
95 {
96     assign(0);
97 }
98
99 void WebURLRequest::assign(const WebURLRequest& r)
100 {
101     if (&r != this)
102         assign(r.m_private ? new WebURLRequestPrivateImpl(r.m_private) : 0);
103 }
104
105 bool WebURLRequest::isNull() const
106 {
107     return !m_private || m_private->m_resourceRequest->isNull();
108 }
109
110 WebURL WebURLRequest::url() const
111 {
112     return m_private->m_resourceRequest->url();
113 }
114
115 void WebURLRequest::setURL(const WebURL& url)
116 {
117     m_private->m_resourceRequest->setURL(url);
118 }
119
120 WebURL WebURLRequest::firstPartyForCookies() const
121 {
122     return m_private->m_resourceRequest->firstPartyForCookies();
123 }
124
125 void WebURLRequest::setFirstPartyForCookies(const WebURL& firstPartyForCookies)
126 {
127     m_private->m_resourceRequest->setFirstPartyForCookies(firstPartyForCookies);
128 }
129
130 bool WebURLRequest::allowCookies() const
131 {
132     return m_private->m_resourceRequest->allowCookies();
133 }
134
135 void WebURLRequest::setAllowCookies(bool allowCookies)
136 {
137     m_private->m_resourceRequest->setAllowCookies(allowCookies);
138 }
139
140 bool WebURLRequest::allowStoredCredentials() const
141 {
142     return m_private->m_allowStoredCredentials;
143 }
144
145 void WebURLRequest::setAllowStoredCredentials(bool allowStoredCredentials)
146 {
147     m_private->m_allowStoredCredentials = allowStoredCredentials;
148 }
149
150 WebURLRequest::CachePolicy WebURLRequest::cachePolicy() const
151 {
152     return static_cast<WebURLRequest::CachePolicy>(
153         m_private->m_resourceRequest->cachePolicy());
154 }
155
156 void WebURLRequest::setCachePolicy(CachePolicy cachePolicy)
157 {
158     m_private->m_resourceRequest->setCachePolicy(
159         static_cast<ResourceRequestCachePolicy>(cachePolicy));
160 }
161
162 WebString WebURLRequest::httpMethod() const
163 {
164     return m_private->m_resourceRequest->httpMethod();
165 }
166
167 void WebURLRequest::setHTTPMethod(const WebString& httpMethod)
168 {
169     m_private->m_resourceRequest->setHTTPMethod(httpMethod);
170 }
171
172 WebString WebURLRequest::httpHeaderField(const WebString& name) const
173 {
174     return m_private->m_resourceRequest->httpHeaderField(name);
175 }
176
177 void WebURLRequest::setHTTPHeaderField(const WebString& name, const WebString& value)
178 {
179     RELEASE_ASSERT(!equalIgnoringCase(name, "referer"));
180     m_private->m_resourceRequest->setHTTPHeaderField(name, value);
181 }
182
183 void WebURLRequest::setHTTPReferrer(const WebString& referrer, WebReferrerPolicy referrerPolicy)
184 {
185     if (referrer.isEmpty())
186         m_private->m_resourceRequest->clearHTTPReferrer();
187     else
188         m_private->m_resourceRequest->setHTTPReferrer(Referrer(referrer, static_cast<ReferrerPolicy>(referrerPolicy)));
189 }
190
191 void WebURLRequest::addHTTPHeaderField(const WebString& name, const WebString& value)
192 {
193     m_private->m_resourceRequest->addHTTPHeaderField(name, value);
194 }
195
196 void WebURLRequest::clearHTTPHeaderField(const WebString& name)
197 {
198     m_private->m_resourceRequest->clearHTTPHeaderField(name);
199 }
200
201 void WebURLRequest::visitHTTPHeaderFields(WebHTTPHeaderVisitor* visitor) const
202 {
203     const HTTPHeaderMap& map = m_private->m_resourceRequest->httpHeaderFields();
204     for (HTTPHeaderMap::const_iterator it = map.begin(); it != map.end(); ++it)
205         visitor->visitHeader(it->key, it->value);
206 }
207
208 WebHTTPBody WebURLRequest::httpBody() const
209 {
210     return WebHTTPBody(m_private->m_resourceRequest->httpBody());
211 }
212
213 void WebURLRequest::setHTTPBody(const WebHTTPBody& httpBody)
214 {
215     m_private->m_resourceRequest->setHTTPBody(httpBody);
216 }
217
218 bool WebURLRequest::reportUploadProgress() const
219 {
220     return m_private->m_resourceRequest->reportUploadProgress();
221 }
222
223 void WebURLRequest::setReportUploadProgress(bool reportUploadProgress)
224 {
225     m_private->m_resourceRequest->setReportUploadProgress(reportUploadProgress);
226 }
227
228 bool WebURLRequest::reportLoadTiming() const
229 {
230     return m_private->m_resourceRequest->reportLoadTiming();
231 }
232
233 void WebURLRequest::setReportRawHeaders(bool reportRawHeaders)
234 {
235     m_private->m_resourceRequest->setReportRawHeaders(reportRawHeaders);
236 }
237
238 bool WebURLRequest::reportRawHeaders() const
239 {
240     return m_private->m_resourceRequest->reportRawHeaders();
241 }
242
243 void WebURLRequest::setReportLoadTiming(bool reportLoadTiming)
244 {
245     m_private->m_resourceRequest->setReportLoadTiming(reportLoadTiming);
246 }
247
248 WebURLRequest::TargetType WebURLRequest::targetType() const
249 {
250     // FIXME: Temporary special case until downstream chromium.org knows of the new TargetTypes.
251     TargetType targetType = static_cast<TargetType>(m_private->m_resourceRequest->targetType());
252     if (targetType == TargetIsTextTrack || targetType == TargetIsUnspecified)
253         return TargetIsSubresource;
254     return targetType;
255 }
256
257 WebReferrerPolicy WebURLRequest::referrerPolicy() const
258 {
259     return static_cast<WebReferrerPolicy>(m_private->m_resourceRequest->referrerPolicy());
260 }
261
262 bool WebURLRequest::hasUserGesture() const
263 {
264     return m_private->m_resourceRequest->hasUserGesture();
265 }
266
267 void WebURLRequest::setHasUserGesture(bool hasUserGesture)
268 {
269     m_private->m_resourceRequest->setHasUserGesture(hasUserGesture);
270 }
271
272 void WebURLRequest::setTargetType(TargetType targetType)
273 {
274     m_private->m_resourceRequest->setTargetType(
275         static_cast<ResourceRequest::TargetType>(targetType));
276 }
277
278 int WebURLRequest::requestorID() const
279 {
280     return m_private->m_resourceRequest->requestorID();
281 }
282
283 void WebURLRequest::setRequestorID(int requestorID)
284 {
285     m_private->m_resourceRequest->setRequestorID(requestorID);
286 }
287
288 int WebURLRequest::requestorProcessID() const
289 {
290     return m_private->m_resourceRequest->requestorProcessID();
291 }
292
293 void WebURLRequest::setRequestorProcessID(int requestorProcessID)
294 {
295     m_private->m_resourceRequest->setRequestorProcessID(requestorProcessID);
296 }
297
298 int WebURLRequest::appCacheHostID() const
299 {
300     return m_private->m_resourceRequest->appCacheHostID();
301 }
302
303 void WebURLRequest::setAppCacheHostID(int appCacheHostID)
304 {
305     m_private->m_resourceRequest->setAppCacheHostID(appCacheHostID);
306 }
307
308 bool WebURLRequest::downloadToFile() const
309 {
310     return m_private->m_resourceRequest->downloadToFile();
311 }
312
313 void WebURLRequest::setDownloadToFile(bool downloadToFile)
314 {
315     m_private->m_resourceRequest->setDownloadToFile(downloadToFile);
316 }
317
318 WebURLRequest::ExtraData* WebURLRequest::extraData() const
319 {
320     RefPtr<ResourceRequest::ExtraData> data = m_private->m_resourceRequest->extraData();
321     if (!data)
322         return 0;
323     return static_cast<ExtraDataContainer*>(data.get())->extraData();
324 }
325
326 void WebURLRequest::setExtraData(WebURLRequest::ExtraData* extraData)
327 {
328     m_private->m_resourceRequest->setExtraData(ExtraDataContainer::create(extraData));
329 }
330
331 ResourceRequest& WebURLRequest::toMutableResourceRequest()
332 {
333     ASSERT(m_private);
334     ASSERT(m_private->m_resourceRequest);
335
336     return *m_private->m_resourceRequest;
337 }
338
339 WebURLRequest::Priority WebURLRequest::priority() const
340 {
341     return static_cast<WebURLRequest::Priority>(
342         m_private->m_resourceRequest->priority());
343 }
344
345 const ResourceRequest& WebURLRequest::toResourceRequest() const
346 {
347     ASSERT(m_private);
348     ASSERT(m_private->m_resourceRequest);
349
350     return *m_private->m_resourceRequest;
351 }
352
353 void WebURLRequest::assign(WebURLRequestPrivate* p)
354 {
355     // Subclasses may call this directly so a self-assignment check is needed
356     // here as well as in the public assign method.
357     if (m_private == p)
358         return;
359     if (m_private)
360         m_private->dispose();
361     m_private = p;
362 }
363
364 } // namespace blink