| 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 "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 Loading... |
| 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 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 } |
| 225 if (response->bodyUsed()) { | 228 if (response->bodyUsed()) { |
| 226 responseWasRejected(WebServiceWorkerResponseErrorBodyUsed); | 229 responseWasRejected(WebServiceWorkerResponseErrorBodyUsed); |
| 227 return; | 230 return; |
| 228 } | 231 } |
| 232 if (response->isBodyLocked()) { |
| 233 responseWasRejected(WebServiceWorkerResponseErrorBodyLocked); |
| 234 return; |
| 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 Loading... |
| 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 |
| OLD | NEW |