Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / platform / exported / WebServiceWorkerResponse.cpp
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()
18         : status(0)
19         , responseType(WebServiceWorkerResponseTypeOpaque)
20     {
21     }
22     WebURL url;
23     unsigned short status;
24     WebString statusText;
25     WebServiceWorkerResponseType responseType;
26     HTTPHeaderMap headers;
27     RefPtr<BlobDataHandle> blobDataHandle;
28 };
29
30 WebServiceWorkerResponse::WebServiceWorkerResponse()
31     : m_private(adoptRef(new WebServiceWorkerResponsePrivate))
32 {
33 }
34
35 void WebServiceWorkerResponse::reset()
36 {
37     m_private.reset();
38 }
39
40 void WebServiceWorkerResponse::assign(const WebServiceWorkerResponse& other)
41 {
42     m_private = other.m_private;
43 }
44
45 void WebServiceWorkerResponse::setURL(const WebURL& url)
46 {
47     m_private->url = url;
48 }
49
50 WebURL WebServiceWorkerResponse::url() const
51 {
52     return m_private->url;
53 }
54
55 void WebServiceWorkerResponse::setStatus(unsigned short status)
56 {
57     m_private->status = status;
58 }
59
60 unsigned short WebServiceWorkerResponse::status() const
61 {
62     return m_private->status;
63 }
64
65 void WebServiceWorkerResponse::setStatusText(const WebString& statusText)
66 {
67     m_private->statusText = statusText;
68 }
69
70 WebString WebServiceWorkerResponse::statusText() const
71 {
72     return m_private->statusText;
73 }
74
75 void WebServiceWorkerResponse::setResponseType(WebServiceWorkerResponseType responseType)
76 {
77     m_private->responseType = responseType;
78 }
79
80 WebServiceWorkerResponseType WebServiceWorkerResponse::responseType() const
81 {
82     return m_private->responseType;
83 }
84
85 void WebServiceWorkerResponse::setHeader(const WebString& key, const WebString& value)
86 {
87     m_private->headers.set(key, value);
88 }
89
90 void WebServiceWorkerResponse::appendHeader(const WebString& key, const WebString& value)
91 {
92     HTTPHeaderMap::AddResult addResult = m_private->headers.add(key, value);
93     if (!addResult.isNewEntry)
94         addResult.storedValue->value = addResult.storedValue->value + ", " + String(value);
95 }
96
97 WebVector<WebString> WebServiceWorkerResponse::getHeaderKeys() const
98 {
99     Vector<String> keys;
100     for (HTTPHeaderMap::const_iterator it = m_private->headers.begin(), end = m_private->headers.end(); it != end; ++it)
101         keys.append(it->key);
102
103     return keys;
104 }
105
106 WebString WebServiceWorkerResponse::getHeader(const WebString& key) const
107 {
108     return m_private->headers.get(key);
109 }
110
111 void WebServiceWorkerResponse::visitHTTPHeaderFields(WebHTTPHeaderVisitor* headerVisitor) const
112 {
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);
115 }
116
117 void WebServiceWorkerResponse::setBlob(const WebString& uuid, uint64_t size)
118 {
119     m_private->blobDataHandle = BlobDataHandle::create(uuid, String(), size);
120 }
121
122 WebString WebServiceWorkerResponse::blobUUID() const
123 {
124     if (!m_private->blobDataHandle)
125         return WebString();
126     return m_private->blobDataHandle->uuid();
127 }
128
129 uint64_t WebServiceWorkerResponse::blobSize() const
130 {
131     if (!m_private->blobDataHandle)
132         return 0;
133     return m_private->blobDataHandle->size();
134 }
135
136 const HTTPHeaderMap& WebServiceWorkerResponse::headers() const
137 {
138     return m_private->headers;
139 }
140
141 void WebServiceWorkerResponse::setBlobDataHandle(PassRefPtr<BlobDataHandle> blobDataHandle)
142 {
143     m_private->blobDataHandle = blobDataHandle;
144 }
145
146 PassRefPtr<BlobDataHandle> WebServiceWorkerResponse::blobDataHandle() const
147 {
148     return m_private->blobDataHandle;
149 }
150
151 } // namespace blink