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: 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 26 WebServiceWorkerRequest::WebServiceWorkerRequest() 27 : m_private(adoptRef(new WebServiceWorkerRequestPrivate)) 28 { 29 } 30 31 void WebServiceWorkerRequest::reset() 32 { 33 m_private.reset(); 34 } 35 36 void WebServiceWorkerRequest::assign(const WebServiceWorkerRequest& other) 37 { 38 m_private = other.m_private; 39 } 40 41 void WebServiceWorkerRequest::setURL(const WebURL& url) 42 { 43 m_private->m_url = url; 44 } 45 46 WebURL WebServiceWorkerRequest::url() const 47 { 48 return m_private->m_url; 49 } 50 51 void WebServiceWorkerRequest::setMethod(const WebString& method) 52 { 53 m_private->m_method = method; 54 } 55 56 WebString WebServiceWorkerRequest::method() const 57 { 58 return m_private->m_method; 59 } 60 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 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 77 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 83 const HTTPHeaderMap& WebServiceWorkerRequest::headers() const 84 { 85 return m_private->m_headers; 86 } 87 88 void WebServiceWorkerRequest::setBlob(const WebString& uuid, long long size) 89 { 90 m_private->blobDataHandle = BlobDataHandle::create(uuid, String(), size); 91 } 92 93 PassRefPtr<BlobDataHandle> WebServiceWorkerRequest::blobDataHandle() const 94 { 95 return m_private->blobDataHandle; 96 } 97 98 void WebServiceWorkerRequest::setReferrer(const WebString& referrer, WebReferrerPolicy referrerPolicy) 99 { 100 m_private->m_referrer = Referrer(referrer, static_cast<ReferrerPolicy>(referrerPolicy)); 101 } 102 103 WebURL WebServiceWorkerRequest::referrerUrl() const 104 { 105 return KURL(ParsedURLString, m_private->m_referrer.referrer); 106 } 107 108 WebReferrerPolicy WebServiceWorkerRequest::referrerPolicy() const 109 { 110 return static_cast<WebReferrerPolicy>(m_private->m_referrer.referrerPolicy); 111 } 112 113 const Referrer& WebServiceWorkerRequest::referrer() const 114 { 115 return m_private->m_referrer; 116 } 117 118 void WebServiceWorkerRequest::setIsReload(bool isReload) 119 { 120 m_private->m_isReload = isReload; 121 } 122 123 bool WebServiceWorkerRequest::isReload() const 124 { 125 return m_private->m_isReload; 126 } 127 128 } // namespace blink 129