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/WebServiceWorkerResponse.h" 7 8 #include "platform/blob/BlobData.h" 9 #include "platform/network/HTTPHeaderMap.h" 10 #include "public/platform/WebHTTPHeaderVisitor.h" 11 #include "wtf/HashMap.h" 12 13 namespace blink { 14 15 class WebServiceWorkerResponsePrivate : public RefCounted<WebServiceWorkerResponsePrivate> { 16 public: 17 WebServiceWorkerResponsePrivate() : status(0) { } 18 WebURL url; 19 unsigned short status; 20 WebString statusText; 21 HTTPHeaderMap headers; 22 RefPtr<BlobDataHandle> blobDataHandle; 23 }; 24 25 WebServiceWorkerResponse::WebServiceWorkerResponse() 26 : m_private(adoptRef(new WebServiceWorkerResponsePrivate)) 27 { 28 } 29 30 void WebServiceWorkerResponse::reset() 31 { 32 m_private.reset(); 33 } 34 35 void WebServiceWorkerResponse::assign(const WebServiceWorkerResponse& other) 36 { 37 m_private = other.m_private; 38 } 39 40 void WebServiceWorkerResponse::setURL(const WebURL& url) 41 { 42 m_private->url = url; 43 } 44 45 WebURL WebServiceWorkerResponse::url() const 46 { 47 return m_private->url; 48 } 49 50 void WebServiceWorkerResponse::setStatus(unsigned short status) 51 { 52 m_private->status = status; 53 } 54 55 unsigned short WebServiceWorkerResponse::status() const 56 { 57 return m_private->status; 58 } 59 60 void WebServiceWorkerResponse::setStatusText(const WebString& statusText) 61 { 62 m_private->statusText = statusText; 63 } 64 65 WebString WebServiceWorkerResponse::statusText() const 66 { 67 return m_private->statusText; 68 } 69 70 void WebServiceWorkerResponse::setHeader(const WebString& key, const WebString& value) 71 { 72 m_private->headers.set(key, value); 73 } 74 75 void WebServiceWorkerResponse::appendHeader(const WebString& key, const WebString& value) 76 { 77 HTTPHeaderMap::AddResult addResult = m_private->headers.add(key, value); 78 if (!addResult.isNewEntry) 79 addResult.storedValue->value = addResult.storedValue->value + ", " + String(value); 80 } 81 82 WebVector<WebString> WebServiceWorkerResponse::getHeaderKeys() const 83 { 84 Vector<String> keys; 85 for (HTTPHeaderMap::const_iterator it = m_private->headers.begin(), end = m_private->headers.end(); it != end; ++it) 86 keys.append(it->key); 87 88 return keys; 89 } 90 91 WebString WebServiceWorkerResponse::getHeader(const WebString& key) const 92 { 93 return m_private->headers.get(key); 94 } 95 96 void WebServiceWorkerResponse::visitHTTPHeaderFields(WebHTTPHeaderVisitor* headerVisitor) const 97 { 98 for (HTTPHeaderMap::const_iterator i = m_private->headers.begin(), end = m_private->headers.end(); i != end; ++i) 99 headerVisitor->visitHeader(i->key, i->value); 100 } 101 102 WebString WebServiceWorkerResponse::blobUUID() const 103 { 104 if (!m_private->blobDataHandle) 105 return WebString(); 106 return m_private->blobDataHandle->uuid(); 107 } 108 109 const HTTPHeaderMap& WebServiceWorkerResponse::headers() const 110 { 111 return m_private->headers; 112 } 113 114 void WebServiceWorkerResponse::setBlobDataHandle(PassRefPtr<BlobDataHandle> blobDataHandle) 115 { 116 m_private->blobDataHandle = blobDataHandle; 117 } 118 119 PassRefPtr<BlobDataHandle> WebServiceWorkerResponse::blobDataHandle() const 120 { 121 return m_private->blobDataHandle; 122 } 123 124 } // namespace blink 125