Index: Source/core/loader/DocumentThreadableLoader.cpp |
diff --git a/Source/core/loader/DocumentThreadableLoader.cpp b/Source/core/loader/DocumentThreadableLoader.cpp |
index 95be338695dc62a13911c4bc773a2417c465c130..2f1314a8201119b4384ecdaee6c54e3af5e1113c 100644 |
--- a/Source/core/loader/DocumentThreadableLoader.cpp |
+++ b/Source/core/loader/DocumentThreadableLoader.cpp |
@@ -92,7 +92,6 @@ |
, m_timeoutTimer(this, &DocumentThreadableLoader::didTimeout) |
, m_requestStartedSeconds(0.0) |
, m_corsRedirectLimit(kMaxCORSRedirects) |
- , m_accessControlCheckFailed(false) |
{ |
ASSERT(client); |
// Setting an outgoing referer is only supported in the async code path. |
@@ -163,7 +162,7 @@ |
// is no reason to send a request, preflighted or not, that's guaranteed |
// to be denied. |
if (!SchemeRegistry::shouldTreatURLSchemeAsCORSEnabled(request.url().protocol())) { |
- handleAccessControlCheckFailure(request.url().string(), "Cross origin requests are only supported for protocol schemes: " + SchemeRegistry::listOfCORSEnabledURLSchemes() + "."); |
+ m_client->didFailAccessControlCheck(ResourceError(errorDomainBlinkInternal, 0, request.url().string(), "Cross origin requests are only supported for protocol schemes: " + SchemeRegistry::listOfCORSEnabledURLSchemes() + ".")); |
return; |
} |
@@ -336,7 +335,8 @@ |
return; |
} |
- handleAccessControlCheckFailure(redirectResponse.url().string(), accessControlErrorDescription); |
+ ResourceError error(errorDomainBlinkInternal, 0, redirectResponse.url().string(), accessControlErrorDescription); |
+ m_client->didFailAccessControlCheck(error); |
} else { |
m_client->didFailRedirectCheck(); |
} |
@@ -379,12 +379,12 @@ |
String accessControlErrorDescription; |
if (!passesAccessControlCheck(&m_document, response, effectiveAllowCredentials(), securityOrigin(), accessControlErrorDescription)) { |
- handleAccessControlCheckFailure(response.url().string(), accessControlErrorDescription); |
+ handlePreflightFailure(response.url().string(), accessControlErrorDescription); |
return; |
} |
if (!passesPreflightStatusCheck(response, accessControlErrorDescription)) { |
- handleAccessControlCheckFailure(response.url().string(), accessControlErrorDescription); |
+ handlePreflightFailure(response.url().string(), accessControlErrorDescription); |
return; |
} |
@@ -392,7 +392,7 @@ |
if (!preflightResult->parse(response, accessControlErrorDescription) |
|| !preflightResult->allowsCrossOriginMethod(m_actualRequest->httpMethod(), accessControlErrorDescription) |
|| !preflightResult->allowsCrossOriginHeaders(m_actualRequest->httpHeaderFields(), accessControlErrorDescription)) { |
- handleAccessControlCheckFailure(response.url().string(), accessControlErrorDescription); |
+ handlePreflightFailure(response.url().string(), accessControlErrorDescription); |
return; |
} |
@@ -436,7 +436,7 @@ |
String accessControlErrorDescription; |
if (!passesAccessControlCheck(&m_document, response, effectiveAllowCredentials(), securityOrigin(), accessControlErrorDescription)) { |
reportResponseReceived(identifier, response); |
- handleAccessControlCheckFailure(response.url().string(), accessControlErrorDescription); |
+ m_client->didFailAccessControlCheck(ResourceError(errorDomainBlinkInternal, 0, response.url().string(), accessControlErrorDescription)); |
return; |
} |
} |
@@ -462,8 +462,7 @@ |
ASSERT(!m_fallbackRequestForServiceWorker); |
- if (!m_accessControlCheckFailed) |
- m_client->didReceiveData(data, dataLength); |
+ m_client->didReceiveData(data, dataLength); |
} |
void DocumentThreadableLoader::notifyFinished(Resource* resource) |
@@ -491,8 +490,7 @@ |
} else { |
// FIXME: Should prevent timeout from being overridden after finished loading, without |
// resetting m_requestStartedSeconds to 0.0 |
- if (!m_accessControlCheckFailed) |
- m_client->didFinishLoading(identifier, finishTime); |
+ m_client->didFinishLoading(identifier, finishTime); |
} |
} |
@@ -529,18 +527,12 @@ |
loadRequest(*actualRequest, *actualOptions); |
} |
-void DocumentThreadableLoader::handleAccessControlCheckFailure(const String& url, const String& errorDescription) |
+void DocumentThreadableLoader::handlePreflightFailure(const String& url, const String& errorDescription) |
{ |
ResourceError error(errorDomainBlinkInternal, 0, url, errorDescription); |
// Prevent handleSuccessfulFinish() from bypassing access check. |
m_actualRequest = nullptr; |
- |
- // Prevent m_client->didReceiveData()/didFinishLoading() from being called |
- // after m_client->didFailAccessControlCheck() is called here. |
- // FIXME: It is cleaner to call clearResource() etc. where we should not |
- // proceed any more. |
- m_accessControlCheckFailed = true; |
// FIXME: Should prevent timeout from being overridden after preflight failure, without |
// resetting m_requestStartedSeconds to 0.0 |