Chromium Code Reviews| 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 47 break; | 47 break; |
| 48 case WebServiceWorkerResponseErrorResponseTypeNotBasicOrDefault: | 48 case WebServiceWorkerResponseErrorResponseTypeNotBasicOrDefault: |
| 49 ASSERT_NOT_REACHED(); | 49 ASSERT_NOT_REACHED(); |
| 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: | |
| 58 errorMessage = errorMessage + "an \"opaqueredirect\" type response was u sed for a request which is not a navigation request."; | |
| 59 break; | |
| 57 case WebServiceWorkerResponseErrorUnknown: | 60 case WebServiceWorkerResponseErrorUnknown: |
| 58 default: | 61 default: |
| 59 errorMessage = errorMessage + "an unexpected error occurred."; | 62 errorMessage = errorMessage + "an unexpected error occurred."; |
| 60 break; | 63 break; |
| 61 } | 64 } |
| 62 return errorMessage; | 65 return errorMessage; |
| 63 } | 66 } |
| 64 | 67 |
| 68 bool isNavigationRequest(WebURLRequest::FrameType frameType) | |
| 69 { | |
| 70 return frameType != WebURLRequest::FrameTypeNone; | |
| 71 } | |
| 72 | |
| 65 bool isClientRequest(WebURLRequest::FrameType frameType, WebURLRequest::RequestC ontext requestContext) | 73 bool isClientRequest(WebURLRequest::FrameType frameType, WebURLRequest::RequestC ontext requestContext) |
| 66 { | 74 { |
| 67 return frameType != WebURLRequest::FrameTypeNone || requestContext == WebURL Request::RequestContextSharedWorker || requestContext == WebURLRequest::RequestC ontextWorker; | 75 return isNavigationRequest(frameType) || requestContext == WebURLRequest::Re questContextSharedWorker || requestContext == WebURLRequest::RequestContextWorke r; |
| 68 } | 76 } |
| 69 | 77 |
| 70 class NoopLoaderClient final : public GarbageCollectedFinalized<NoopLoaderClient >, public FetchDataLoader::Client { | 78 class NoopLoaderClient final : public GarbageCollectedFinalized<NoopLoaderClient >, public FetchDataLoader::Client { |
| 71 WTF_MAKE_NONCOPYABLE(NoopLoaderClient); | 79 WTF_MAKE_NONCOPYABLE(NoopLoaderClient); |
| 72 USING_GARBAGE_COLLECTED_MIXIN(NoopLoaderClient); | 80 USING_GARBAGE_COLLECTED_MIXIN(NoopLoaderClient); |
| 73 public: | 81 public: |
| 74 NoopLoaderClient() = default; | 82 NoopLoaderClient() = default; |
| 75 void didFetchDataLoadedStream() override {} | 83 void didFetchDataLoadedStream() override {} |
| 76 void didFetchDataLoadFailed() override {} | 84 void didFetchDataLoadFailed() override {} |
| 77 DEFINE_INLINE_TRACE() { FetchDataLoader::Client::trace(visitor); } | 85 DEFINE_INLINE_TRACE() { FetchDataLoader::Client::trace(visitor); } |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 203 // The request mode of client requests should be "same-origin" but it is | 211 // The request mode of client requests should be "same-origin" but it is |
| 204 // not explicitly stated in the spec yet. So we need to check here. | 212 // not explicitly stated in the spec yet. So we need to check here. |
| 205 // FIXME: Set the request mode of client requests to "same-origin" and | 213 // FIXME: Set the request mode of client requests to "same-origin" and |
| 206 // remove this check when the spec will be updated. | 214 // remove this check when the spec will be updated. |
| 207 // Spec issue: https://github.com/whatwg/fetch/issues/101 | 215 // Spec issue: https://github.com/whatwg/fetch/issues/101 |
| 208 if (isClientRequest(m_frameType, m_requestContext)) { | 216 if (isClientRequest(m_frameType, m_requestContext)) { |
| 209 responseWasRejected(WebServiceWorkerResponseErrorResponseTypeOpaqueF orClientRequest); | 217 responseWasRejected(WebServiceWorkerResponseErrorResponseTypeOpaqueF orClientRequest); |
| 210 return; | 218 return; |
| 211 } | 219 } |
| 212 } | 220 } |
| 221 if (isNavigationRequest(m_frameType) && responseType == FetchResponseData::O paqueRedirectType) { | |
|
yhirano
2015/08/07 14:22:02
https://fetch.spec.whatwg.org/#http-fetch says
If
horo
2015/08/07 15:39:54
Ah, yes. Fixed.
| |
| 222 responseWasRejected(WebServiceWorkerResponseErrorResponseTypeOpaqueRedir ect); | |
| 223 return; | |
| 224 } | |
| 213 if (response->bodyUsed()) { | 225 if (response->bodyUsed()) { |
| 214 responseWasRejected(WebServiceWorkerResponseErrorBodyUsed); | 226 responseWasRejected(WebServiceWorkerResponseErrorBodyUsed); |
| 215 return; | 227 return; |
| 216 } | 228 } |
| 217 | 229 |
| 218 response->setBodyPassed(); | 230 response->setBodyPassed(); |
| 219 WebServiceWorkerResponse webResponse; | 231 WebServiceWorkerResponse webResponse; |
| 220 response->populateWebServiceWorkerResponse(webResponse); | 232 response->populateWebServiceWorkerResponse(webResponse); |
| 221 BodyStreamBuffer* buffer = response->internalBodyBuffer(); | 233 BodyStreamBuffer* buffer = response->internalBodyBuffer(); |
| 222 if (buffer->hasBody()) { | 234 if (buffer->hasBody()) { |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 243 , m_state(Initial) | 255 , m_state(Initial) |
| 244 { | 256 { |
| 245 } | 257 } |
| 246 | 258 |
| 247 DEFINE_TRACE(RespondWithObserver) | 259 DEFINE_TRACE(RespondWithObserver) |
| 248 { | 260 { |
| 249 ContextLifecycleObserver::trace(visitor); | 261 ContextLifecycleObserver::trace(visitor); |
| 250 } | 262 } |
| 251 | 263 |
| 252 } // namespace blink | 264 } // namespace blink |
| OLD | NEW |