1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "config.h"
6 #include "public/platform/WebServiceWorkerRequest.h"
7
8 #include "platform/blob/BlobData.h"
9 #include "platform/weborigin/KURL.h"
10 #include "public/platform/WebHTTPHeaderVisitor.h"
11
12 namespace blink {
13
14 class WebServiceWorkerRequestPrivate : public RefCounted<WebServiceWorkerRequestPrivate> {
15 public:
WebServiceWorkerRequestPrivate()16 WebServiceWorkerRequestPrivate()
17 : m_isReload(false) { }
18 WebURL m_url;
19 WebString m_method;
20 HTTPHeaderMap m_headers;
21 RefPtr<BlobDataHandle> blobDataHandle;
22 Referrer m_referrer;
23 bool m_isReload;
24 };
25
WebServiceWorkerRequest()26 WebServiceWorkerRequest::WebServiceWorkerRequest()
27 : m_private(adoptRef(new WebServiceWorkerRequestPrivate))
28 {
29 }
30
reset()31 void WebServiceWorkerRequest::reset()
32 {
33 m_private.reset();
34 }
35
assign(const WebServiceWorkerRequest & other)36 void WebServiceWorkerRequest::assign(const WebServiceWorkerRequest& other)
37 {
38 m_private = other.m_private;
39 }
40
setURL(const WebURL & url)41 void WebServiceWorkerRequest::setURL(const WebURL& url)
42 {
43 m_private->m_url = url;
44 }
45
url() const46 WebURL WebServiceWorkerRequest::url() const
47 {
48 return m_private->m_url;
49 }
50
setMethod(const WebString & method)51 void WebServiceWorkerRequest::setMethod(const WebString& method)
52 {
53 m_private->m_method = method;
54 }
55
method() const56 WebString WebServiceWorkerRequest::method() const
57 {
58 return m_private->m_method;
59 }
60
setHeader(const WebString & key,const WebString & value)61 void WebServiceWorkerRequest::setHeader(const WebString& key, const WebString& value)
62 {
63 if (equalIgnoringCase(key, "referer"))
64 return;
65 m_private->m_headers.set(key, value);
66 }
67
appendHeader(const WebString & key,const WebString & value)68 void WebServiceWorkerRequest::appendHeader(const WebString& key, const WebString& value)
69 {
70 if (equalIgnoringCase(key, "referer"))
71 return;
72 HTTPHeaderMap::AddResult result = m_private->m_headers.add(key, value);
73 if (!result.isNewEntry)
74 result.storedValue->value = result.storedValue->value + ", " + String(value);
75 }
76
visitHTTPHeaderFields(WebHTTPHeaderVisitor * headerVisitor) const77 void WebServiceWorkerRequest::visitHTTPHeaderFields(WebHTTPHeaderVisitor* headerVisitor) const
78 {
79 for (HTTPHeaderMap::const_iterator i = m_private->m_headers.begin(), end = m_private->m_headers.end(); i != end; ++i)
80 headerVisitor->visitHeader(i->key, i->value);
81 }
82
headers() const83 const HTTPHeaderMap& WebServiceWorkerRequest::headers() const
84 {
85 return m_private->m_headers;
86 }
87
setBlob(const WebString & uuid,long long size)88 void WebServiceWorkerRequest::setBlob(const WebString& uuid, long long size)
89 {
90 m_private->blobDataHandle = BlobDataHandle::create(uuid, String(), size);
91 }
92
blobDataHandle() const93 PassRefPtr<BlobDataHandle> WebServiceWorkerRequest::blobDataHandle() const
94 {
95 return m_private->blobDataHandle;
96 }
97
setReferrer(const WebString & referrer,WebReferrerPolicy referrerPolicy)98 void WebServiceWorkerRequest::setReferrer(const WebString& referrer, WebReferrerPolicy referrerPolicy)
99 {
100 m_private->m_referrer = Referrer(referrer, static_cast<ReferrerPolicy>(referrerPolicy));
101 }
102
referrerUrl() const103 WebURL WebServiceWorkerRequest::referrerUrl() const
104 {
105 return KURL(ParsedURLString, m_private->m_referrer.referrer);
106 }
107
referrerPolicy() const108 WebReferrerPolicy WebServiceWorkerRequest::referrerPolicy() const
109 {
110 return static_cast<WebReferrerPolicy>(m_private->m_referrer.referrerPolicy);
111 }
112
referrer() const113 const Referrer& WebServiceWorkerRequest::referrer() const
114 {
115 return m_private->m_referrer;
116 }
117
setIsReload(bool isReload)118 void WebServiceWorkerRequest::setIsReload(bool isReload)
119 {
120 m_private->m_isReload = isReload;
121 }
122
isReload() const123 bool WebServiceWorkerRequest::isReload() const
124 {
125 return m_private->m_isReload;
126 }
127
128 } // namespace blink
129