| 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/dom/DOMArrayBuffer.h" | 10 #include "core/dom/DOMArrayBuffer.h" |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 } | 166 } |
| 167 | 167 |
| 168 Response* Response::create(ExecutionContext* context, const WebServiceWorkerResp
onse& webResponse) | 168 Response* Response::create(ExecutionContext* context, const WebServiceWorkerResp
onse& webResponse) |
| 169 { | 169 { |
| 170 FetchResponseData* responseData = createFetchResponseDataFromWebResponse(web
Response); | 170 FetchResponseData* responseData = createFetchResponseDataFromWebResponse(web
Response); |
| 171 Response* r = new Response(context, responseData); | 171 Response* r = new Response(context, responseData); |
| 172 r->suspendIfNeeded(); | 172 r->suspendIfNeeded(); |
| 173 return r; | 173 return r; |
| 174 } | 174 } |
| 175 | 175 |
| 176 Response* Response::create(const Response& copyFrom) | 176 Response* Response::createClone(const Response& cloneFrom) |
| 177 { | 177 { |
| 178 Response* r = new Response(copyFrom); | 178 Response* r = new Response(cloneFrom); |
| 179 r->suspendIfNeeded(); | 179 r->suspendIfNeeded(); |
| 180 return r; | 180 return r; |
| 181 } | 181 } |
| 182 | 182 |
| 183 String Response::type() const | 183 String Response::type() const |
| 184 { | 184 { |
| 185 // "The type attribute's getter must return response's type." | 185 // "The type attribute's getter must return response's type." |
| 186 switch (m_response->type()) { | 186 switch (m_response->type()) { |
| 187 case FetchResponseData::BasicType: | 187 case FetchResponseData::BasicType: |
| 188 return "basic"; | 188 return "basic"; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 // "The headers attribute's getter must return the associated Headers object
." | 228 // "The headers attribute's getter must return the associated Headers object
." |
| 229 return m_headers; | 229 return m_headers; |
| 230 } | 230 } |
| 231 | 231 |
| 232 Response* Response::clone(ExceptionState& exceptionState) const | 232 Response* Response::clone(ExceptionState& exceptionState) const |
| 233 { | 233 { |
| 234 if (bodyUsed()) { | 234 if (bodyUsed()) { |
| 235 exceptionState.throwTypeError("Response body is already used"); | 235 exceptionState.throwTypeError("Response body is already used"); |
| 236 return nullptr; | 236 return nullptr; |
| 237 } | 237 } |
| 238 return Response::create(*this); | 238 if (streamAccessed()) { |
| 239 // FIXME: Support clone() of the stream accessed Response. |
| 240 exceptionState.throwTypeError("clone() of the Response which .body is ac
cessed is not supported."); |
| 241 return nullptr; |
| 242 } |
| 243 return Response::createClone(*this); |
| 239 } | 244 } |
| 240 | 245 |
| 241 void Response::populateWebServiceWorkerResponse(WebServiceWorkerResponse& respon
se) | 246 void Response::populateWebServiceWorkerResponse(WebServiceWorkerResponse& respon
se) |
| 242 { | 247 { |
| 243 m_response->populateWebServiceWorkerResponse(response); | 248 m_response->populateWebServiceWorkerResponse(response); |
| 244 } | 249 } |
| 245 | 250 |
| 246 Response::Response(ExecutionContext* context) | 251 Response::Response(ExecutionContext* context) |
| 247 : Body(context) | 252 : Body(context) |
| 248 , m_response(FetchResponseData::create()) | 253 , m_response(FetchResponseData::create()) |
| 249 , m_headers(Headers::create(m_response->headerList())) | 254 , m_headers(Headers::create(m_response->headerList())) |
| 250 { | 255 { |
| 251 m_headers->setGuard(Headers::ResponseGuard); | 256 m_headers->setGuard(Headers::ResponseGuard); |
| 252 } | 257 } |
| 253 | 258 |
| 254 Response::Response(const Response& copy_from) | 259 Response::Response(const Response& clone_from) |
| 255 : Body(copy_from) | 260 : Body(clone_from) |
| 256 , m_response(copy_from.m_response) | 261 , m_response(clone_from.m_response->clone()) |
| 257 , m_headers(copy_from.m_headers->createCopy()) | 262 , m_headers(Headers::create(m_response->headerList())) |
| 258 { | 263 { |
| 259 } | 264 } |
| 260 | 265 |
| 261 Response::Response(ExecutionContext* context, FetchResponseData* response) | 266 Response::Response(ExecutionContext* context, FetchResponseData* response) |
| 262 : Body(context) | 267 : Body(context) |
| 263 , m_response(response) | 268 , m_response(response) |
| 264 , m_headers(Headers::create(m_response->headerList())) | 269 , m_headers(Headers::create(m_response->headerList())) |
| 265 { | 270 { |
| 266 m_headers->setGuard(Headers::ResponseGuard); | 271 m_headers->setGuard(Headers::ResponseGuard); |
| 267 } | 272 } |
| 268 | 273 |
| 274 bool Response::hasBody() const |
| 275 { |
| 276 return internalBlobDataHandle() || internalBuffer(); |
| 277 } |
| 269 | 278 |
| 270 PassRefPtr<BlobDataHandle> Response::blobDataHandle() | 279 PassRefPtr<BlobDataHandle> Response::blobDataHandle() const |
| 271 { | 280 { |
| 272 return m_response->blobDataHandle(); | 281 return m_response->blobDataHandle(); |
| 273 } | 282 } |
| 274 | 283 |
| 284 BodyStreamBuffer* Response::buffer() const |
| 285 { |
| 286 return m_response->buffer(); |
| 287 } |
| 288 |
| 289 String Response::contentType() const |
| 290 { |
| 291 return m_response->contentType(); |
| 292 } |
| 293 |
| 294 PassRefPtr<BlobDataHandle> Response::internalBlobDataHandle() const |
| 295 { |
| 296 return m_response->internalBlobDataHandle(); |
| 297 } |
| 298 |
| 299 BodyStreamBuffer* Response::internalBuffer() const |
| 300 { |
| 301 return m_response->internalBuffer(); |
| 302 } |
| 303 |
| 304 String Response::internalContentType() const |
| 305 { |
| 306 return m_response->internalContentType(); |
| 307 } |
| 308 |
| 275 void Response::trace(Visitor* visitor) | 309 void Response::trace(Visitor* visitor) |
| 276 { | 310 { |
| 277 Body::trace(visitor); | 311 Body::trace(visitor); |
| 278 visitor->trace(m_response); | 312 visitor->trace(m_response); |
| 279 visitor->trace(m_headers); | 313 visitor->trace(m_headers); |
| 280 } | 314 } |
| 281 | 315 |
| 282 } // namespace blink | 316 } // namespace blink |
| OLD | NEW |