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)#ifndef WebServiceWorkerResponse_h
6d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#define WebServiceWorkerResponse_h
7d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
8d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "WebCommon.h"
9d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "public/platform/WebPrivatePtr.h"
10d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "public/platform/WebString.h"
11197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "public/platform/WebURL.h"
12d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "public/platform/WebVector.h"
13d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
14d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#if INSIDE_BLINK
15d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "wtf/Forward.h"
16d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "wtf/HashMap.h"
17d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "wtf/text/StringHash.h"
18f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#endif
19d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
20d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)namespace blink {
21d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
22e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)class BlobDataHandle;
237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass HTTPHeaderMap;
247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass WebHTTPHeaderVisitor;
25d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class WebServiceWorkerResponsePrivate;
26d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
27d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Represents a response to a fetch operation. ServiceWorker uses this to
28d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// respond to a FetchEvent dispatched by the browser. The plan is for the Cache
29d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// and fetch() API to also use it.
30d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class BLINK_PLATFORM_EXPORT WebServiceWorkerResponse {
31d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)public:
32d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    ~WebServiceWorkerResponse() { reset(); }
33d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    WebServiceWorkerResponse();
347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    WebServiceWorkerResponse(const WebServiceWorkerResponse& other) { assign(other); }
35d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    WebServiceWorkerResponse& operator=(const WebServiceWorkerResponse& other)
36d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    {
37d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        assign(other);
38d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)        return *this;
39d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    }
40d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
41d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void reset();
42d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void assign(const WebServiceWorkerResponse&);
43d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
44197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void setURL(const WebURL&);
45197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    WebURL url() const;
46197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
47d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void setStatus(unsigned short);
48d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    unsigned short status() const;
49d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
50d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setStatusText(const WebString&);
51d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    WebString statusText() const;
52d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
53d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void setHeader(const WebString& key, const WebString& value);
547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    // If the key already exists, appends the value to the same key (comma
567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    // delimited) else creates a new entry.
577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void appendHeader(const WebString& key, const WebString& value);
587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
59d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    WebVector<WebString> getHeaderKeys() const;
60d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    WebString getHeader(const WebString& key) const;
617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void visitHTTPHeaderFields(WebHTTPHeaderVisitor*) const;
62d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
63f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    WebString blobUUID() const;
64f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)
65d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#if INSIDE_BLINK
667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    const HTTPHeaderMap& headers() const;
67d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
68e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    void setBlobDataHandle(PassRefPtr<BlobDataHandle>);
69e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    PassRefPtr<BlobDataHandle> blobDataHandle() const;
70f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#endif
71d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
72d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)private:
73d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    WebPrivatePtr<WebServiceWorkerResponsePrivate> m_private;
74d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)};
75d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
76d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} // namespace blink
77d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
78d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#endif // WebServiceWorkerResponse_h
79