Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Side by Side Diff: Source/modules/serviceworkers/Response.cpp

Issue 786893004: [ServiceWorker] Use BodyStreamBuffer as the body data of the Response object. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: incorporated yhirano's comment Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698