| Index: Source/core/fetch/ResourceFetcher.cpp
|
| diff --git a/Source/core/fetch/ResourceFetcher.cpp b/Source/core/fetch/ResourceFetcher.cpp
|
| index e0874bc6d37e800dba7348467b4605dc261321b8..f887eaf19084608b9e6a5611cd4261db1c4bea2e 100644
|
| --- a/Source/core/fetch/ResourceFetcher.cpp
|
| +++ b/Source/core/fetch/ResourceFetcher.cpp
|
| @@ -302,7 +302,7 @@
|
| resource = createResourceForLoading(request, request.charset(), factory);
|
| break;
|
| case Revalidate:
|
| - initializeRevalidation(request, resource.get());
|
| + resource = createResourceForRevalidation(request, resource.get(), factory);
|
| break;
|
| case Use:
|
| memoryCache()->updateForAccess(resource.get());
|
| @@ -403,13 +403,13 @@
|
| context().addAdditionalRequestHeaders(request, (type == Resource::MainResource) ? FetchMainResource : FetchSubresource);
|
| }
|
|
|
| -void ResourceFetcher::initializeRevalidation(const FetchRequest& request, Resource* resource)
|
| +ResourcePtr<Resource> ResourceFetcher::createResourceForRevalidation(const FetchRequest& request, Resource* resource, const ResourceFactory& factory)
|
| {
|
| ASSERT(resource);
|
| ASSERT(memoryCache()->contains(resource));
|
| ASSERT(resource->isLoaded());
|
| ASSERT(resource->canUseCacheValidator());
|
| - ASSERT(!resource->isCacheValidator());
|
| + ASSERT(!resource->resourceToRevalidate());
|
| ASSERT(!context().isControlledByServiceWorker());
|
|
|
| ResourceRequest revalidatingRequest(resource->resourceRequest());
|
| @@ -433,7 +433,15 @@
|
| revalidatingRequest.setHTTPHeaderField("Resource-Freshness", AtomicString(String::format("max-age=%.0lf,stale-while-revalidate=%.0lf,age=%.0lf", resource->freshnessLifetime(), stalenessLifetime, resource->currentAge())));
|
| }
|
|
|
| - resource->setRevalidatingRequest(revalidatingRequest);
|
| + ResourcePtr<Resource> newResource = factory.create(revalidatingRequest, resource->encoding());
|
| + WTF_LOG(ResourceLoading, "Resource %p created to revalidate %p", newResource.get(), resource);
|
| +
|
| + newResource->setResourceToRevalidate(resource);
|
| + newResource->setCacheIdentifier(resource->cacheIdentifier());
|
| +
|
| + memoryCache()->remove(resource);
|
| + memoryCache()->add(newResource.get());
|
| + return newResource;
|
| }
|
|
|
| ResourcePtr<Resource> ResourceFetcher::createResourceForLoading(FetchRequest& request, const String& charset, const ResourceFactory& factory)
|
| @@ -459,7 +467,7 @@
|
| OwnPtr<ResourceTimingInfo> info = ResourceTimingInfo::create(resource->options().initiatorInfo.name, monotonicallyIncreasingTime(), resource->type() == Resource::MainResource);
|
|
|
| if (resource->isCacheValidator()) {
|
| - const AtomicString& timingAllowOrigin = resource->response().httpHeaderField("Timing-Allow-Origin");
|
| + const AtomicString& timingAllowOrigin = resource->resourceToRevalidate()->response().httpHeaderField("Timing-Allow-Origin");
|
| if (!timingAllowOrigin.isEmpty())
|
| info->setOriginalTimingAllowOrigin(timingAllowOrigin);
|
| }
|
|
|