OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "Response.h" | 6 #include "Response.h" |
7 | 7 |
8 #include "bindings/core/v8/Dictionary.h" | 8 #include "bindings/core/v8/Dictionary.h" |
9 #include "bindings/core/v8/ExceptionState.h" | |
9 #include "core/fileapi/Blob.h" | 10 #include "core/fileapi/Blob.h" |
10 #include "modules/serviceworkers/FetchBodyStream.h" | 11 #include "modules/serviceworkers/FetchBodyStream.h" |
11 #include "modules/serviceworkers/ResponseInit.h" | 12 #include "modules/serviceworkers/ResponseInit.h" |
13 #include "public/platform/WebServiceWorkerResponse.h" | |
12 | 14 |
13 namespace blink { | 15 namespace blink { |
14 | 16 |
17 namespace { | |
18 | |
19 PassRefPtrWillBeRawPtr<FetchResponseData> createFetchResponseDataFromWebResponse (const WebServiceWorkerResponse& webResponse) | |
20 { | |
21 RefPtrWillBeRawPtr<FetchResponseData> response; | |
22 if (webResponse.status() < 200 || webResponse.status() >= 300) | |
23 response = FetchResponseData::createNetworkErrorResponse(); | |
24 else | |
25 response = FetchResponseData::create(); | |
26 | |
27 response->setURL(webResponse.url()); | |
28 response->setStatus(webResponse.status()); | |
29 response->setStatusMessage(webResponse.statusText()); | |
30 return response; | |
31 } | |
32 | |
33 PassRefPtrWillBeRawPtr<Headers> createHeadersFromWebResponse(const WebServiceWor kerResponse& webResponse) | |
34 { | |
35 RefPtrWillBeRawPtr<Headers> headers = Headers::create(); | |
36 TrackExceptionState exceptionState; | |
dominicc (has gone to gerrit)
2014/08/11 01:40:41
Why does this track exceptions? Seems rather voodo
gavinp
2014/08/13 23:25:23
I have ABSOLUTELY NO IDEA. I was shocked that this
| |
37 for (HashMap<String, String>::const_iterator i = webResponse.headers().begin (), end = webResponse.headers().end(); i != end; ++i) { | |
38 headers->append(i->key, i->value, exceptionState); | |
39 if (exceptionState.hadException()) | |
40 return PassRefPtrWillBeRawPtr<Headers>(); | |
41 } | |
42 return headers; | |
43 } | |
44 | |
45 } | |
46 | |
15 DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(Response); | 47 DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(Response); |
16 | 48 |
17 PassRefPtrWillBeRawPtr<Response> Response::create(Blob* body, const Dictionary& responseInit, ExceptionState& exceptionState) | 49 PassRefPtrWillBeRawPtr<Response> Response::create(Blob* body, const Dictionary& responseInit, ExceptionState& exceptionState) |
18 { | 50 { |
19 return create(body, ResponseInit(responseInit), exceptionState); | 51 return create(body, ResponseInit(responseInit), exceptionState); |
20 } | 52 } |
21 | 53 |
22 PassRefPtrWillBeRawPtr<Response> Response::create(const String& body, const Dict ionary& responseInit, ExceptionState& exceptionState) | 54 PassRefPtrWillBeRawPtr<Response> Response::create(const String& body, const Dict ionary& responseInit, ExceptionState& exceptionState) |
23 { | 55 { |
24 OwnPtr<BlobData> blobData = BlobData::create(); | 56 OwnPtr<BlobData> blobData = BlobData::create(); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
91 | 123 |
92 // "9. Return |r|." | 124 // "9. Return |r|." |
93 return r.release(); | 125 return r.release(); |
94 } | 126 } |
95 | 127 |
96 PassRefPtrWillBeRawPtr<Response> Response::create(PassRefPtrWillBeRawPtr<FetchRe sponseData> response) | 128 PassRefPtrWillBeRawPtr<Response> Response::create(PassRefPtrWillBeRawPtr<FetchRe sponseData> response) |
97 { | 129 { |
98 return adoptRefWillBeNoop(new Response(response)); | 130 return adoptRefWillBeNoop(new Response(response)); |
99 } | 131 } |
100 | 132 |
133 PassRefPtrWillBeRawPtr<Response> Response::create(const WebServiceWorkerResponse & webResponse) | |
134 { | |
135 return adoptRefWillBeNoop(new Response(webResponse)); | |
136 } | |
137 | |
101 String Response::type() const | 138 String Response::type() const |
102 { | 139 { |
103 // "The type attribute's getter must return response's type." | 140 // "The type attribute's getter must return response's type." |
104 switch (m_response->type()) { | 141 switch (m_response->type()) { |
105 case FetchResponseData::BasicType: | 142 case FetchResponseData::BasicType: |
106 return "basic"; | 143 return "basic"; |
107 case FetchResponseData::CORSType: | 144 case FetchResponseData::CORSType: |
108 return "cors"; | 145 return "cors"; |
109 case FetchResponseData::DefaultType: | 146 case FetchResponseData::DefaultType: |
110 return "default"; | 147 return "default"; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
170 } | 207 } |
171 | 208 |
172 Response::Response(PassRefPtrWillBeRawPtr<FetchResponseData> response) | 209 Response::Response(PassRefPtrWillBeRawPtr<FetchResponseData> response) |
173 : m_response(response) | 210 : m_response(response) |
174 , m_headers(Headers::create(m_response->headerList())) | 211 , m_headers(Headers::create(m_response->headerList())) |
175 { | 212 { |
176 m_headers->setGuard(Headers::ResponseGuard); | 213 m_headers->setGuard(Headers::ResponseGuard); |
177 ScriptWrappable::init(this); | 214 ScriptWrappable::init(this); |
178 } | 215 } |
179 | 216 |
217 // FIXME: Handle response body data. | |
dominicc (has gone to gerrit)
2014/08/11 01:40:41
Where do things like opacity, etc. flow through?
gavinp
2014/08/13 23:25:23
Initially that won't be handled; this CL tries to
| |
218 Response::Response(const WebServiceWorkerResponse& webResponse) | |
219 : m_response(createFetchResponseDataFromWebResponse(webResponse)) | |
220 , m_headers(createHeadersFromWebResponse(webResponse)) | |
221 { | |
222 m_headers->setGuard(Headers::ResponseGuard); | |
223 ScriptWrappable::init(this); | |
224 } | |
225 | |
180 void Response::trace(Visitor* visitor) | 226 void Response::trace(Visitor* visitor) |
181 { | 227 { |
182 visitor->trace(m_response); | 228 visitor->trace(m_response); |
183 visitor->trace(m_headers); | 229 visitor->trace(m_headers); |
184 visitor->trace(m_fetchBodyStream); | 230 visitor->trace(m_fetchBodyStream); |
185 } | 231 } |
186 | 232 |
187 } // namespace blink | 233 } // namespace blink |
OLD | NEW |