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

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: fix resource loading 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.setSkipServiceWorker(WebURLRequest ::SkipServiceWorker::Controlling);
horo 2016/06/28 12:10:02 |m_fallbackRequestForServiceWorker| is used when a
Marijn Kruisselbrink 2016/06/28 17:06:13 Actually that is precisely the case where I don't
horo 2016/06/29 04:06:14 Ah got it. Please write comments about it and that
Marijn Kruisselbrink 2016/06/29 17:12:15 Done
245 } 245 }
246 loadRequest(newRequest, m_resourceLoaderOptions); 246 loadRequest(newRequest, m_resourceLoaderOptions);
247 // |this| may be dead here. 247 // |this| may be dead here.
248 return; 248 return;
249 } 249 }
250 250
251 dispatchInitialRequest(newRequest); 251 dispatchInitialRequest(newRequest);
252 // |this| may be dead here in async mode. 252 // |this| may be dead here in async mode.
253 } 253 }
254 254
(...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 m_actualOptions = ResourceLoaderOptions(); 822 m_actualOptions = ResourceLoaderOptions();
823 823
824 actualRequest.setHTTPOrigin(getSecurityOrigin()); 824 actualRequest.setHTTPOrigin(getSecurityOrigin());
825 825
826 clearResource(); 826 clearResource();
827 827
828 // Explicitly set the SkipServiceWorker flag here. Even if the page was not 828 // 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 829 // 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 830 // controlling the page now by calling clients.claim(). We should not send
831 // the actual request to the SW. https://crbug.com/604583 831 // the actual request to the SW. https://crbug.com/604583
832 actualRequest.setSkipServiceWorker(true); 832 actualRequest.setSkipServiceWorker(WebURLRequest::SkipServiceWorker::All);
833 833
834 loadRequest(actualRequest, actualOptions); 834 loadRequest(actualRequest, actualOptions);
835 // |this| may be dead here in async mode. 835 // |this| may be dead here in async mode.
836 } 836 }
837 837
838 void DocumentThreadableLoader::handlePreflightFailure(const String& url, const S tring& errorDescription) 838 void DocumentThreadableLoader::handlePreflightFailure(const String& url, const S tring& errorDescription)
839 { 839 {
840 ResourceError error(errorDomainBlinkInternal, 0, url, errorDescription); 840 ResourceError error(errorDomainBlinkInternal, 0, url, errorDescription);
841 841
842 // Prevent handleSuccessfulFinish() from bypassing access check. 842 // 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(); 993 return m_securityOrigin ? m_securityOrigin.get() : document().getSecurityOri gin();
994 } 994 }
995 995
996 Document& DocumentThreadableLoader::document() const 996 Document& DocumentThreadableLoader::document() const
997 { 997 {
998 ASSERT(m_document); 998 ASSERT(m_document);
999 return *m_document; 999 return *m_document;
1000 } 1000 }
1001 1001
1002 } // namespace blink 1002 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698