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