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 Request_h
6#define Request_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/FetchRequestData.h"
12#include "modules/serviceworkers/Headers.h"
13#include "platform/heap/Handle.h"
14#include "platform/weborigin/KURL.h"
15#include "wtf/RefPtr.h"
16#include "wtf/text/WTFString.h"
17
18namespace blink {
19
20class RequestInit;
21struct ResourceLoaderOptions;
22class ResourceRequest;
23struct ThreadableLoaderOptions;
24class WebServiceWorkerRequest;
25
26class Request FINAL : public Body {
27    DEFINE_WRAPPERTYPEINFO();
28public:
29    virtual ~Request() { }
30    static Request* create(ExecutionContext*, const String&, ExceptionState&);
31    static Request* create(ExecutionContext*, const String&, const Dictionary&, ExceptionState&);
32    static Request* create(ExecutionContext*, Request*, ExceptionState&);
33    static Request* create(ExecutionContext*, Request*, const Dictionary&, ExceptionState&);
34    static Request* create(ExecutionContext*, FetchRequestData*);
35    static Request* create(ExecutionContext*, const WebServiceWorkerRequest&);
36    // The 'FetchRequestData' object is shared between requests, as it is
37    // immutable to the user after Request creation. Headers are copied.
38    static Request* create(const Request&);
39
40    const FetchRequestData* request() { return m_request; }
41
42    String method() const;
43    String url() const;
44    Headers* headers() const { return m_headers; }
45    String referrer() const;
46    String mode() const;
47    String credentials() const;
48
49    Request* clone() const;
50
51    void populateWebServiceWorkerRequest(WebServiceWorkerRequest&);
52
53    void setBodyBlobHandle(PassRefPtr<BlobDataHandle>);
54
55    virtual void trace(Visitor*)  OVERRIDE;
56
57private:
58    explicit Request(const Request&);
59    Request(ExecutionContext*, FetchRequestData*);
60    Request(ExecutionContext*, const WebServiceWorkerRequest&);
61
62    static Request* createRequestWithRequestData(ExecutionContext*, FetchRequestData*, const RequestInit&, FetchRequestData::Mode, FetchRequestData::Credentials, ExceptionState&);
63    void clearHeaderList();
64
65    virtual PassRefPtr<BlobDataHandle> blobDataHandle() OVERRIDE;
66
67    const Member<FetchRequestData> m_request;
68    const Member<Headers> m_headers;
69};
70
71} // namespace blink
72
73#endif // Request_h
74