Upstream version 10.39.225.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() : 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