| 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 |