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.
6 #include "public/platform/WebServiceWorkerResponse.h"
8 #include "platform/blob/BlobData.h"
9 #include "platform/network/HTTPHeaderMap.h"
10 #include "public/platform/WebHTTPHeaderVisitor.h"
11 #include "wtf/HashMap.h"
15 class WebServiceWorkerResponsePrivate : public RefCounted<WebServiceWorkerResponsePrivate> {
17 WebServiceWorkerResponsePrivate()
19 , responseType(WebServiceWorkerResponseTypeOpaque)
23 unsigned short status;
25 WebServiceWorkerResponseType responseType;
26 HTTPHeaderMap headers;
27 RefPtr<BlobDataHandle> blobDataHandle;
30 WebServiceWorkerResponse::WebServiceWorkerResponse()
31 : m_private(adoptRef(new WebServiceWorkerResponsePrivate))
35 void WebServiceWorkerResponse::reset()
40 void WebServiceWorkerResponse::assign(const WebServiceWorkerResponse& other)
42 m_private = other.m_private;
45 void WebServiceWorkerResponse::setURL(const WebURL& url)
50 WebURL WebServiceWorkerResponse::url() const
52 return m_private->url;
55 void WebServiceWorkerResponse::setStatus(unsigned short status)
57 m_private->status = status;
60 unsigned short WebServiceWorkerResponse::status() const
62 return m_private->status;
65 void WebServiceWorkerResponse::setStatusText(const WebString& statusText)
67 m_private->statusText = statusText;
70 WebString WebServiceWorkerResponse::statusText() const
72 return m_private->statusText;
75 void WebServiceWorkerResponse::setResponseType(WebServiceWorkerResponseType responseType)
77 m_private->responseType = responseType;
80 WebServiceWorkerResponseType WebServiceWorkerResponse::responseType() const
82 return m_private->responseType;
85 void WebServiceWorkerResponse::setHeader(const WebString& key, const WebString& value)
87 m_private->headers.set(key, value);
90 void WebServiceWorkerResponse::appendHeader(const WebString& key, const WebString& value)
92 HTTPHeaderMap::AddResult addResult = m_private->headers.add(key, value);
93 if (!addResult.isNewEntry)
94 addResult.storedValue->value = addResult.storedValue->value + ", " + String(value);
97 WebVector<WebString> WebServiceWorkerResponse::getHeaderKeys() const
100 for (HTTPHeaderMap::const_iterator it = m_private->headers.begin(), end = m_private->headers.end(); it != end; ++it)
101 keys.append(it->key);
106 WebString WebServiceWorkerResponse::getHeader(const WebString& key) const
108 return m_private->headers.get(key);
111 void WebServiceWorkerResponse::visitHTTPHeaderFields(WebHTTPHeaderVisitor* headerVisitor) const
113 for (HTTPHeaderMap::const_iterator i = m_private->headers.begin(), end = m_private->headers.end(); i != end; ++i)
114 headerVisitor->visitHeader(i->key, i->value);
117 void WebServiceWorkerResponse::setBlob(const WebString& uuid, uint64_t size)
119 m_private->blobDataHandle = BlobDataHandle::create(uuid, String(), size);
122 WebString WebServiceWorkerResponse::blobUUID() const
124 if (!m_private->blobDataHandle)
126 return m_private->blobDataHandle->uuid();
129 uint64_t WebServiceWorkerResponse::blobSize() const
131 if (!m_private->blobDataHandle)
133 return m_private->blobDataHandle->size();
136 const HTTPHeaderMap& WebServiceWorkerResponse::headers() const
138 return m_private->headers;
141 void WebServiceWorkerResponse::setBlobDataHandle(PassRefPtr<BlobDataHandle> blobDataHandle)
143 m_private->blobDataHandle = blobDataHandle;
146 PassRefPtr<BlobDataHandle> WebServiceWorkerResponse::blobDataHandle() const
148 return m_private->blobDataHandle;