| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |