| 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 1026b569d525456791599c5a32388fa2b29515e2..09a67634939a20b81c887427d9051c85f8fe3d65 100644
|
| --- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
|
| +++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
|
| @@ -376,7 +376,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());
|
| @@ -475,13 +475,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());
|
| @@ -505,7 +505,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)
|
| @@ -531,7 +539,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);
|
| }
|
|
|