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() : status(0) { }
19 unsigned short status;
21 HTTPHeaderMap headers;
22 RefPtr<BlobDataHandle> blobDataHandle;
25 WebServiceWorkerResponse::WebServiceWorkerResponse()
26 : m_private(adoptRef(new WebServiceWorkerResponsePrivate))
30 void WebServiceWorkerResponse::reset()
35 void WebServiceWorkerResponse::assign(const WebServiceWorkerResponse& other)
37 m_private = other.m_private;
40 void WebServiceWorkerResponse::setURL(const WebURL& url)
45 WebURL WebServiceWorkerResponse::url() const
47 return m_private->url;
50 void WebServiceWorkerResponse::setStatus(unsigned short status)
52 m_private->status = status;
55 unsigned short WebServiceWorkerResponse::status() const
57 return m_private->status;
60 void WebServiceWorkerResponse::setStatusText(const WebString& statusText)
62 m_private->statusText = statusText;
65 WebString WebServiceWorkerResponse::statusText() const
67 return m_private->statusText;
70 void WebServiceWorkerResponse::setHeader(const WebString& key, const WebString& value)
72 m_private->headers.set(key, value);
75 void WebServiceWorkerResponse::appendHeader(const WebString& key, const WebString& value)
77 HTTPHeaderMap::AddResult addResult = m_private->headers.add(key, value);
78 if (!addResult.isNewEntry)
79 addResult.storedValue->value = addResult.storedValue->value + ", " + String(value);
82 WebVector<WebString> WebServiceWorkerResponse::getHeaderKeys() const
85 for (HTTPHeaderMap::const_iterator it = m_private->headers.begin(), end = m_private->headers.end(); it != end; ++it)
91 WebString WebServiceWorkerResponse::getHeader(const WebString& key) const
93 return m_private->headers.get(key);
96 void WebServiceWorkerResponse::visitHTTPHeaderFields(WebHTTPHeaderVisitor* headerVisitor) const
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);
102 WebString WebServiceWorkerResponse::blobUUID() const
104 if (!m_private->blobDataHandle)
106 return m_private->blobDataHandle->uuid();
109 const HTTPHeaderMap& WebServiceWorkerResponse::headers() const
111 return m_private->headers;
114 void WebServiceWorkerResponse::setBlobDataHandle(PassRefPtr<BlobDataHandle> blobDataHandle)
116 m_private->blobDataHandle = blobDataHandle;
119 PassRefPtr<BlobDataHandle> WebServiceWorkerResponse::blobDataHandle() const
121 return m_private->blobDataHandle;