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 "bindings/core/v8/ExceptionState.h" |
10 #include "core/fileapi/Blob.h" | 10 #include "core/fileapi/Blob.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 { | 22 { |
23 FetchResponseData* response = 0; | 23 FetchResponseData* response = 0; |
24 if (200 <= webResponse.status() && webResponse.status() < 300) | 24 if (200 <= webResponse.status() && webResponse.status() < 300) |
25 response = FetchResponseData::create(); | 25 response = FetchResponseData::create(); |
26 else | 26 else |
27 response = FetchResponseData::createNetworkErrorResponse(); | 27 response = FetchResponseData::createNetworkErrorResponse(); |
28 | 28 |
29 response->setURL(webResponse.url()); | 29 response->setURL(webResponse.url()); |
30 response->setStatus(webResponse.status()); | 30 response->setStatus(webResponse.status()); |
31 response->setStatusMessage(webResponse.statusText()); | 31 response->setStatusMessage(webResponse.statusText()); |
| 32 |
| 33 for (HTTPHeaderMap::const_iterator i = webResponse.headers().begin(), end =
webResponse.headers().end(); i != end; ++i) { |
| 34 response->headerList()->append(i->key, i->value); |
| 35 } |
| 36 |
| 37 // Filter the response according to |webResponse|'s ResponseType. |
| 38 switch (webResponse.responseType()) { |
| 39 case WebServiceWorkerResponseTypeBasic: |
| 40 response = response->createBasicFilteredResponse(); |
| 41 break; |
| 42 case WebServiceWorkerResponseTypeCORS: |
| 43 response = response->createCORSFilteredResponse(); |
| 44 break; |
| 45 case WebServiceWorkerResponseTypeOpaque: |
| 46 response = response->createOpaqueFilteredResponse(); |
| 47 break; |
| 48 case WebServiceWorkerResponseTypeDefault: |
| 49 break; |
| 50 case WebServiceWorkerResponseTypeError: |
| 51 ASSERT(response->type() == FetchResponseData::ErrorType); |
| 52 break; |
| 53 } |
| 54 |
32 return response; | 55 return response; |
33 } | 56 } |
34 | 57 |
35 Headers* createHeadersFromWebResponse(const WebServiceWorkerResponse& webRespons
e) | |
36 { | |
37 Headers* headers = Headers::create(); | |
38 TrackExceptionState exceptionState; | |
39 for (HTTPHeaderMap::const_iterator i = webResponse.headers().begin(), end =
webResponse.headers().end(); i != end; ++i) { | |
40 headers->append(i->key, i->value, exceptionState); | |
41 if (exceptionState.hadException()) | |
42 return 0; | |
43 } | |
44 return headers; | |
45 } | 58 } |
46 | |
47 } | |
48 | 59 |
49 Response* Response::create(ExecutionContext* context, Blob* body, const Dictiona
ry& responseInit, ExceptionState& exceptionState) | 60 Response* Response::create(ExecutionContext* context, Blob* body, const Dictiona
ry& responseInit, ExceptionState& exceptionState) |
50 { | 61 { |
51 return create(context, body, ResponseInit(responseInit), exceptionState); | 62 return create(context, body, ResponseInit(responseInit), exceptionState); |
52 } | 63 } |
53 | 64 |
54 Response* Response::create(ExecutionContext* context, const String& body, const
Dictionary& responseInit, ExceptionState& exceptionState) | 65 Response* Response::create(ExecutionContext* context, const String& body, const
Dictionary& responseInit, ExceptionState& exceptionState) |
55 { | 66 { |
56 OwnPtr<BlobData> blobData = BlobData::create(); | 67 OwnPtr<BlobData> blobData = BlobData::create(); |
57 blobData->appendText(body, false); | 68 blobData->appendText(body, false); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 | 153 |
143 Response* Response::create(ExecutionContext* context, FetchResponseData* respons
e) | 154 Response* Response::create(ExecutionContext* context, FetchResponseData* respons
e) |
144 { | 155 { |
145 Response* r = new Response(context, response); | 156 Response* r = new Response(context, response); |
146 r->suspendIfNeeded(); | 157 r->suspendIfNeeded(); |
147 return r; | 158 return r; |
148 } | 159 } |
149 | 160 |
150 Response* Response::create(ExecutionContext* context, const WebServiceWorkerResp
onse& webResponse) | 161 Response* Response::create(ExecutionContext* context, const WebServiceWorkerResp
onse& webResponse) |
151 { | 162 { |
152 Response* r = new Response(context, webResponse); | 163 // FIXME: Handle response body data. |
| 164 FetchResponseData* responseData = createFetchResponseDataFromWebResponse(web
Response); |
| 165 Response* r = new Response(context, responseData); |
153 r->suspendIfNeeded(); | 166 r->suspendIfNeeded(); |
154 return r; | 167 return r; |
155 } | 168 } |
156 | 169 |
157 Response* Response::create(const Response& copyFrom) | 170 Response* Response::create(const Response& copyFrom) |
158 { | 171 { |
159 Response* r = new Response(copyFrom); | 172 Response* r = new Response(copyFrom); |
160 r->suspendIfNeeded(); | 173 r->suspendIfNeeded(); |
161 return r; | 174 return r; |
162 } | 175 } |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 } | 249 } |
237 | 250 |
238 Response::Response(ExecutionContext* context, FetchResponseData* response) | 251 Response::Response(ExecutionContext* context, FetchResponseData* response) |
239 : Body(context) | 252 : Body(context) |
240 , m_response(response) | 253 , m_response(response) |
241 , m_headers(Headers::create(m_response->headerList())) | 254 , m_headers(Headers::create(m_response->headerList())) |
242 { | 255 { |
243 m_headers->setGuard(Headers::ResponseGuard); | 256 m_headers->setGuard(Headers::ResponseGuard); |
244 } | 257 } |
245 | 258 |
246 // FIXME: Handle response body data. | |
247 Response::Response(ExecutionContext* context, const WebServiceWorkerResponse& we
bResponse) | |
248 : Body(context) | |
249 , m_response(createFetchResponseDataFromWebResponse(webResponse)) | |
250 , m_headers(createHeadersFromWebResponse(webResponse)) | |
251 { | |
252 m_headers->setGuard(Headers::ResponseGuard); | |
253 } | |
254 | 259 |
255 PassRefPtr<BlobDataHandle> Response::blobDataHandle() | 260 PassRefPtr<BlobDataHandle> Response::blobDataHandle() |
256 { | 261 { |
257 return m_response->blobDataHandle(); | 262 return m_response->blobDataHandle(); |
258 } | 263 } |
259 | 264 |
260 void Response::trace(Visitor* visitor) | 265 void Response::trace(Visitor* visitor) |
261 { | 266 { |
262 Body::trace(visitor); | 267 Body::trace(visitor); |
263 visitor->trace(m_response); | 268 visitor->trace(m_response); |
264 visitor->trace(m_headers); | 269 visitor->trace(m_headers); |
265 } | 270 } |
266 | 271 |
267 } // namespace blink | 272 } // namespace blink |
OLD | NEW |