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

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

Issue 1757083002: [SVG 1/4] Move Resource::finish() for data URLs from requestResource() to Resource::load() Base URL: https://chromium.googlesource.com/chromium/src.git@SVG_new0b
Patch Set: auto-Rebase Created 4 years, 9 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
« no previous file with comments | « third_party/WebKit/Source/core/fetch/ResourceFetcher.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 ab362a158edda8b392aea025ec23b8338021bae3..08a9a95f8a62f28c87595e12216fb03823227f3c 100644
--- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
+++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
@@ -322,57 +322,6 @@ static PassOwnPtr<TracedValue> urlForTraceEvent(const KURL& url)
return value.release();
}
-PassRefPtrWillBeRawPtr<Resource> ResourceFetcher::resourceForStaticData(const FetchRequest& request, const ResourceFactory& factory, const SubstituteData& substituteData)
-{
- const KURL& url = request.resourceRequest().url();
- ASSERT(url.protocolIsData() || substituteData.isValid());
-
- // TODO(japhet): We only send main resource data: urls through WebURLLoader for the benefit of
- // a service worker test (RenderViewImplTest.ServiceWorkerNetworkProviderSetup), which is at a
- // layer where it isn't easy to mock out a network load. It uses data: urls to emulate the
- // behavior it wants to test, which would otherwise be reserved for network loads.
- if ((factory.type() == Resource::MainResource && !substituteData.isValid()) || factory.type() == Resource::Raw)
- return nullptr;
-
- const String cacheIdentifier = getCacheIdentifier();
- if (Resource* oldResource = memoryCache()->resourceForURL(url, cacheIdentifier)) {
- // There's no reason to re-parse if we saved the data from the previous parse.
- if (request.options().dataBufferingPolicy != DoNotBufferData)
- return oldResource;
- memoryCache()->remove(oldResource);
- }
-
- WebString mimetype;
- WebString charset;
- RefPtr<SharedBuffer> data;
- if (substituteData.isValid()) {
- mimetype = substituteData.mimeType();
- charset = substituteData.textEncoding();
- data = substituteData.content();
- } else {
- data = PassRefPtr<SharedBuffer>(Platform::current()->parseDataURL(url, mimetype, charset));
- if (!data)
- return nullptr;
- }
- ResourceResponse response(url, mimetype, data->size(), charset, String());
- response.setHTTPStatusCode(200);
- response.setHTTPStatusText("OK");
-
- RefPtrWillBeRawPtr<Resource> resource = factory.create(request.resourceRequest(), request.charset());
- resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad());
- resource->setOptions(request.options());
- // FIXME: We should provide a body stream here.
- resource->responseReceived(response, nullptr);
- resource->setDataBufferingPolicy(BufferData);
- if (data->size())
- resource->setResourceBuffer(data);
- resource->setIdentifier(createUniqueIdentifier());
- resource->setCacheIdentifier(cacheIdentifier);
- resource->finish();
- memoryCache()->add(resource.get());
- return resource.release();
-}
-
void ResourceFetcher::moveCachedNonBlockingResourceToBlocking(Resource* resource, const FetchRequest& request)
{
// TODO(yoav): Test that non-blocking resources (video/audio/track) continue to not-block even after being preloaded and discovered.
@@ -422,17 +371,23 @@ PassRefPtrWillBeRawPtr<Resource> ResourceFetcher::requestResource(FetchRequest&
}
}
- bool isStaticData = request.resourceRequest().url().protocolIsData() || substituteData.isValid();
+ const bool isSubstituteData = substituteData.isValid();
+ const bool isStaticData = isSubstituteData || request.resourceRequest().url().protocolIsData();
RefPtrWillBeRawPtr<Resource> resource(nullptr);
- if (isStaticData)
- resource = resourceForStaticData(request, factory, substituteData);
- if (!resource)
+ if (isSubstituteData) {
+ resource = factory.create(request.resourceRequest(), request.charset());
+ resource->setCacheIdentifier(getCacheIdentifier());
+ resource->setIdentifier(createUniqueIdentifier());
+ resource->loadLocallySubstituteData(request.resourceRequest(), request.options(), substituteData);
+ }
+ if (!resource) {
resource = memoryCache()->resourceForURL(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.get(), request);
- const RevalidationPolicy policy = determineRevalidationPolicy(factory.type(), request, resource.get(), isStaticData);
+ const RevalidationPolicy policy = determineRevalidationPolicy(factory.type(), request, resource.get(), isSubstituteData);
if (request.forPreload()) {
DEFINE_RESOURCE_HISTOGRAM("Preload.");
@@ -515,7 +470,7 @@ PassRefPtrWillBeRawPtr<Resource> ResourceFetcher::requestResource(FetchRequest&
// use.
// Remove main resource from cache to prevent reuse.
if (factory.type() == Resource::MainResource) {
- ASSERT(policy != Use || isStaticData);
+ ASSERT(policy != Use || isSubstituteData);
ASSERT(policy != Revalidate);
memoryCache()->remove(resource.get());
}
@@ -626,7 +581,7 @@ void ResourceFetcher::storeResourceTimingInitiatorInformation(Resource* resource
m_resourceTimingInfoMap.add(resource, info.release());
}
-ResourceFetcher::RevalidationPolicy ResourceFetcher::determineRevalidationPolicy(Resource::Type type, const FetchRequest& fetchRequest, Resource* existingResource, bool isStaticData) const
+ResourceFetcher::RevalidationPolicy ResourceFetcher::determineRevalidationPolicy(Resource::Type type, const FetchRequest& fetchRequest, Resource* existingResource, bool isSubstituteData) const
{
const ResourceRequest& request = fetchRequest.resourceRequest();
@@ -684,8 +639,8 @@ ResourceFetcher::RevalidationPolicy ResourceFetcher::determineRevalidationPolicy
if (request.downloadToFile() || request.useStreamOnResponse())
return Reload;
- // If resource was populated from a SubstituteData load or data: url, use it.
- if (isStaticData)
+ // If resource was populated from a SubstituteData load, use it.
+ if (isSubstituteData)
return Use;
if (!existingResource->canReuse(request))
« no previous file with comments | « third_party/WebKit/Source/core/fetch/ResourceFetcher.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698