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

Side by Side Diff: third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp

Issue 1418813004: [Fetch API] Reflect spec changes of bodyUsed property (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 "modules/serviceworkers/RespondWithObserver.h" 6 #include "modules/serviceworkers/RespondWithObserver.h"
7 7
8 #include "bindings/core/v8/ScriptFunction.h" 8 #include "bindings/core/v8/ScriptFunction.h"
9 #include "bindings/core/v8/ScriptPromise.h" 9 #include "bindings/core/v8/ScriptPromise.h"
10 #include "bindings/core/v8/ScriptValue.h" 10 #include "bindings/core/v8/ScriptValue.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 break; 50 break;
51 case WebServiceWorkerResponseErrorBodyUsed: 51 case WebServiceWorkerResponseErrorBodyUsed:
52 errorMessage = errorMessage + "a Response whose \"bodyUsed\" is \"true\" cannot be used to respond to a request."; 52 errorMessage = errorMessage + "a Response whose \"bodyUsed\" is \"true\" cannot be used to respond to a request.";
53 break; 53 break;
54 case WebServiceWorkerResponseErrorResponseTypeOpaqueForClientRequest: 54 case WebServiceWorkerResponseErrorResponseTypeOpaqueForClientRequest:
55 errorMessage = errorMessage + "an \"opaque\" response was used for a cli ent request."; 55 errorMessage = errorMessage + "an \"opaque\" response was used for a cli ent request.";
56 break; 56 break;
57 case WebServiceWorkerResponseErrorResponseTypeOpaqueRedirect: 57 case WebServiceWorkerResponseErrorResponseTypeOpaqueRedirect:
58 errorMessage = errorMessage + "an \"opaqueredirect\" type response was u sed for a request which is not a navigation request."; 58 errorMessage = errorMessage + "an \"opaqueredirect\" type response was u sed for a request which is not a navigation request.";
59 break; 59 break;
60 case WebServiceWorkerResponseErrorBodyLocked:
61 errorMessage = errorMessage + "a Response whose \"body\" is locked canno t be used to respond to a request.";
62 break;
60 case WebServiceWorkerResponseErrorUnknown: 63 case WebServiceWorkerResponseErrorUnknown:
61 default: 64 default:
62 errorMessage = errorMessage + "an unexpected error occurred."; 65 errorMessage = errorMessage + "an unexpected error occurred.";
63 break; 66 break;
64 } 67 }
65 return errorMessage; 68 return errorMessage;
66 } 69 }
67 70
68 bool isNavigationRequest(WebURLRequest::FrameType frameType) 71 bool isNavigationRequest(WebURLRequest::FrameType frameType)
69 { 72 {
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 // Spec issue: https://github.com/whatwg/fetch/issues/101 218 // Spec issue: https://github.com/whatwg/fetch/issues/101
216 if (isClientRequest(m_frameType, m_requestContext)) { 219 if (isClientRequest(m_frameType, m_requestContext)) {
217 responseWasRejected(WebServiceWorkerResponseErrorResponseTypeOpaqueF orClientRequest); 220 responseWasRejected(WebServiceWorkerResponseErrorResponseTypeOpaqueF orClientRequest);
218 return; 221 return;
219 } 222 }
220 } 223 }
221 if (!isNavigationRequest(m_frameType) && responseType == FetchResponseData:: OpaqueRedirectType) { 224 if (!isNavigationRequest(m_frameType) && responseType == FetchResponseData:: OpaqueRedirectType) {
222 responseWasRejected(WebServiceWorkerResponseErrorResponseTypeOpaqueRedir ect); 225 responseWasRejected(WebServiceWorkerResponseErrorResponseTypeOpaqueRedir ect);
223 return; 226 return;
224 } 227 }
228 if (response->isBodyLocked()) {
229 responseWasRejected(WebServiceWorkerResponseErrorBodyLocked);
230 return;
231 }
225 if (response->bodyUsed()) { 232 if (response->bodyUsed()) {
226 responseWasRejected(WebServiceWorkerResponseErrorBodyUsed); 233 responseWasRejected(WebServiceWorkerResponseErrorBodyUsed);
227 return; 234 return;
228 } 235 }
229 236
230 response->setBodyPassed();
231 WebServiceWorkerResponse webResponse; 237 WebServiceWorkerResponse webResponse;
232 response->populateWebServiceWorkerResponse(webResponse); 238 response->populateWebServiceWorkerResponse(webResponse);
233 BodyStreamBuffer* buffer = response->internalBodyBuffer(); 239 BodyStreamBuffer* buffer = response->internalBodyBuffer();
234 if (buffer) { 240 if (buffer) {
235 RefPtr<BlobDataHandle> blobDataHandle = buffer->drainAsBlobDataHandle(Fe tchDataConsumerHandle::Reader::AllowBlobWithInvalidSize); 241 RefPtr<BlobDataHandle> blobDataHandle = buffer->drainAsBlobDataHandle(Fe tchDataConsumerHandle::Reader::AllowBlobWithInvalidSize);
236 if (blobDataHandle) { 242 if (blobDataHandle) {
237 webResponse.setBlobDataHandle(blobDataHandle); 243 webResponse.setBlobDataHandle(blobDataHandle);
238 } else { 244 } else {
239 Stream* outStream = Stream::create(executionContext(), ""); 245 Stream* outStream = Stream::create(executionContext(), "");
240 webResponse.setStreamURL(outStream->url()); 246 webResponse.setStreamURL(outStream->url());
(...skipping 14 matching lines...) Expand all
255 , m_state(Initial) 261 , m_state(Initial)
256 { 262 {
257 } 263 }
258 264
259 DEFINE_TRACE(RespondWithObserver) 265 DEFINE_TRACE(RespondWithObserver)
260 { 266 {
261 ContextLifecycleObserver::trace(visitor); 267 ContextLifecycleObserver::trace(visitor);
262 } 268 }
263 269
264 } // namespace blink 270 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698