Home | History | Annotate | Download | only in exported
      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
    125