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

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

Issue 2181243002: Move ThreadableLoader to Oilpan heap (2/3) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@onheap-bridge-peer-in-worker-threadable-loader
Patch Set: fix Created 4 years, 4 months 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 1b504ec6cf3e81542ce24fcf1bc995938aed97bf..33ebc16ccd6b7d1641e8359f34426bf19c443c87 100644
--- a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
@@ -126,14 +126,12 @@ static const int kMaxCORSRedirects = 20;
void DocumentThreadableLoader::loadResourceSynchronously(Document& document, const ResourceRequest& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
{
- // The loader will be deleted as soon as this function exits.
- std::unique_ptr<DocumentThreadableLoader> loader = wrapUnique(new DocumentThreadableLoader(document, &client, LoadSynchronously, options, resourceLoaderOptions));
- loader->start(request);
+ (new DocumentThreadableLoader(document, &client, LoadSynchronously, options, resourceLoaderOptions))->start(request);
}
-std::unique_ptr<DocumentThreadableLoader> DocumentThreadableLoader::create(Document& document, ThreadableLoaderClient* client, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
+DocumentThreadableLoader* DocumentThreadableLoader::create(Document& document, ThreadableLoaderClient* client, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
{
- return wrapUnique(new DocumentThreadableLoader(document, client, LoadAsynchronously, options, resourceLoaderOptions));
+ return new DocumentThreadableLoader(document, client, LoadAsynchronously, options, resourceLoaderOptions);
}
DocumentThreadableLoader::DocumentThreadableLoader(Document& document, ThreadableLoaderClient* client, BlockingBehavior blockingBehavior, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
@@ -172,7 +170,6 @@ void DocumentThreadableLoader::start(const ResourceRequest& request)
ThreadableLoaderClient* client = m_client;
clear();
client->didFail(ResourceError(errorDomainBlinkInternal, 0, request.url().getString(), "Cross origin requests are not supported."));
- // |this| may be dead here.
return;
}
@@ -253,26 +250,22 @@ void DocumentThreadableLoader::start(const ResourceRequest& request)
m_fallbackRequestForServiceWorker.setSkipServiceWorker(WebURLRequest::SkipServiceWorker::Controlling);
}
loadRequest(newRequest, m_resourceLoaderOptions);
- // |this| may be dead here.
return;
}
dispatchInitialRequest(newRequest);
- // |this| may be dead here in async mode.
}
void DocumentThreadableLoader::dispatchInitialRequest(const ResourceRequest& request)
{
if (!request.isExternalRequest() && (m_sameOriginRequest || m_options.crossOriginRequestPolicy == AllowCrossOriginRequests)) {
loadRequest(request, m_resourceLoaderOptions);
- // |this| may be dead here in async mode.
return;
}
ASSERT(m_options.crossOriginRequestPolicy == UseAccessControl || request.isExternalRequest());
makeCrossOriginAccessRequest(request);
- // |this| may be dead here in async mode.
}
void DocumentThreadableLoader::makeCrossOriginAccessRequest(const ResourceRequest& request)
@@ -290,7 +283,6 @@ void DocumentThreadableLoader::makeCrossOriginAccessRequest(const ResourceReques
ThreadableLoaderClient* client = m_client;
clear();
client->didFailAccessControlCheck(ResourceError(errorDomainBlinkInternal, 0, request.url().getString(), "Cross origin requests are only supported for protocol schemes: " + SchemeRegistry::listOfCORSEnabledURLSchemes() + "."));
- // |this| may be dead here in async mode.
return;
}
@@ -299,7 +291,6 @@ void DocumentThreadableLoader::makeCrossOriginAccessRequest(const ResourceReques
ThreadableLoaderClient* client = m_client;
clear();
client->didFailAccessControlCheck(ResourceError(errorDomainBlinkInternal, 0, request.url().getString(), "Requests to internal network resources are not allowed from non-secure contexts (see https://goo.gl/Y0ZkNV). This is an experimental restriction which is part of 'https://mikewest.github.io/cors-rfc1918/'."));
- // |this| may be dead here in async mode.
return;
}
@@ -319,7 +310,6 @@ void DocumentThreadableLoader::makeCrossOriginAccessRequest(const ResourceReques
crossOriginRequest.setHTTPReferrer(SecurityPolicy::generateReferrer(m_referrerAfterRedirect.referrerPolicy, crossOriginRequest.url(), m_referrerAfterRedirect.referrer));
}
loadRequest(crossOriginRequest, crossOriginOptions);
- // |this| may be dead here in async mode.
} else {
m_crossOriginNonSimpleRequest = true;
// Do not set the Origin header for preflight requests.
@@ -338,14 +328,12 @@ void DocumentThreadableLoader::makeCrossOriginAccessRequest(const ResourceReques
bool canSkipPreflight = CrossOriginPreflightResultCache::shared().canSkipPreflight(getSecurityOrigin()->toString(), m_actualRequest.url(), effectiveAllowCredentials(), m_actualRequest.httpMethod(), m_actualRequest.httpHeaderFields());
if (canSkipPreflight && !shouldForcePreflight) {
loadActualRequest();
- // |this| may be dead here in async mode.
} else {
ResourceRequest preflightRequest = createAccessControlPreflightRequest(m_actualRequest, getSecurityOrigin());
// Create a ResourceLoaderOptions for preflight.
ResourceLoaderOptions preflightOptions = m_actualOptions;
preflightOptions.allowCredentials = DoNotAllowStoredCredentials;
loadRequest(preflightRequest, preflightOptions);
- // |this| may be dead here in async mode.
}
}
}
@@ -385,7 +373,6 @@ void DocumentThreadableLoader::overrideTimeout(unsigned long timeoutMilliseconds
void DocumentThreadableLoader::cancel()
{
cancelWithError(ResourceError());
- // |this| may be dead here.
}
void DocumentThreadableLoader::cancelWithError(const ResourceError& error)
@@ -406,7 +393,6 @@ void DocumentThreadableLoader::cancelWithError(const ResourceError& error)
ThreadableLoaderClient* client = m_client;
clear();
client->didFail(errorForCallback);
- // |this| may be dead here in async mode.
}
void DocumentThreadableLoader::setDefersLoading(bool value)
@@ -439,7 +425,6 @@ void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ
reportResponseReceived(resource->identifier(), redirectResponse);
handlePreflightFailure(redirectResponse.url().getString(), "Response for preflight is invalid (redirect)");
- // |this| may be dead here.
request = ResourceRequest();
@@ -482,7 +467,6 @@ void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ
ThreadableLoaderClient* client = m_client;
clear();
client->didFailRedirectCheck();
- // |this| may be dead here.
request = ResourceRequest();
@@ -500,10 +484,7 @@ void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ
ThreadableLoaderClient* client = m_client;
clear();
client->didFailRedirectCheck();
- // |this| may be dead here.
-
request = ResourceRequest();
-
return;
}
@@ -532,10 +513,7 @@ void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ
ThreadableLoaderClient* client = m_client;
clear();
client->didFailAccessControlCheck(ResourceError(errorDomainBlinkInternal, 0, redirectResponse.url().getString(), accessControlErrorDescription));
- // |this| may be dead here.
-
request = ResourceRequest();
-
return;
}
@@ -581,7 +559,6 @@ void DocumentThreadableLoader::redirectBlocked()
ThreadableLoaderClient* client = m_client;
clear();
client->didFailRedirectCheck();
- // |this| may be dead here
}
void DocumentThreadableLoader::dataSent(Resource* resource, unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
@@ -591,7 +568,6 @@ void DocumentThreadableLoader::dataSent(Resource* resource, unsigned long long b
ASSERT(m_async);
m_client->didSendData(bytesSent, totalBytesToBeSent);
- // |this| may be dead here.
}
void DocumentThreadableLoader::dataDownloaded(Resource* resource, int dataLength)
@@ -602,7 +578,6 @@ void DocumentThreadableLoader::dataDownloaded(Resource* resource, int dataLength
ASSERT(m_async);
m_client->didDownloadData(dataLength);
- // |this| may be dead here.
}
void DocumentThreadableLoader::didReceiveResourceTiming(Resource* resource, const ResourceTimingInfo& info)
@@ -612,7 +587,6 @@ void DocumentThreadableLoader::didReceiveResourceTiming(Resource* resource, cons
ASSERT(m_async);
m_client->didReceiveResourceTiming(info);
- // |this| may be dead here.
}
void DocumentThreadableLoader::responseReceived(Resource* resource, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
@@ -624,7 +598,6 @@ void DocumentThreadableLoader::responseReceived(Resource* resource, const Resour
m_isUsingDataConsumerHandle = true;
handleResponse(resource->identifier(), response, std::move(handle));
- // |this| may be dead here.
}
void DocumentThreadableLoader::handlePreflightResponse(const ResourceResponse& response)
@@ -633,19 +606,16 @@ void DocumentThreadableLoader::handlePreflightResponse(const ResourceResponse& r
if (!passesAccessControlCheck(response, effectiveAllowCredentials(), getSecurityOrigin(), accessControlErrorDescription, m_requestContext)) {
handlePreflightFailure(response.url().getString(), "Response to preflight request doesn't pass access control check: " + accessControlErrorDescription);
- // |this| may be dead here in async mode.
return;
}
if (!passesPreflightStatusCheck(response, accessControlErrorDescription)) {
handlePreflightFailure(response.url().getString(), accessControlErrorDescription);
- // |this| may be dead here in async mode.
return;
}
if (m_actualRequest.isExternalRequest() && !passesExternalPreflightCheck(response, accessControlErrorDescription)) {
handlePreflightFailure(response.url().getString(), accessControlErrorDescription);
- // |this| may be dead here in async mode.
return;
}
@@ -654,7 +624,6 @@ void DocumentThreadableLoader::handlePreflightResponse(const ResourceResponse& r
|| !preflightResult->allowsCrossOriginMethod(m_actualRequest.httpMethod(), accessControlErrorDescription)
|| !preflightResult->allowsCrossOriginHeaders(m_actualRequest.httpHeaderFields(), accessControlErrorDescription)) {
handlePreflightFailure(response.url().getString(), accessControlErrorDescription);
- // |this| may be dead here in async mode.
return;
}
@@ -682,7 +651,6 @@ void DocumentThreadableLoader::handleResponse(unsigned long identifier, const Re
if (!m_actualRequest.isNull()) {
reportResponseReceived(identifier, response);
handlePreflightResponse(response);
- // |this| may be dead here in async mode.
return;
}
@@ -695,7 +663,6 @@ void DocumentThreadableLoader::handleResponse(unsigned long identifier, const Re
ASSERT(!m_fallbackRequestForServiceWorker.isNull());
reportResponseReceived(identifier, response);
loadFallbackRequestForServiceWorker();
- // |this| may be dead here in async mode.
return;
}
m_fallbackRequestForServiceWorker = ResourceRequest();
@@ -723,7 +690,6 @@ void DocumentThreadableLoader::handleResponse(unsigned long identifier, const Re
ThreadableLoaderClient* client = m_client;
clear();
client->didFailAccessControlCheck(ResourceError(errorDomainBlinkInternal, 0, response.url().getString(), accessControlErrorDescription));
- // |this| may be dead here.
return;
}
}
@@ -736,7 +702,6 @@ void DocumentThreadableLoader::setSerializedCachedMetadata(Resource*, const char
if (!m_actualRequest.isNull())
return;
m_client->didReceiveCachedMetadata(data, size);
- // |this| may be dead here.
}
void DocumentThreadableLoader::dataReceived(Resource* resource, const char* data, size_t dataLength)
@@ -750,7 +715,6 @@ void DocumentThreadableLoader::dataReceived(Resource* resource, const char* data
// TODO(junov): Fix the ThreadableLoader ecosystem to use size_t.
// Until then, we use safeCast to trap potential overflows.
handleReceivedData(data, safeCast<unsigned>(dataLength));
- // |this| may be dead here.
}
void DocumentThreadableLoader::handleReceivedData(const char* data, size_t dataLength)
@@ -764,7 +728,6 @@ void DocumentThreadableLoader::handleReceivedData(const char* data, size_t dataL
ASSERT(m_fallbackRequestForServiceWorker.isNull());
m_client->didReceiveData(data, dataLength);
- // |this| may be dead here in async mode.
}
void DocumentThreadableLoader::notifyFinished(Resource* resource)
@@ -775,10 +738,8 @@ void DocumentThreadableLoader::notifyFinished(Resource* resource)
if (resource->errorOccurred()) {
handleError(resource->resourceError());
- // |this| may be dead here.
} else {
handleSuccessfulFinish(resource->identifier(), resource->loadFinishTime());
- // |this| may be dead here.
}
}
@@ -793,17 +754,15 @@ void DocumentThreadableLoader::handleSuccessfulFinish(unsigned long identifier,
ASSERT(!m_sameOriginRequest);
ASSERT(m_options.crossOriginRequestPolicy == UseAccessControl);
loadActualRequest();
- // |this| may be dead here in async mode.
return;
}
ThreadableLoaderClient* client = m_client;
// Protect the resource in |didFinishLoading| in order not to release the
// downloaded file.
- Persistent<Resource> resource = m_resource;
+ Persistent<Resource> protect = resource();
clear();
client->didFinishLoading(identifier, finishTime);
- // |this| may be dead here in async mode.
}
void DocumentThreadableLoader::didTimeout(TimerBase* timer)
@@ -816,7 +775,6 @@ void DocumentThreadableLoader::didTimeout(TimerBase* timer)
ResourceError error("net", timeoutError, resource()->url(), String());
error.setIsTimeout(true);
cancelWithError(error);
- // |this| may be dead here.
}
void DocumentThreadableLoader::loadFallbackRequestForServiceWorker()
@@ -825,7 +783,6 @@ void DocumentThreadableLoader::loadFallbackRequestForServiceWorker()
ResourceRequest fallbackRequest(m_fallbackRequestForServiceWorker);
m_fallbackRequestForServiceWorker = ResourceRequest();
dispatchInitialRequest(fallbackRequest);
- // |this| may be dead here in async mode.
}
void DocumentThreadableLoader::loadActualRequest()
@@ -846,7 +803,6 @@ void DocumentThreadableLoader::loadActualRequest()
actualRequest.setSkipServiceWorker(WebURLRequest::SkipServiceWorker::All);
loadRequest(actualRequest, actualOptions);
- // |this| may be dead here in async mode.
}
void DocumentThreadableLoader::handlePreflightFailure(const String& url, const String& errorDescription)
@@ -859,7 +815,6 @@ void DocumentThreadableLoader::handlePreflightFailure(const String& url, const S
ThreadableLoaderClient* client = m_client;
clear();
client->didFailAccessControlCheck(error);
- // |this| may be dead here in async mode.
}
void DocumentThreadableLoader::handleError(const ResourceError& error)
@@ -872,7 +827,6 @@ void DocumentThreadableLoader::handleError(const ResourceError& error)
ThreadableLoaderClient* client = m_client;
clear();
client->didFail(copiedError);
- // |this| may be dead here.
}
void DocumentThreadableLoader::loadRequest(const ResourceRequest& request, ResourceLoaderOptions resourceLoaderOptions)
@@ -908,7 +862,6 @@ void DocumentThreadableLoader::loadRequest(const ResourceRequest& request, Resou
setResource(RawResource::fetch(newRequest, document().fetcher()));
// setResource() might call notifyFinished() synchronously, and thus
- // clear() might be called and |this| may be dead here.
if (!self)
return;
@@ -922,7 +875,6 @@ void DocumentThreadableLoader::loadRequest(const ResourceRequest& request, Resou
if (!client)
return;
client->didFail(ResourceError(errorDomainBlinkInternal, 0, requestURL.getString(), "Failed to start loading."));
- // |this| may be dead here.
return;
}
@@ -1017,4 +969,11 @@ Document& DocumentThreadableLoader::document() const
return *m_document;
}
+DEFINE_TRACE(DocumentThreadableLoader)
+{
+ visitor->trace(m_resource);
+ visitor->trace(m_document);
+ ThreadableLoader::trace(visitor);
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698