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

Side by Side Diff: third_party/WebKit/Source/modules/fetch/FetchManager.cpp

Issue 1391583002: Introduce "navigate" mode in Requests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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/fetch/FetchManager.h" 6 #include "modules/fetch/FetchManager.h"
7 7
8 #include "bindings/core/v8/ExceptionState.h" 8 #include "bindings/core/v8/ExceptionState.h"
9 #include "bindings/core/v8/ScriptPromiseResolver.h" 9 #include "bindings/core/v8/ScriptPromiseResolver.h"
10 #include "bindings/core/v8/ScriptState.h" 10 #include "bindings/core/v8/ScriptState.h"
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 // same-origin data-URL flag is unset, except for no-cors mode. 228 // same-origin data-URL flag is unset, except for no-cors mode.
229 // TODO(hiroshige): currently redirects to data URLs in no-cors 229 // TODO(hiroshige): currently redirects to data URLs in no-cors
230 // mode is also rejected by Chromium side. 230 // mode is also rejected by Chromium side.
231 switch (m_request->mode()) { 231 switch (m_request->mode()) {
232 case WebURLRequest::FetchRequestModeNoCORS: 232 case WebURLRequest::FetchRequestModeNoCORS:
233 m_request->setResponseTainting(FetchRequestData::OpaqueTainting) ; 233 m_request->setResponseTainting(FetchRequestData::OpaqueTainting) ;
234 break; 234 break;
235 case WebURLRequest::FetchRequestModeSameOrigin: 235 case WebURLRequest::FetchRequestModeSameOrigin:
236 case WebURLRequest::FetchRequestModeCORS: 236 case WebURLRequest::FetchRequestModeCORS:
237 case WebURLRequest::FetchRequestModeCORSWithForcedPreflight: 237 case WebURLRequest::FetchRequestModeCORSWithForcedPreflight:
238 case WebURLRequest::FetchRequestModeNavigate:
238 performNetworkError("Fetch API cannot load " + m_request->url(). string() + ". Redirects to data: URL are allowed only when mode is \"no-cors\"." ); 239 performNetworkError("Fetch API cannot load " + m_request->url(). string() + ". Redirects to data: URL are allowed only when mode is \"no-cors\"." );
239 return; 240 return;
240 } 241 }
241 } 242 }
242 } else if (!SecurityOrigin::create(response.url())->isSameSchemeHostPort(m_r equest->origin().get())) { 243 } else if (!SecurityOrigin::create(response.url())->isSameSchemeHostPort(m_r equest->origin().get())) {
243 // Recompute the tainting if the request was redirected to a different 244 // Recompute the tainting if the request was redirected to a different
244 // origin. 245 // origin.
245 switch (m_request->mode()) { 246 switch (m_request->mode()) {
246 case WebURLRequest::FetchRequestModeSameOrigin: 247 case WebURLRequest::FetchRequestModeSameOrigin:
247 ASSERT_NOT_REACHED(); 248 ASSERT_NOT_REACHED();
248 break; 249 break;
249 case WebURLRequest::FetchRequestModeNoCORS: 250 case WebURLRequest::FetchRequestModeNoCORS:
250 m_request->setResponseTainting(FetchRequestData::OpaqueTainting); 251 m_request->setResponseTainting(FetchRequestData::OpaqueTainting);
251 break; 252 break;
252 case WebURLRequest::FetchRequestModeCORS: 253 case WebURLRequest::FetchRequestModeCORS:
253 case WebURLRequest::FetchRequestModeCORSWithForcedPreflight: 254 case WebURLRequest::FetchRequestModeCORSWithForcedPreflight:
254 m_request->setResponseTainting(FetchRequestData::CORSTainting); 255 m_request->setResponseTainting(FetchRequestData::CORSTainting);
255 break; 256 break;
257 case WebURLRequest::FetchRequestModeNavigate:
258 ASSERT_NOT_REACHED();
259 break;
256 } 260 }
257 } 261 }
258 262
259 FetchResponseData* responseData = nullptr; 263 FetchResponseData* responseData = nullptr;
260 CompositeDataConsumerHandle::Updater* updater = nullptr; 264 CompositeDataConsumerHandle::Updater* updater = nullptr;
261 if (m_request->integrity().isEmpty()) 265 if (m_request->integrity().isEmpty())
262 responseData = FetchResponseData::createWithBuffer(new BodyStreamBuffer( createFetchDataConsumerHandleFromWebHandle(handle))); 266 responseData = FetchResponseData::createWithBuffer(new BodyStreamBuffer( createFetchDataConsumerHandleFromWebHandle(handle)));
263 else 267 else
264 responseData = FetchResponseData::createWithBuffer(new BodyStreamBuffer( createFetchDataConsumerHandleFromWebHandle(CompositeDataConsumerHandle::create(c reateWaitingDataConsumerHandle(), &updater)))); 268 responseData = FetchResponseData::createWithBuffer(new BodyStreamBuffer( createFetchDataConsumerHandleFromWebHandle(CompositeDataConsumerHandle::create(c reateWaitingDataConsumerHandle(), &updater))));
265 responseData->setStatus(response.httpStatusCode()); 269 responseData->setStatus(response.httpStatusCode());
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 // "A network error." 413 // "A network error."
410 performNetworkError("Refused to connect to '" + m_request->url().elidedS tring() + "' because it violates the document's Content Security Policy."); 414 performNetworkError("Refused to connect to '" + m_request->url().elidedS tring() + "' because it violates the document's Content Security Policy.");
411 return; 415 return;
412 } 416 }
413 417
414 // "- |request|'s url's origin is |request|'s origin and the |CORS flag| is 418 // "- |request|'s url's origin is |request|'s origin and the |CORS flag| is
415 // unset" 419 // unset"
416 // "- |request|'s url's scheme is 'data' and |request|'s same-origin data 420 // "- |request|'s url's scheme is 'data' and |request|'s same-origin data
417 // URL flag is set" 421 // URL flag is set"
418 // "- |request|'s url's scheme is 'about'" 422 // "- |request|'s url's scheme is 'about'"
419 // Note we don't support to call this method with |CORS flag|. 423 // Note we don't support to call this method with |CORS flag|
424 // "- |request|'s mode is |navigate|".
420 if ((SecurityOrigin::create(m_request->url())->isSameSchemeHostPortAndSubori gin(m_request->origin().get())) 425 if ((SecurityOrigin::create(m_request->url())->isSameSchemeHostPortAndSubori gin(m_request->origin().get()))
421 || (m_request->url().protocolIsData() && m_request->sameOriginDataURLFla g()) 426 || (m_request->url().protocolIsData() && m_request->sameOriginDataURLFla g())
422 || (m_request->url().protocolIsAbout())) { 427 || (m_request->url().protocolIsAbout())
428 || (m_request->mode() == WebURLRequest::FetchRequestModeNavigate)) {
423 // "The result of performing a basic fetch using request." 429 // "The result of performing a basic fetch using request."
424 performBasicFetch(); 430 performBasicFetch();
425 return; 431 return;
426 } 432 }
427 433
428 // "- |request|'s mode is |same-origin|" 434 // "- |request|'s mode is |same-origin|"
429 if (m_request->mode() == WebURLRequest::FetchRequestModeSameOrigin) { 435 if (m_request->mode() == WebURLRequest::FetchRequestModeSameOrigin) {
430 // "A network error." 436 // "A network error."
431 performNetworkError("Fetch API cannot load " + m_request->url().string() + ". Request mode is \"same-origin\" but the URL\'s origin is not same as the r equest origin " + m_request->origin()->toString() + "."); 437 performNetworkError("Fetch API cannot load " + m_request->url().string() + ". Request mode is \"same-origin\" but the URL\'s origin is not same as the r equest origin " + m_request->origin()->toString() + ".");
432 return; 438 return;
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 case WebURLRequest::FetchRequestModeSameOrigin: 592 case WebURLRequest::FetchRequestModeSameOrigin:
587 threadableLoaderOptions.crossOriginRequestPolicy = DenyCrossOriginReques ts; 593 threadableLoaderOptions.crossOriginRequestPolicy = DenyCrossOriginReques ts;
588 break; 594 break;
589 case WebURLRequest::FetchRequestModeNoCORS: 595 case WebURLRequest::FetchRequestModeNoCORS:
590 threadableLoaderOptions.crossOriginRequestPolicy = AllowCrossOriginReque sts; 596 threadableLoaderOptions.crossOriginRequestPolicy = AllowCrossOriginReque sts;
591 break; 597 break;
592 case WebURLRequest::FetchRequestModeCORS: 598 case WebURLRequest::FetchRequestModeCORS:
593 case WebURLRequest::FetchRequestModeCORSWithForcedPreflight: 599 case WebURLRequest::FetchRequestModeCORSWithForcedPreflight:
594 threadableLoaderOptions.crossOriginRequestPolicy = UseAccessControl; 600 threadableLoaderOptions.crossOriginRequestPolicy = UseAccessControl;
595 break; 601 break;
602 case WebURLRequest::FetchRequestModeNavigate:
603 // Using DenyCrossOriginRequests here to reduce the security risk
hiroshige 2015/10/30 12:31:30 nit: add a period at the end of line.
shiva.jm 2015/11/02 12:06:20 Done.
604 // "navigate" request is only available in ServiceWorker.
605 threadableLoaderOptions.crossOriginRequestPolicy = DenyCrossOriginReques ts;
606 break;
596 } 607 }
597 InspectorInstrumentation::willStartFetch(executionContext(), this); 608 InspectorInstrumentation::willStartFetch(executionContext(), this);
598 m_loader = ThreadableLoader::create(*executionContext(), this, request, thre adableLoaderOptions, resourceLoaderOptions); 609 m_loader = ThreadableLoader::create(*executionContext(), this, request, thre adableLoaderOptions, resourceLoaderOptions);
599 if (!m_loader) 610 if (!m_loader)
600 performNetworkError("Can't create ThreadableLoader"); 611 performNetworkError("Can't create ThreadableLoader");
601 } 612 }
602 613
603 // performDataFetch() is almost the same as performHTTPFetch(), except for: 614 // performDataFetch() is almost the same as performHTTPFetch(), except for:
604 // - We set AllowCrossOriginRequests to allow requests to data: URLs in 615 // - We set AllowCrossOriginRequests to allow requests to data: URLs in
605 // 'same-origin' mode. 616 // 'same-origin' mode.
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 loader->dispose(); 711 loader->dispose();
701 } 712 }
702 713
703 DEFINE_TRACE(FetchManager) 714 DEFINE_TRACE(FetchManager)
704 { 715 {
705 visitor->trace(m_executionContext); 716 visitor->trace(m_executionContext);
706 visitor->trace(m_loaders); 717 visitor->trace(m_loaders);
707 } 718 }
708 719
709 } // namespace blink 720 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698