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

Side by Side Diff: third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp

Issue 2105503002: Skip foreign fetch when the skipServiceWorker flag is set on a request. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rephrase SkipServiceWorker comments. Created 4 years, 5 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 /* 1 /*
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * Copyright (C) 2013, Intel Corporation 3 * Copyright (C) 2013, Intel Corporation
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 90
91 Reader* obtainReaderInternal(Client* client) override 91 Reader* obtainReaderInternal(Client* client) override
92 { 92 {
93 return new EmptyDataReader(client); 93 return new EmptyDataReader(client);
94 } 94 }
95 const char* debugName() const override { return "EmptyDataHandle"; } 95 const char* debugName() const override { return "EmptyDataHandle"; }
96 }; 96 };
97 97
98 // No-CORS requests are allowed for all these contexts, and plugin contexts with 98 // No-CORS requests are allowed for all these contexts, and plugin contexts with
99 // private permission when we set skipServiceWorker flag in PepperURLLoaderHost. 99 // private permission when we set skipServiceWorker flag in PepperURLLoaderHost.
100 bool IsNoCORSAllowedContext(WebURLRequest::RequestContext context, bool skipServ iceWorker) 100 bool IsNoCORSAllowedContext(WebURLRequest::RequestContext context, WebURLRequest ::SkipServiceWorker skipServiceWorker)
101 { 101 {
102 switch (context) { 102 switch (context) {
103 case WebURLRequest::RequestContextAudio: 103 case WebURLRequest::RequestContextAudio:
104 case WebURLRequest::RequestContextVideo: 104 case WebURLRequest::RequestContextVideo:
105 case WebURLRequest::RequestContextObject: 105 case WebURLRequest::RequestContextObject:
106 case WebURLRequest::RequestContextFavicon: 106 case WebURLRequest::RequestContextFavicon:
107 case WebURLRequest::RequestContextImage: 107 case WebURLRequest::RequestContextImage:
108 case WebURLRequest::RequestContextScript: 108 case WebURLRequest::RequestContextScript:
109 return true; 109 return true;
110 case WebURLRequest::RequestContextPlugin: 110 case WebURLRequest::RequestContextPlugin:
111 return skipServiceWorker; 111 return skipServiceWorker == WebURLRequest::SkipServiceWorker::All;
112 default: 112 default:
113 return false; 113 return false;
114 } 114 }
115 } 115 }
116 116
117 } // namespace 117 } // namespace
118 118
119 // Max number of CORS redirects handled in DocumentThreadableLoader. 119 // Max number of CORS redirects handled in DocumentThreadableLoader.
120 // Same number as net/url_request/url_request.cc, and 120 // Same number as net/url_request/url_request.cc, and
121 // same number as https://fetch.spec.whatwg.org/#concept-http-fetch, Step 4. 121 // same number as https://fetch.spec.whatwg.org/#concept-http-fetch, Step 4.
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 break; 231 break;
232 } 232 }
233 if (m_resourceLoaderOptions.allowCredentials == AllowStoredCredentials) 233 if (m_resourceLoaderOptions.allowCredentials == AllowStoredCredentials)
234 newRequest.setFetchCredentialsMode(WebURLRequest::FetchCredentialsMo deInclude); 234 newRequest.setFetchCredentialsMode(WebURLRequest::FetchCredentialsMo deInclude);
235 else 235 else
236 newRequest.setFetchCredentialsMode(WebURLRequest::FetchCredentialsMo deSameOrigin); 236 newRequest.setFetchCredentialsMode(WebURLRequest::FetchCredentialsMo deSameOrigin);
237 } 237 }
238 238
239 // We assume that ServiceWorker is skipped for sync requests and unsupported 239 // We assume that ServiceWorker is skipped for sync requests and unsupported
240 // protocol requests by content/ code. 240 // protocol requests by content/ code.
241 if (m_async && !request.skipServiceWorker() && SchemeRegistry::shouldTreatUR LSchemeAsAllowingServiceWorkers(request.url().protocol()) && m_document->fetcher ()->isControlledByServiceWorker()) { 241 if (m_async && request.skipServiceWorker() == WebURLRequest::SkipServiceWork er::None && SchemeRegistry::shouldTreatURLSchemeAsAllowingServiceWorkers(request .url().protocol()) && m_document->fetcher()->isControlledByServiceWorker()) {
242 if (newRequest.fetchRequestMode() == WebURLRequest::FetchRequestModeCORS || newRequest.fetchRequestMode() == WebURLRequest::FetchRequestModeCORSWithForc edPreflight) { 242 if (newRequest.fetchRequestMode() == WebURLRequest::FetchRequestModeCORS || newRequest.fetchRequestMode() == WebURLRequest::FetchRequestModeCORSWithForc edPreflight) {
243 m_fallbackRequestForServiceWorker = ResourceRequest(request); 243 m_fallbackRequestForServiceWorker = ResourceRequest(request);
244 m_fallbackRequestForServiceWorker.setSkipServiceWorker(true); 244 // m_fallbackRequestForServiceWorker is used when a regular controll ing
245 // service worker doesn't handle a cross origin request. When this h appens
246 // we still want to give foreign fetch a chance to handle the reques t, so
247 // only skip the controlling service worker for the fallback request .
248 // This is currently safe because of http://crbug.com/604084 the
249 // wasFallbackRequiredByServiceWorker flag is never set when foreign fetch
250 // handled a request.
251 m_fallbackRequestForServiceWorker.setSkipServiceWorker(WebURLRequest ::SkipServiceWorker::Controlling);
245 } 252 }
246 loadRequest(newRequest, m_resourceLoaderOptions); 253 loadRequest(newRequest, m_resourceLoaderOptions);
247 // |this| may be dead here. 254 // |this| may be dead here.
248 return; 255 return;
249 } 256 }
250 257
251 dispatchInitialRequest(newRequest); 258 dispatchInitialRequest(newRequest);
252 // |this| may be dead here in async mode. 259 // |this| may be dead here in async mode.
253 } 260 }
254 261
(...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 m_actualOptions = ResourceLoaderOptions(); 829 m_actualOptions = ResourceLoaderOptions();
823 830
824 actualRequest.setHTTPOrigin(getSecurityOrigin()); 831 actualRequest.setHTTPOrigin(getSecurityOrigin());
825 832
826 clearResource(); 833 clearResource();
827 834
828 // Explicitly set the SkipServiceWorker flag here. Even if the page was not 835 // Explicitly set the SkipServiceWorker flag here. Even if the page was not
829 // controlled by a SW when the preflight request was sent, a new SW may be 836 // controlled by a SW when the preflight request was sent, a new SW may be
830 // controlling the page now by calling clients.claim(). We should not send 837 // controlling the page now by calling clients.claim(). We should not send
831 // the actual request to the SW. https://crbug.com/604583 838 // the actual request to the SW. https://crbug.com/604583
832 actualRequest.setSkipServiceWorker(true); 839 actualRequest.setSkipServiceWorker(WebURLRequest::SkipServiceWorker::All);
833 840
834 loadRequest(actualRequest, actualOptions); 841 loadRequest(actualRequest, actualOptions);
835 // |this| may be dead here in async mode. 842 // |this| may be dead here in async mode.
836 } 843 }
837 844
838 void DocumentThreadableLoader::handlePreflightFailure(const String& url, const S tring& errorDescription) 845 void DocumentThreadableLoader::handlePreflightFailure(const String& url, const S tring& errorDescription)
839 { 846 {
840 ResourceError error(errorDomainBlinkInternal, 0, url, errorDescription); 847 ResourceError error(errorDomainBlinkInternal, 0, url, errorDescription);
841 848
842 // Prevent handleSuccessfulFinish() from bypassing access check. 849 // Prevent handleSuccessfulFinish() from bypassing access check.
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 return m_securityOrigin ? m_securityOrigin.get() : document().getSecurityOri gin(); 1000 return m_securityOrigin ? m_securityOrigin.get() : document().getSecurityOri gin();
994 } 1001 }
995 1002
996 Document& DocumentThreadableLoader::document() const 1003 Document& DocumentThreadableLoader::document() const
997 { 1004 {
998 ASSERT(m_document); 1005 ASSERT(m_document);
999 return *m_document; 1006 return *m_document;
1000 } 1007 }
1001 1008
1002 } // namespace blink 1009 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698