1d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// found in the LICENSE file.
4d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
5d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "config.h"
6d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "public/platform/WebServiceWorkerResponse.h"
7d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
8f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#include "platform/blob/BlobData.h"
97242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "platform/network/HTTPHeaderMap.h"
107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "public/platform/WebHTTPHeaderVisitor.h"
117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "wtf/HashMap.h"
12f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)
13d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)namespace blink {
14d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
15d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class WebServiceWorkerResponsePrivate : public RefCounted<WebServiceWorkerResponsePrivate> {
16d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)public:
177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    WebServiceWorkerResponsePrivate() : status(0) { }
18197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    WebURL url;
19d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    unsigned short status;
20d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    WebString statusText;
217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    HTTPHeaderMap headers;
22e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    RefPtr<BlobDataHandle> blobDataHandle;
23d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)};
24d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
25d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)WebServiceWorkerResponse::WebServiceWorkerResponse()
26d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    : m_private(adoptRef(new WebServiceWorkerResponsePrivate))
27d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){
28d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)}
29d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
30d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void WebServiceWorkerResponse::reset()
31d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){
32d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    m_private.reset();
33d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)}
34d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
35d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void WebServiceWorkerResponse::assign(const WebServiceWorkerResponse& other)
36d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){
37d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    m_private = other.m_private;
38d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)}
39d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
40197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid WebServiceWorkerResponse::setURL(const WebURL& url)
41197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{
42197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    m_private->url = url;
43197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch}
44197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
45197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebURL WebServiceWorkerResponse::url() const
46197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{
47197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    return m_private->url;
48197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch}
49197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
50d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void WebServiceWorkerResponse::setStatus(unsigned short status)
51d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
52d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    m_private->status = status;
53d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
54d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
55d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)unsigned short WebServiceWorkerResponse::status() const
56d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
57d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    return m_private->status;
58d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
59d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
60d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void WebServiceWorkerResponse::setStatusText(const WebString& statusText)
61d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
62d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    m_private->statusText = statusText;
63d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
64d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
65d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebString WebServiceWorkerResponse::statusText() const
66d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
67d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    return m_private->statusText;
68d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)}
69d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
70d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void WebServiceWorkerResponse::setHeader(const WebString& key, const WebString& value)
71d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){
72d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    m_private->headers.set(key, value);
73d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)}
74d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid WebServiceWorkerResponse::appendHeader(const WebString& key, const WebString& value)
767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    HTTPHeaderMap::AddResult addResult = m_private->headers.add(key, value);
787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (!addResult.isNewEntry)
797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        addResult.storedValue->value = addResult.storedValue->value + ", " + String(value);
807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
82d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)WebVector<WebString> WebServiceWorkerResponse::getHeaderKeys() const
83d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){
84d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    Vector<String> keys;
857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    for (HTTPHeaderMap::const_iterator it = m_private->headers.begin(), end = m_private->headers.end(); it != end; ++it)
867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        keys.append(it->key);
877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
88d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    return keys;
89d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)}
90d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
91d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)WebString WebServiceWorkerResponse::getHeader(const WebString& key) const
92d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){
93d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    return m_private->headers.get(key);
94d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
95d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid WebServiceWorkerResponse::visitHTTPHeaderFields(WebHTTPHeaderVisitor* headerVisitor) const
977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    for (HTTPHeaderMap::const_iterator i = m_private->headers.begin(), end = m_private->headers.end(); i != end; ++i)
997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        headerVisitor->visitHeader(i->key, i->value);
1007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
1017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
102f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)WebString WebServiceWorkerResponse::blobUUID() const
103f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){
104f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    if (!m_private->blobDataHandle)
105f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)        return WebString();
106f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    return m_private->blobDataHandle->uuid();
107f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)}
108f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)
1097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciconst HTTPHeaderMap& WebServiceWorkerResponse::headers() const
110d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){
111d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    return m_private->headers;
112d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)}
113d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
114e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void WebServiceWorkerResponse::setBlobDataHandle(PassRefPtr<BlobDataHandle> blobDataHandle)
115f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){
116f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    m_private->blobDataHandle = blobDataHandle;
117f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)}
118f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)
119e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)PassRefPtr<BlobDataHandle> WebServiceWorkerResponse::blobDataHandle() const
120f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){
121f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    return m_private->blobDataHandle;
122f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)}
123f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)
124d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} // namespace blink
125