Index: Source/core/fetch/ResourceFetcher.cpp |
diff --git a/Source/core/fetch/ResourceFetcher.cpp b/Source/core/fetch/ResourceFetcher.cpp |
index b40bfc78f7d55d1b4299df0bab82d8f8060b4122..bf07019b21343fc2318102eb4753b913d73f2099 100644 |
--- a/Source/core/fetch/ResourceFetcher.cpp |
+++ b/Source/core/fetch/ResourceFetcher.cpp |
@@ -278,7 +278,7 @@ ResourcePtr<ImageResource> ResourceFetcher::fetchImage(FetchRequest& request) |
if (Frame* f = frame()) { |
if (f->document()->pageDismissalEventBeingDispatched() != Document::NoDismissal) { |
KURL requestURL = request.resourceRequest().url(); |
- if (requestURL.isValid() && canRequest(Resource::Image, requestURL, request.options(), request.forPreload())) |
+ if (requestURL.isValid() && canRequest(Resource::Image, requestURL, request.options(), request.forPreload(), request.originRestriction())) |
PingLoader::loadImage(f, requestURL); |
return 0; |
} |
@@ -333,7 +333,7 @@ ResourcePtr<CSSStyleSheetResource> ResourceFetcher::fetchUserCSSStyleSheet(Fetch |
memoryCache()->remove(existing); |
} |
- request.setOptions(ResourceLoaderOptions(DoNotSendCallbacks, SniffContent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientForCrossOriginCredentials, SkipSecurityCheck, CheckContentSecurityPolicy, UseDefaultOriginRestrictionsForType, DocumentContext)); |
+ request.setOptions(ResourceLoaderOptions(DoNotSendCallbacks, SniffContent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientForCrossOriginCredentials, SkipSecurityCheck, CheckContentSecurityPolicy, DocumentContext)); |
return static_cast<CSSStyleSheetResource*>(requestResource(Resource::CSSStyleSheet, request).get()); |
} |
@@ -422,7 +422,7 @@ bool ResourceFetcher::checkInsecureContent(Resource::Type type, const KURL& url, |
return true; |
} |
-bool ResourceFetcher::canRequest(Resource::Type type, const KURL& url, const ResourceLoaderOptions& options, bool forPreload) |
+bool ResourceFetcher::canRequest(Resource::Type type, const KURL& url, const ResourceLoaderOptions& options, bool forPreload, FetchRequest::OriginRestriction originRestriction) |
{ |
if (document() && !document()->securityOrigin()->canDisplay(url)) { |
if (!forPreload) |
@@ -451,7 +451,7 @@ bool ResourceFetcher::canRequest(Resource::Type type, const KURL& url, const Res |
case Resource::ImportResource: |
// By default these types of resources can be loaded from any origin. |
// FIXME: Are we sure about Resource::Font? |
- if (options.requestOriginPolicy == RestrictToSameOrigin && !m_document->securityOrigin()->canRequest(url)) { |
+ if (originRestriction == FetchRequest::RestrictToSameOrigin && !m_document->securityOrigin()->canRequest(url)) { |
printAccessDeniedMessage(url); |
return false; |
} |
@@ -523,17 +523,17 @@ bool ResourceFetcher::canRequest(Resource::Type type, const KURL& url, const Res |
return true; |
} |
-bool ResourceFetcher::canAccess(Resource* resource) |
+bool ResourceFetcher::canAccess(Resource* resource, CORSEnabled corsEnabled, FetchRequest::OriginRestriction originRestriction) |
{ |
// Redirects can change the response URL different from one of request. |
- if (!canRequest(resource->type(), resource->response().url(), resource->options(), false)) |
+ if (!canRequest(resource->type(), resource->response().url(), resource->options(), false, originRestriction)) |
return false; |
String error; |
switch (resource->type()) { |
case Resource::Script: |
case Resource::ImportResource: |
- if (resource->options().requestOriginPolicy == PotentiallyCrossOriginEnabled |
+ if (corsEnabled == PotentiallyCORSEnabled |
&& !m_document->securityOrigin()->canRequest(resource->response().url()) |
&& !resource->passesAccessControlCheck(m_document->securityOrigin(), error)) { |
if (frame() && frame()->document()) |
@@ -584,7 +584,7 @@ ResourcePtr<Resource> ResourceFetcher::requestResource(Resource::Type type, Fetc |
if (!url.isValid()) |
return 0; |
- if (!canRequest(type, url, request.options(), request.forPreload())) |
+ if (!canRequest(type, url, request.options(), request.forPreload(), request.originRestriction())) |
return 0; |
if (Frame* f = frame()) |
@@ -1255,7 +1255,7 @@ bool ResourceFetcher::isLoadedBy(ResourceLoaderHost* possibleOwner) const |
bool ResourceFetcher::shouldRequest(Resource* resource, const ResourceRequest& request, const ResourceLoaderOptions& options) |
{ |
- if (!canRequest(resource->type(), request.url(), options)) |
+ if (!canRequest(resource->type(), request.url(), options, false, FetchRequest::UseDefaultOriginRestrictionForType)) |
return false; |
if (resource->type() == Resource::Image && shouldDeferImageLoad(request.url())) |
return false; |
@@ -1323,7 +1323,7 @@ void ResourceFetcher::printPreloadStats() |
const ResourceLoaderOptions& ResourceFetcher::defaultResourceOptions() |
{ |
- DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffContent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientForCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaultOriginRestrictionsForType, DocumentContext)); |
+ DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffContent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientForCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, DocumentContext)); |
return options; |
} |