Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / modules / serviceworkers / FetchRequestData.cpp
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 "FetchRequestData.h"
7
8 #include "core/dom/Document.h"
9 #include "core/dom/ExecutionContext.h"
10 #include "core/fetch/ResourceLoaderOptions.h"
11 #include "core/loader/ThreadableLoader.h"
12 #include "modules/serviceworkers/FetchHeaderList.h"
13 #include "platform/network/ResourceRequest.h"
14 #include "public/platform/WebServiceWorkerRequest.h"
15 #include "public/platform/WebURLRequest.h"
16
17 namespace blink {
18
19 FetchRequestData* FetchRequestData::create()
20 {
21     return new FetchRequestData();
22 }
23
24 FetchRequestData* FetchRequestData::create(ExecutionContext* context)
25 {
26     FetchRequestData* request = FetchRequestData::create();
27     if (context->isDocument())
28         request->m_referrer.setClient(blink::Referrer(context->url().strippedForUseAsReferrer(), toDocument(context)->referrerPolicy()));
29     else
30         request->m_referrer.setClient(blink::Referrer(context->url().strippedForUseAsReferrer(), ReferrerPolicyDefault));
31     return request;
32 }
33
34 FetchRequestData* FetchRequestData::create(const WebServiceWorkerRequest& webRequest)
35 {
36     FetchRequestData* request = FetchRequestData::create();
37     request->m_url = webRequest.url();
38     request->m_method = webRequest.method();
39     for (HTTPHeaderMap::const_iterator it = webRequest.headers().begin(); it != webRequest.headers().end(); ++it)
40         request->m_headerList->append(it->key, it->value);
41     request->m_blobDataHandle = webRequest.blobDataHandle();
42     request->m_referrer.setURL(webRequest.referrer());
43     request->setMode(webRequest.mode());
44     request->setCredentials(webRequest.credentialsMode());
45     return request;
46 }
47
48 FetchRequestData* FetchRequestData::createRestrictedCopy(ExecutionContext* context, PassRefPtr<SecurityOrigin> origin) const
49 {
50     // "To make a restricted copy of a request |request|, run these steps:
51     // 1. Let |r| be a new request whose url is |request|'s url, method is
52     // |request|'s method, header list is a copy of |request|'s header list,
53     // body is a tee of |request|'s body, client is entry settings object's
54     // global object, origin is entry settings object's origin, referrer is
55     // |client|, context is |connect|, mode is |request|'s mode, and credentials
56     //  mode is |request|'s credentials mode."
57     FetchRequestData* request = FetchRequestData::create();
58     request->m_url = m_url;
59     request->m_method = m_method;
60     request->m_headerList = m_headerList->createCopy();
61     request->m_blobDataHandle = m_blobDataHandle;
62     request->m_origin = origin;
63     if (context->isDocument())
64         request->m_referrer.setClient(blink::Referrer(context->url().strippedForUseAsReferrer(), toDocument(context)->referrerPolicy()));
65     else
66         request->m_referrer.setClient(blink::Referrer(context->url().strippedForUseAsReferrer(), ReferrerPolicyDefault));
67     request->m_context = ConnectContext;
68     request->m_mode = m_mode;
69     request->m_credentials = m_credentials;
70     // "2. Return |r|."
71     return request;
72 }
73
74 FetchRequestData* FetchRequestData::createCopy() const
75 {
76     FetchRequestData* request = FetchRequestData::create();
77     request->m_url = m_url;
78     request->m_method = m_method;
79     request->m_headerList = m_headerList->createCopy();
80     request->m_unsafeRequestFlag = m_unsafeRequestFlag;
81     request->m_blobDataHandle = m_blobDataHandle;
82     request->m_origin = m_origin;
83     request->m_sameOriginDataURLFlag = m_sameOriginDataURLFlag;
84     request->m_context = m_context;
85     request->m_referrer = m_referrer;
86     request->m_mode = m_mode;
87     request->m_credentials = m_credentials;
88     request->m_responseTainting = m_responseTainting;
89     return request;
90 }
91
92 FetchRequestData::~FetchRequestData()
93 {
94 }
95
96 FetchRequestData::FetchRequestData()
97     : m_method("GET")
98     , m_headerList(FetchHeaderList::create())
99     , m_unsafeRequestFlag(false)
100     , m_context(NullContext)
101     , m_sameOriginDataURLFlag(false)
102     , m_mode(WebURLRequest::FetchRequestModeNoCORS)
103     , m_credentials(WebURLRequest::FetchCredentialsModeOmit)
104     , m_responseTainting(BasicTainting)
105 {
106 }
107
108 void FetchRequestData::trace(Visitor* visitor)
109 {
110     visitor->trace(m_headerList);
111 }
112
113 } // namespace blink