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

Unified Diff: Source/core/fetch/ResourceFetcher.cpp

Issue 47923008: Block execution of failed 'crossorigin' <script>s. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Remove RequestOriginPolicy + suggested improvements Created 7 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/fetch/ResourceFetcher.cpp
diff --git a/Source/core/fetch/ResourceFetcher.cpp b/Source/core/fetch/ResourceFetcher.cpp
index 4570574720574e4d0f0cd1bd2b1c0ea15a3159d9..4dce54e3d07b56a5f640568e193361adcca3cbe3 100644
--- a/Source/core/fetch/ResourceFetcher.cpp
+++ b/Source/core/fetch/ResourceFetcher.cpp
@@ -265,22 +265,22 @@ FetchContext& ResourceFetcher::context() const
return FetchContext::nullInstance();
}
-ResourcePtr<Resource> ResourceFetcher::fetchSynchronously(FetchRequest& request)
+ResourcePtr<Resource> ResourceFetcher::fetchSynchronously(FetchRequest& request, OriginRestriction originRestriction)
{
ASSERT(document());
request.mutableResourceRequest().setTimeoutInterval(10);
ResourceLoaderOptions options(request.options());
options.synchronousPolicy = RequestSynchronously;
request.setOptions(options);
- return requestResource(Resource::Raw, request);
+ return requestResource(Resource::Raw, request, originRestriction);
}
-ResourcePtr<ImageResource> ResourceFetcher::fetchImage(FetchRequest& request)
+ResourcePtr<ImageResource> ResourceFetcher::fetchImage(FetchRequest& request, OriginRestriction originRestriction)
{
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(), originRestriction))
PingLoader::loadImage(f, requestURL);
return 0;
}
@@ -340,7 +340,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());
}
@@ -429,7 +429,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, OriginRestriction originRestriction)
{
if (document() && !document()->securityOrigin()->canDisplay(url)) {
if (!forPreload)
@@ -458,7 +458,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 == RestrictToSameOrigin && !m_document->securityOrigin()->canRequest(url)) {
printAccessDeniedMessage(url);
return false;
}
@@ -532,17 +532,17 @@ bool ResourceFetcher::canRequest(Resource::Type type, const KURL& url, const Res
return true;
}
-bool ResourceFetcher::canAccess(Resource* resource)
+bool ResourceFetcher::canAccess(Resource* resource, CrossOriginEnabled crossOriginEnabled, 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 (crossOriginEnabled == PotentiallyCrossOriginEnabled
&& !m_document->securityOrigin()->canRequest(resource->response().url())
&& !resource->passesAccessControlCheck(m_document->securityOrigin(), error)) {
if (frame() && frame()->document())
@@ -579,7 +579,7 @@ bool ResourceFetcher::resourceNeedsLoad(Resource* resource, const FetchRequest&
return request.options().synchronousPolicy == RequestSynchronously && resource->isLoading();
}
-ResourcePtr<Resource> ResourceFetcher::requestResource(Resource::Type type, FetchRequest& request)
+ResourcePtr<Resource> ResourceFetcher::requestResource(Resource::Type type, FetchRequest& request, OriginRestriction originRestriction)
{
ASSERT(request.options().synchronousPolicy == RequestAsynchronously || type == Resource::Raw);
@@ -593,7 +593,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(), originRestriction))
return 0;
if (Frame* f = frame())
@@ -1261,7 +1261,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, UseDefaultOriginRestrictionForType))
return false;
if (resource->type() == Resource::Image && shouldDeferImageLoad(request.url()))
return false;
@@ -1329,7 +1329,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;
}

Powered by Google App Engine
This is Rietveld 408576698