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