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

Unified Diff: third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp

Issue 2563933003: Remove cancelWithError() from DocumentThreadableLoader (Closed)
Patch Set: a Created 4 years 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: third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
diff --git a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
index 928aa32bd8fc3466efe8b913ac438d55699d3814..e6aa7c47fd9a818012271e5280e0167f6aa41045 100644
--- a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
@@ -322,9 +322,7 @@ void DocumentThreadableLoader::makeCrossOriginAccessRequest(
InspectorInstrumentation::
documentThreadableLoaderFailedToStartLoadingForClient(m_document,
m_client);
- ThreadableLoaderClient* client = m_client;
- clear();
- client->didFailAccessControlCheck(ResourceError(
+ dispatchDidFailAccessControlCheck(ResourceError(
errorDomainBlinkInternal, 0, request.url().getString(),
"Cross origin requests are only supported for protocol schemes: " +
SchemeRegistry::listOfCORSEnabledURLSchemes() + "."));
@@ -334,9 +332,7 @@ void DocumentThreadableLoader::makeCrossOriginAccessRequest(
// Non-secure origins may not make "external requests":
// https://mikewest.github.io/cors-rfc1918/#integration-fetch
if (!document().isSecureContext() && request.isExternalRequest()) {
- ThreadableLoaderClient* client = m_client;
- clear();
- client->didFailAccessControlCheck(
+ dispatchDidFailAccessControlCheck(
ResourceError(errorDomainBlinkInternal, 0, request.url().getString(),
"Requests to internal network resources are not allowed "
"from non-secure contexts (see https://goo.gl/Y0ZkNV). "
@@ -439,29 +435,20 @@ void DocumentThreadableLoader::overrideTimeout(
}
void DocumentThreadableLoader::cancel() {
- cancelWithError(ResourceError());
-}
-
-void DocumentThreadableLoader::cancelWithError(const ResourceError& error) {
- // Cancel can re-enter and m_resource might be null here as a result.
+ // Cancel can re-enter, and therefore |resource()| might be null here as a
+ // result.
if (!m_client || !resource()) {
clear();
return;
}
- ResourceError errorForCallback = error;
- if (errorForCallback.isNull()) {
- // FIXME: This error is sent to the client in didFail(), so it should not be
- // an internal one. Use FrameLoaderClient::cancelledError() instead.
- errorForCallback =
- ResourceError(errorDomainBlinkInternal, 0,
- resource()->url().getString(), "Load cancelled");
- errorForCallback.setIsCancellation(true);
- }
+ // FIXME: This error is sent to the client in didFail(), so it should not be
+ // an internal one. Use FrameLoaderClient::cancelledError() instead.
+ ResourceError error(errorDomainBlinkInternal, 0, resource()->url(),
+ "Load cancelled");
+ error.setIsCancellation(true);
- ThreadableLoaderClient* client = m_client;
- clear();
- client->didFail(errorForCallback);
+ dispatchDidFail(error);
}
void DocumentThreadableLoader::setDefersLoading(bool value) {
@@ -580,9 +567,7 @@ bool DocumentThreadableLoader::redirectReceived(
}
if (!allowRedirect) {
- ThreadableLoaderClient* client = m_client;
- clear();
- client->didFailAccessControlCheck(ResourceError(
+ dispatchDidFailAccessControlCheck(ResourceError(
errorDomainBlinkInternal, 0, redirectResponse.url().getString(),
accessControlErrorDescription));
return false;
@@ -809,9 +794,7 @@ void DocumentThreadableLoader::handleResponse(
accessControlErrorDescription, m_requestContext)) {
reportResponseReceived(identifier, response);
- ThreadableLoaderClient* client = m_client;
- clear();
- client->didFailAccessControlCheck(
+ dispatchDidFailAccessControlCheck(
ResourceError(errorDomainBlinkInternal, 0, response.url().getString(),
accessControlErrorDescription));
return;
@@ -868,7 +851,7 @@ void DocumentThreadableLoader::notifyFinished(Resource* resource) {
m_checker.notifyFinished(resource);
if (resource->errorOccurred()) {
- handleError(resource->resourceError());
+ dispatchDidFail(resource->resourceError());
} else {
handleSuccessfulFinish(resource->identifier(), resource->loadFinishTime());
}
@@ -897,7 +880,16 @@ void DocumentThreadableLoader::handleSuccessfulFinish(unsigned long identifier,
}
void DocumentThreadableLoader::didTimeout(TimerBase* timer) {
+ DCHECK(m_async);
DCHECK_EQ(timer, &m_timeoutTimer);
+ // clearResource() may be called in clear() and some other places. clear()
+ // calls stop() on |m_timeoutTimer|. In the other places, the resource is set
+ // again. If the creation fails, clear() is called. So, here, resource() is
+ // always non-nullptr.
+ DCHECK(resource());
+ // When |m_client| is set to nullptr only in clear() where |m_timeoutTimer|
+ // is stopped. So, |m_client| is always non-nullptr here.
+ DCHECK(m_client);
// Using values from net/base/net_error_list.h ERR_TIMED_OUT, Same as existing
// FIXME above - this error should be coming from FrameLoaderClient to be
@@ -905,7 +897,8 @@ void DocumentThreadableLoader::didTimeout(TimerBase* timer) {
static const int timeoutError = -7;
ResourceError error("net", timeoutError, resource()->url(), String());
error.setIsTimeout(true);
- cancelWithError(error);
+
+ dispatchDidFail(error);
}
void DocumentThreadableLoader::loadFallbackRequestForServiceWorker() {
@@ -941,12 +934,17 @@ void DocumentThreadableLoader::handlePreflightFailure(
// Prevent handleSuccessfulFinish() from bypassing access check.
m_actualRequest = ResourceRequest();
+ dispatchDidFailAccessControlCheck(error);
+}
+
+void DocumentThreadableLoader::dispatchDidFailAccessControlCheck(
+ const ResourceError& error) {
ThreadableLoaderClient* client = m_client;
clear();
client->didFailAccessControlCheck(error);
}
-void DocumentThreadableLoader::handleError(const ResourceError& error) {
+void DocumentThreadableLoader::dispatchDidFail(const ResourceError& error) {
ThreadableLoaderClient* client = m_client;
clear();
client->didFail(error);

Powered by Google App Engine
This is Rietveld 408576698