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)) |