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#ifndef WebServiceWorkerResponse_h
6#define WebServiceWorkerResponse_h
7
8#include "WebCommon.h"
9#include "public/platform/WebPrivatePtr.h"
10#include "public/platform/WebString.h"
11#include "public/platform/WebVector.h"
12
13#if INSIDE_BLINK
14#include "wtf/Forward.h"
15#include "wtf/HashMap.h"
16#include "wtf/text/StringHash.h"
17
18namespace WebCore {
19class BlobDataHandle;
20}
21#endif
22
23namespace blink {
24
25class WebServiceWorkerResponsePrivate;
26
27// Represents a response to a fetch operation. ServiceWorker uses this to
28// respond to a FetchEvent dispatched by the browser. The plan is for the Cache
29// and fetch() API to also use it.
30class BLINK_PLATFORM_EXPORT WebServiceWorkerResponse {
31public:
32    ~WebServiceWorkerResponse() { reset(); }
33    WebServiceWorkerResponse();
34    WebServiceWorkerResponse& operator=(const WebServiceWorkerResponse& other)
35    {
36        assign(other);
37        return *this;
38    }
39
40    void reset();
41    void assign(const WebServiceWorkerResponse&);
42
43    void setStatus(unsigned short);
44    unsigned short status() const;
45
46    void setStatusText(const WebString&);
47    WebString statusText() const;
48
49    void setHeader(const WebString& key, const WebString& value);
50    WebVector<WebString> getHeaderKeys() const;
51    WebString getHeader(const WebString& key) const;
52
53    WebString blobUUID() const;
54
55#if INSIDE_BLINK
56    void setHeaders(const HashMap<String, String>&);
57    const HashMap<String, String>& headers() const;
58
59    void setBlobDataHandle(PassRefPtr<WebCore::BlobDataHandle>);
60    PassRefPtr<WebCore::BlobDataHandle> blobDataHandle() const;
61#endif
62
63private:
64    WebPrivatePtr<WebServiceWorkerResponsePrivate> m_private;
65};
66
67} // namespace blink
68
69#endif // WebServiceWorkerResponse_h
70