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

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

Issue 1889973002: Refactoring starting a resource load (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix a browser_test Created 4 years, 6 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/fetch/ResourceFetcher.cpp
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
index 6c2492b923fabc4ee15c98ead676777f266501dc..554ef07d132cb9a38bbd276a051c2edb736dd222 100644
--- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
+++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
@@ -231,14 +231,6 @@ ResourceFetcher::~ResourceFetcher()
{
}
-WebTaskRunner* ResourceFetcher::loadingTaskRunner()
-{
- if (!m_context)
- return nullptr;
-
- return m_context->loadingTaskRunner();
-}
-
Resource* ResourceFetcher::cachedResource(const KURL& resourceURL) const
{
KURL url = MemoryCache::removeFragmentIdentifierIfNeeded(resourceURL);
@@ -290,10 +282,10 @@ bool ResourceFetcher::resourceNeedsLoad(Resource* resource, const FetchRequest&
// http://crbug.com/52411
static const int kMaxValidatedURLsSize = 10000;
-void ResourceFetcher::requestLoadStarted(Resource* resource, const FetchRequest& request, ResourceLoadStartType type, bool isStaticData)
+void ResourceFetcher::requestLoadStarted(unsigned long identifier, Resource* resource, const FetchRequest& request, ResourceLoadStartType type, bool isStaticData)
{
if (type == ResourceLoadingFromCache && resource->getStatus() == Resource::Cached && !m_validatedURLs.contains(resource->url()))
- context().dispatchDidLoadResourceFromMemoryCache(resource, request.resourceRequest().frameType(), request.resourceRequest().requestContext());
+ context().dispatchDidLoadResourceFromMemoryCache(identifier, resource, request.resourceRequest().frameType(), request.resourceRequest().requestContext());
if (isStaticData)
return;
@@ -421,16 +413,20 @@ Resource* ResourceFetcher::requestResource(FetchRequest& request, const Resource
context().addClientHintsIfNecessary(request);
context().addCSPHeaderIfNecessary(factory.type(), request);
- KURL url = request.resourceRequest().url();
- KURL urlWithoutFragment = MemoryCache::removeFragmentIdentifierIfNeeded(url);
- TRACE_EVENT1("blink", "ResourceFetcher::requestResource", "url", urlForTraceEvent(url));
+ TRACE_EVENT1("blink", "ResourceFetcher::requestResource", "url", urlForTraceEvent(request.url()));
- WTF_LOG(ResourceLoading, "ResourceFetcher::requestResource '%s', charset '%s', priority=%d, forPreload=%u, type=%s", url.elidedString().latin1().data(), request.charset().latin1().data(), request.priority(), request.forPreload(), Resource::resourceTypeName(factory.type()));
+ if (!request.url().isValid())
+ return nullptr;
- if (!url.isValid())
+ if (!context().canRequest(factory.type(), request.resourceRequest(), MemoryCache::removeFragmentIdentifierIfNeeded(request.url()), request.options(), request.forPreload(), request.getOriginRestriction()))
return nullptr;
- if (!context().canRequest(factory.type(), request.resourceRequest(), urlWithoutFragment, request.options(), request.forPreload(), request.getOriginRestriction()))
+ unsigned long identifier = createUniqueIdentifier();
+ request.setPriority(loadPriority(factory.type(), request, ResourcePriority::NotVisible));
+ request.mutableResourceRequest().setPriority(request.priority());
+ initializeResourceRequest(request.mutableResourceRequest(), factory.type(), request.defer());
+ context().willStartLoadingResource(identifier, request.mutableResourceRequest(), factory.type());
+ if (!request.url().isValid())
return nullptr;
if (!request.forPreload()) {
@@ -443,7 +439,7 @@ Resource* ResourceFetcher::requestResource(FetchRequest& request, const Resource
if (activityLogger) {
Vector<String> argv;
argv.append(Resource::resourceTypeToString(factory.type(), request.options().initiatorInfo));
- argv.append(url);
+ argv.append(request.url());
activityLogger->logEvent("blinkRequestResource", argv.size(), argv.data());
}
}
@@ -457,7 +453,7 @@ Resource* ResourceFetcher::requestResource(FetchRequest& request, const Resource
return nullptr;
}
if (!resource)
- resource = memoryCache()->resourceForURL(url, getCacheIdentifier());
+ resource = memoryCache()->resourceForURL(request.url(), getCacheIdentifier());
// See if we can use an existing resource from the cache. If so, we need to move it to be load blocking.
moveCachedNonBlockingResourceToBlocking(resource, request);
@@ -466,7 +462,9 @@ Resource* ResourceFetcher::requestResource(FetchRequest& request, const Resource
updateMemoryCacheStats(resource, policy, request, factory, isStaticData);
- initializeResourceRequest(request.mutableResourceRequest(), factory.type(), request.defer());
+ if (policy != Use)
+ willSendRequest(identifier, request.mutableResourceRequest(), ResourceResponse(), request.options());
+
switch (policy) {
case Reload:
memoryCache()->remove(resource);
@@ -475,7 +473,7 @@ Resource* ResourceFetcher::requestResource(FetchRequest& request, const Resource
resource = createResourceForLoading(request, request.charset(), factory);
break;
case Revalidate:
- initializeRevalidation(request, resource);
+ initializeRevalidation(request.mutableResourceRequest(), resource);
break;
case Use:
memoryCache()->updateForAccess(resource);
@@ -493,23 +491,22 @@ Resource* ResourceFetcher::requestResource(FetchRequest& request, const Resource
m_deadStatsRecorder.update(policy);
if (policy != Use)
- resource->setIdentifier(createUniqueIdentifier());
+ resource->setIdentifier(identifier);
if (!request.forPreload() || policy != Use) {
- ResourceLoadPriority priority = loadPriority(factory.type(), request, ResourcePriority::NotVisible);
// When issuing another request for a resource that is already in-flight make
// sure to not demote the priority of the in-flight request. If the new request
// isn't at the same priority as the in-flight request, only allow promotions.
// This can happen when a visible image's priority is increased and then another
// reference to the image is parsed (which would be at a lower priority).
- if (priority > resource->resourceRequest().priority())
- resource->didChangePriority(priority, 0);
+ if (request.priority() > resource->resourceRequest().priority())
+ resource->didChangePriority(request.priority(), 0);
}
// If only the fragment identifiers differ, it is the same resource.
- ASSERT(equalIgnoringFragmentIdentifier(resource->url(), url));
- requestLoadStarted(resource, request, policy == Use ? ResourceLoadingFromCache : ResourceLoadingFromNetwork, isStaticData);
- m_documentResources.set(urlWithoutFragment, resource);
+ DCHECK(equalIgnoringFragmentIdentifier(resource->url(), request.url()));
+ requestLoadStarted(identifier, resource, request, policy == Use ? ResourceLoadingFromCache : ResourceLoadingFromNetwork, isStaticData);
+ m_documentResources.set(MemoryCache::removeFragmentIdentifierIfNeeded(request.url()), resource);
// Returns with an existing resource if the resource does not need to start
// loading immediately.
@@ -518,13 +515,8 @@ Resource* ResourceFetcher::requestResource(FetchRequest& request, const Resource
if (!resourceNeedsLoad(resource, request, policy))
return resource;
- if (!context().shouldLoadNewResource(factory.type())) {
- if (memoryCache()->contains(resource))
- memoryCache()->remove(resource);
+ if (!startLoad(resource))
return nullptr;
- }
-
- resource->load(this);
ASSERT(!resource->errorOccurred() || request.options().synchronousPolicy == RequestSynchronously);
return resource;
}
@@ -561,7 +553,7 @@ void ResourceFetcher::initializeResourceRequest(ResourceRequest& request, Resour
context().addAdditionalRequestHeaders(request, (type == Resource::MainResource) ? FetchMainResource : FetchSubresource);
}
-void ResourceFetcher::initializeRevalidation(const FetchRequest& request, Resource* resource)
+void ResourceFetcher::initializeRevalidation(ResourceRequest& revalidatingRequest, Resource* resource)
{
ASSERT(resource);
ASSERT(memoryCache()->contains(resource));
@@ -570,10 +562,6 @@ void ResourceFetcher::initializeRevalidation(const FetchRequest& request, Resour
ASSERT(!resource->isCacheValidator());
ASSERT(!context().isControlledByServiceWorker());
- ResourceRequest revalidatingRequest(resource->resourceRequest());
- revalidatingRequest.clearHTTPReferrer();
- initializeResourceRequest(revalidatingRequest, resource->getType(), request.defer());
-
const AtomicString& lastModified = resource->response().httpHeaderField(HTTPNames::Last_Modified);
const AtomicString& eTag = resource->response().httpHeaderField(HTTPNames::ETag);
if (!lastModified.isEmpty() || !eTag.isEmpty()) {
@@ -723,9 +711,6 @@ ResourceFetcher::RevalidationPolicy ResourceFetcher::determineRevalidationPolicy
if (m_allowStaleResources)
return Use;
- if (request.getCachePolicy() == WebCachePolicy::BypassingCache)
- return Reload;
-
if (!fetchRequest.options().canReuseRequest(existingResource->options()))
return Reload;
@@ -767,6 +752,9 @@ ResourceFetcher::RevalidationPolicy ResourceFetcher::determineRevalidationPolicy
return Use;
}
+ if (request.getCachePolicy() == WebCachePolicy::BypassingCache)
+ return Reload;
+
// CachePolicyReload always reloads
if (cachePolicy == CachePolicyReload) {
WTF_LOG(ResourceLoading, "ResourceFetcher::determineRevalidationPolicy reloading due to CachePolicyReload.");
@@ -852,7 +840,7 @@ void ResourceFetcher::reloadImagesIfNotDeferred()
{
for (Resource* resource : m_documentResources.values()) {
if (resource->getType() == Resource::Image && resource->stillNeedsLoad() && !shouldDeferImageLoad(resource->url()))
- const_cast<Resource*>(resource)->load(this);
+ startLoad(resource);
}
}
@@ -987,17 +975,24 @@ void ResourceFetcher::moveResourceLoaderToNonBlocking(ResourceLoader* loader)
m_loaders.remove(loader);
}
-void ResourceFetcher::willStartLoadingResource(Resource* resource, ResourceLoader* loader, ResourceRequest& request)
+bool ResourceFetcher::startLoad(Resource* resource)
{
+ DCHECK(resource && resource->stillNeedsLoad());
+ if (!context().shouldLoadNewResource(resource->getType())) {
+ memoryCache()->remove(resource);
+ return false;
+ }
+
+ ResourceLoader* loader = ResourceLoader::create(this, resource);
if (resource->shouldBlockLoadEvent())
m_loaders.add(loader);
else
m_nonBlockingLoaders.add(loader);
- context().willStartLoadingResource(resource, request);
storeResourceTimingInitiatorInformation(resource);
-
- context().dispatchWillSendRequest(resource->identifier(), request, ResourceResponse(), resource->options().initiatorInfo);
+ resource->setFetcherSecurityOrigin(context().getSecurityOrigin());
+ loader->start(resource->resourceRequest(), context().loadingTaskRunner(), context().defersLoading());
+ return true;
}
void ResourceFetcher::removeResourceLoader(ResourceLoader* loader)
@@ -1062,10 +1057,16 @@ bool ResourceFetcher::willFollowRedirect(Resource* resource, ResourceRequest& ne
ResourceTimingInfoMap::iterator it = m_resourceTimingInfoMap.find(resource);
if (it != m_resourceTimingInfoMap.end())
it->value->addRedirect(redirectResponse);
- context().dispatchWillSendRequest(resource->identifier(), newRequest, redirectResponse, resource->options().initiatorInfo);
+ willSendRequest(resource->identifier(), newRequest, redirectResponse, resource->options());
return true;
}
+void ResourceFetcher::willSendRequest(unsigned long identifier, ResourceRequest& newRequest, const ResourceResponse& redirectResponse, const ResourceLoaderOptions& options)
+{
+ newRequest.setAllowStoredCredentials(options.allowCredentials == AllowStoredCredentials);
+ context().dispatchWillSendRequest(identifier, newRequest, redirectResponse, options.initiatorInfo);
+}
+
void ResourceFetcher::updateAllImageResourcePriorities()
{
TRACE_EVENT0("blink", "ResourceLoadPriorityOptimizer::updateAllImageResourcePriorities");
« no previous file with comments | « third_party/WebKit/Source/core/fetch/ResourceFetcher.h ('k') | third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698