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

Side by Side Diff: third_party/WebKit/Source/platform/loader/fetch/ResourceLoader.cpp

Issue 2676163002: Refactor the forPreload flag to mean speculative preload. (Closed)
Patch Set: Review comments Created 3 years, 10 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) 2006, 2007, 2010, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2010, 2011 Apple Inc. All rights reserved.
3 * (C) 2007 Graham Dennis (graham.dennis@gmail.com) 3 * (C) 2007 Graham Dennis (graham.dennis@gmail.com)
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 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 8 *
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. 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 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 passedRedirectResponse.toResourceResponse()); 165 passedRedirectResponse.toResourceResponse());
166 166
167 newRequest.setRedirectStatus( 167 newRequest.setRedirectStatus(
168 ResourceRequest::RedirectStatus::FollowedRedirect); 168 ResourceRequest::RedirectStatus::FollowedRedirect);
169 169
170 const KURL originalURL = newRequest.url(); 170 const KURL originalURL = newRequest.url();
171 171
172 if (!isManualRedirectFetchRequest(m_resource->resourceRequest())) { 172 if (!isManualRedirectFetchRequest(m_resource->resourceRequest())) {
173 ResourceRequestBlockedReason blockedReason = context().canRequest( 173 ResourceRequestBlockedReason blockedReason = context().canRequest(
174 m_resource->getType(), newRequest, newRequest.url(), 174 m_resource->getType(), newRequest, newRequest.url(),
175 m_resource->options(), m_resource->isUnusedPreload(), 175 m_resource->options(),
176 (m_resource->isUnusedPreload()
177 ? FetchContext::ReportingPolicy::SuppressReporting
178 : FetchContext::ReportingPolicy::Report),
176 FetchRequest::UseDefaultOriginRestrictionForType); 179 FetchRequest::UseDefaultOriginRestrictionForType);
177 if (blockedReason != ResourceRequestBlockedReason::None) { 180 if (blockedReason != ResourceRequestBlockedReason::None) {
178 cancelForRedirectAccessCheckError(newRequest.url(), blockedReason); 181 cancelForRedirectAccessCheckError(newRequest.url(), blockedReason);
179 return false; 182 return false;
180 } 183 }
181 184
182 if (m_resource->options().corsEnabled == IsCORSEnabled) { 185 if (m_resource->options().corsEnabled == IsCORSEnabled) {
183 RefPtr<SecurityOrigin> sourceOrigin = 186 RefPtr<SecurityOrigin> sourceOrigin =
184 m_resource->options().securityOrigin; 187 m_resource->options().securityOrigin;
185 if (!sourceOrigin.get()) 188 if (!sourceOrigin.get())
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 } 254 }
252 255
253 FetchContext& ResourceLoader::context() const { 256 FetchContext& ResourceLoader::context() const {
254 return m_fetcher->context(); 257 return m_fetcher->context();
255 } 258 }
256 259
257 ResourceRequestBlockedReason ResourceLoader::canAccessResponse( 260 ResourceRequestBlockedReason ResourceLoader::canAccessResponse(
258 Resource* resource, 261 Resource* resource,
259 const ResourceResponse& response) const { 262 const ResourceResponse& response) const {
260 // Redirects can change the response URL different from one of request. 263 // Redirects can change the response URL different from one of request.
261 bool forPreload = resource->isUnusedPreload(); 264 bool unusedPreload = resource->isUnusedPreload();
262 ResourceRequestBlockedReason blockedReason = 265 ResourceRequestBlockedReason blockedReason = context().canRequest(
263 context().canRequest(resource->getType(), resource->resourceRequest(), 266 resource->getType(), resource->resourceRequest(), response.url(),
264 response.url(), resource->options(), forPreload, 267 resource->options(),
265 FetchRequest::UseDefaultOriginRestrictionForType); 268 (unusedPreload ? FetchContext::ReportingPolicy::SuppressReporting
269 : FetchContext::ReportingPolicy::Report),
270 FetchRequest::UseDefaultOriginRestrictionForType);
266 if (blockedReason != ResourceRequestBlockedReason::None) 271 if (blockedReason != ResourceRequestBlockedReason::None)
267 return blockedReason; 272 return blockedReason;
268 273
269 SecurityOrigin* sourceOrigin = resource->options().securityOrigin.get(); 274 SecurityOrigin* sourceOrigin = resource->options().securityOrigin.get();
270 if (!sourceOrigin) 275 if (!sourceOrigin)
271 sourceOrigin = context().getSecurityOrigin(); 276 sourceOrigin = context().getSecurityOrigin();
272 277
273 if (sourceOrigin->canRequestNoSuborigin(response.url())) 278 if (sourceOrigin->canRequestNoSuborigin(response.url()))
274 return ResourceRequestBlockedReason::None; 279 return ResourceRequestBlockedReason::None;
275 280
276 // Use the original response instead of the 304 response for a successful 281 // Use the original response instead of the 304 response for a successful
277 // revaldiation. 282 // revaldiation.
278 const ResourceResponse& responseForAccessControl = 283 const ResourceResponse& responseForAccessControl =
279 (resource->isCacheValidator() && response.httpStatusCode() == 304) 284 (resource->isCacheValidator() && response.httpStatusCode() == 304)
280 ? resource->response() 285 ? resource->response()
281 : response; 286 : response;
282 287
283 CrossOriginAccessControl::AccessStatus corsStatus = 288 CrossOriginAccessControl::AccessStatus corsStatus =
284 CrossOriginAccessControl::checkAccess( 289 CrossOriginAccessControl::checkAccess(
285 responseForAccessControl, resource->options().allowCredentials, 290 responseForAccessControl, resource->options().allowCredentials,
286 sourceOrigin); 291 sourceOrigin);
287 if (corsStatus != CrossOriginAccessControl::kAccessAllowed) { 292 if (corsStatus != CrossOriginAccessControl::kAccessAllowed) {
288 resource->setCORSFailed(); 293 resource->setCORSFailed();
289 if (!forPreload) { 294 if (!unusedPreload) {
290 String resourceType = Resource::resourceTypeToString( 295 String resourceType = Resource::resourceTypeToString(
291 resource->getType(), resource->options().initiatorInfo.name); 296 resource->getType(), resource->options().initiatorInfo.name);
292 StringBuilder builder; 297 StringBuilder builder;
293 builder.append("Access to "); 298 builder.append("Access to ");
294 builder.append(resourceType); 299 builder.append(resourceType);
295 builder.append(" at '"); 300 builder.append(" at '");
296 builder.append(response.url().getString()); 301 builder.append(response.url().getString());
297 builder.append("' from origin '"); 302 builder.append("' from origin '");
298 builder.append(sourceOrigin->toString()); 303 builder.append(sourceOrigin->toString());
299 builder.append("' has been blocked by CORS policy: "); 304 builder.append("' has been blocked by CORS policy: ");
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 return; 518 return;
514 519
515 // Don't activate if cache policy is explicitly set. 520 // Don't activate if cache policy is explicitly set.
516 if (request.getCachePolicy() != WebCachePolicy::UseProtocolCachePolicy) 521 if (request.getCachePolicy() != WebCachePolicy::UseProtocolCachePolicy)
517 return; 522 return;
518 523
519 m_isCacheAwareLoadingActivated = true; 524 m_isCacheAwareLoadingActivated = true;
520 } 525 }
521 526
522 } // namespace blink 527 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698