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

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

Issue 1265133002: [1/3 blink] Support redirect option of Request and "opaqueredirect" response type. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 4 months 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698