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 Response_h
6#define Response_h
7
8#include "bindings/core/v8/Dictionary.h"
9#include "bindings/core/v8/ScriptWrappable.h"
10#include "modules/serviceworkers/Body.h"
11#include "modules/serviceworkers/FetchResponseData.h"
12#include "modules/serviceworkers/Headers.h"
13#include "platform/blob/BlobData.h"
14#include "platform/heap/Handle.h"
15#include "wtf/Forward.h"
16
17namespace blink {
18
19class Blob;
20class ExceptionState;
21class ResponseInit;
22class WebServiceWorkerResponse;
23
24class Response FINAL : public Body {
25    DEFINE_WRAPPERTYPEINFO();
26public:
27    virtual ~Response() { }
28    static Response* create(ExecutionContext*, Blob*, const Dictionary&, ExceptionState&);
29    static Response* create(ExecutionContext*, const String&, const Dictionary&, ExceptionState&);
30    static Response* create(ExecutionContext*, const ArrayBuffer*, const Dictionary&, ExceptionState&);
31    static Response* create(ExecutionContext*, const ArrayBufferView*, const Dictionary&, ExceptionState&);
32    static Response* create(ExecutionContext*, Blob*, const ResponseInit&, ExceptionState&);
33    static Response* create(ExecutionContext*, FetchResponseData*);
34    static Response* create(ExecutionContext*, const WebServiceWorkerResponse&);
35    // The 'FetchResponseData' object is shared between responses, as it is
36    // immutable to the user after Response creation. Headers are copied.
37    static Response* create(const Response&);
38
39    String type() const;
40    String url() const;
41    unsigned short status() const;
42    String statusText() const;
43    Headers* headers() const;
44
45    Response* clone() const;
46
47    void populateWebServiceWorkerResponse(WebServiceWorkerResponse&);
48
49    virtual void trace(Visitor*) OVERRIDE;
50
51private:
52    explicit Response(const Response&);
53    explicit Response(ExecutionContext*);
54    Response(ExecutionContext*, FetchResponseData*);
55    Response(ExecutionContext*, const WebServiceWorkerResponse&);
56
57    virtual PassRefPtr<BlobDataHandle> blobDataHandle() OVERRIDE;
58
59    const Member<FetchResponseData> m_response;
60    const Member<Headers> m_headers;
61};
62
63} // namespace blink
64
65#endif // Response_h
66