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#include "config.h"
6#include "public/platform/WebServiceWorkerRequest.h"
7
8#include "platform/blob/BlobData.h"
9#include "platform/weborigin/KURL.h"
10#include "public/platform/WebHTTPHeaderVisitor.h"
11
12namespace blink {
13
14class WebServiceWorkerRequestPrivate : public RefCounted<WebServiceWorkerRequestPrivate> {
15public:
16    WebServiceWorkerRequestPrivate()
17        : m_isReload(false) { }
18    WebURL m_url;
19    WebString m_method;
20    HTTPHeaderMap m_headers;
21    RefPtr<BlobDataHandle> blobDataHandle;
22    Referrer m_referrer;
23    bool m_isReload;
24};
25
26WebServiceWorkerRequest::WebServiceWorkerRequest()
27    : m_private(adoptRef(new WebServiceWorkerRequestPrivate))
28{
29}
30
31void WebServiceWorkerRequest::reset()
32{
33    m_private.reset();
34}
35
36void WebServiceWorkerRequest::assign(const WebServiceWorkerRequest& other)
37{
38    m_private = other.m_private;
39}
40
41void WebServiceWorkerRequest::setURL(const WebURL& url)
42{
43    m_private->m_url = url;
44}
45
46WebURL WebServiceWorkerRequest::url() const
47{
48    return m_private->m_url;
49}
50
51void WebServiceWorkerRequest::setMethod(const WebString& method)
52{
53    m_private->m_method = method;
54}
55
56WebString WebServiceWorkerRequest::method() const
57{
58    return m_private->m_method;
59}
60
61void WebServiceWorkerRequest::setHeader(const WebString& key, const WebString& value)
62{
63    if (equalIgnoringCase(key, "referer"))
64        return;
65    m_private->m_headers.set(key, value);
66}
67
68void WebServiceWorkerRequest::appendHeader(const WebString& key, const WebString& value)
69{
70    if (equalIgnoringCase(key, "referer"))
71        return;
72    HTTPHeaderMap::AddResult result = m_private->m_headers.add(key, value);
73    if (!result.isNewEntry)
74        result.storedValue->value = result.storedValue->value + ", " + String(value);
75}
76
77void WebServiceWorkerRequest::visitHTTPHeaderFields(WebHTTPHeaderVisitor* headerVisitor) const
78{
79    for (HTTPHeaderMap::const_iterator i = m_private->m_headers.begin(), end = m_private->m_headers.end(); i != end; ++i)
80        headerVisitor->visitHeader(i->key, i->value);
81}
82
83const HTTPHeaderMap& WebServiceWorkerRequest::headers() const
84{
85    return m_private->m_headers;
86}
87
88void WebServiceWorkerRequest::setBlob(const WebString& uuid, long long size)
89{
90    m_private->blobDataHandle = BlobDataHandle::create(uuid, String(), size);
91}
92
93PassRefPtr<BlobDataHandle> WebServiceWorkerRequest::blobDataHandle() const
94{
95    return m_private->blobDataHandle;
96}
97
98void WebServiceWorkerRequest::setReferrer(const WebString& referrer, WebReferrerPolicy referrerPolicy)
99{
100    m_private->m_referrer = Referrer(referrer, static_cast<ReferrerPolicy>(referrerPolicy));
101}
102
103WebURL WebServiceWorkerRequest::referrerUrl() const
104{
105    return KURL(ParsedURLString, m_private->m_referrer.referrer);
106}
107
108WebReferrerPolicy WebServiceWorkerRequest::referrerPolicy() const
109{
110    return static_cast<WebReferrerPolicy>(m_private->m_referrer.referrerPolicy);
111}
112
113const Referrer& WebServiceWorkerRequest::referrer() const
114{
115    return m_private->m_referrer;
116}
117
118void WebServiceWorkerRequest::setIsReload(bool isReload)
119{
120    m_private->m_isReload = isReload;
121}
122
123bool WebServiceWorkerRequest::isReload() const
124{
125    return m_private->m_isReload;
126}
127
128} // namespace blink
129