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 |