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