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 WebServiceWorkerRequest_h
6#define WebServiceWorkerRequest_h
7
8#include "WebCommon.h"
9#include "public/platform/WebPrivatePtr.h"
10#include "public/platform/WebReferrerPolicy.h"
11#include "public/platform/WebString.h"
12#include "public/platform/WebURL.h"
13
14#if INSIDE_BLINK
15#include "platform/network/HTTPHeaderMap.h"
16#include "platform/weborigin/Referrer.h"
17#include "wtf/Forward.h"
18#include "wtf/text/StringHash.h"
19#include <utility>
20#endif
21
22namespace blink {
23
24class BlobDataHandle;
25class WebHTTPHeaderVisitor;
26class WebServiceWorkerRequestPrivate;
27
28// Represents a request for a web resource.
29class BLINK_PLATFORM_EXPORT WebServiceWorkerRequest {
30public:
31    ~WebServiceWorkerRequest() { reset(); }
32    WebServiceWorkerRequest();
33    WebServiceWorkerRequest(const WebServiceWorkerRequest& other) { assign(other); }
34    WebServiceWorkerRequest& operator=(const WebServiceWorkerRequest& other)
35    {
36        assign(other);
37        return *this;
38    }
39
40    void reset();
41    void assign(const WebServiceWorkerRequest&);
42
43    void setURL(const WebURL&);
44    WebURL url() const;
45
46    void setMethod(const WebString&);
47    WebString method() const;
48
49    void setHeader(const WebString& key, const WebString& value);
50
51    // If the key already exists, the value is appended to the existing value
52    // with a comma delimiter between them.
53    void appendHeader(const WebString& key, const WebString& value);
54
55    void visitHTTPHeaderFields(WebHTTPHeaderVisitor*) const;
56
57    void setBlob(const WebString& uuid, long long size);
58
59    void setReferrer(const WebString&, WebReferrerPolicy);
60    WebURL referrerUrl() const;
61    WebReferrerPolicy referrerPolicy() const;
62
63    void setIsReload(bool);
64    bool isReload() const;
65
66#if INSIDE_BLINK
67    const HTTPHeaderMap& headers() const;
68    PassRefPtr<BlobDataHandle> blobDataHandle() const;
69    const Referrer& referrer() const;
70#endif
71
72private:
73    WebPrivatePtr<WebServiceWorkerRequestPrivate> m_private;
74};
75
76} // namespace blink
77
78#endif // WebServiceWorkerRequest_h
79