| OLD | NEW |
| 1 /* | 1 /* |
| 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) | 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) |
| 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) | 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) |
| 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) | 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) |
| 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
rights reserved. | 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
rights reserved. |
| 6 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ | 6 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ |
| 7 | 7 |
| 8 This library is free software; you can redistribute it and/or | 8 This library is free software; you can redistribute it and/or |
| 9 modify it under the terms of the GNU Library General Public | 9 modify it under the terms of the GNU Library General Public |
| 10 License as published by the Free Software Foundation; either | 10 License as published by the Free Software Foundation; either |
| (...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 694 | 694 |
| 695 // See if we can use an existing resource from the cache. | 695 // See if we can use an existing resource from the cache. |
| 696 ResourcePtr<Resource> resource = memoryCache()->resourceForURL(url); | 696 ResourcePtr<Resource> resource = memoryCache()->resourceForURL(url); |
| 697 | 697 |
| 698 const RevalidationPolicy policy = determineRevalidationPolicy(type, request.
mutableResourceRequest(), request.forPreload(), resource.get(), request.defer(),
request.options()); | 698 const RevalidationPolicy policy = determineRevalidationPolicy(type, request.
mutableResourceRequest(), request.forPreload(), resource.get(), request.defer(),
request.options()); |
| 699 switch (policy) { | 699 switch (policy) { |
| 700 case Reload: | 700 case Reload: |
| 701 memoryCache()->remove(resource.get()); | 701 memoryCache()->remove(resource.get()); |
| 702 // Fall through | 702 // Fall through |
| 703 case Load: | 703 case Load: |
| 704 resource = loadResource(type, request, request.charset()); | 704 resource = createResourceForLoading(type, request, request.charset()); |
| 705 break; | 705 break; |
| 706 case Revalidate: | 706 case Revalidate: |
| 707 resource = revalidateResource(request, resource.get()); | 707 resource = createResourceForRevalidation(request, resource.get()); |
| 708 break; | 708 break; |
| 709 case Use: | 709 case Use: |
| 710 memoryCache()->updateForAccess(resource.get()); | 710 memoryCache()->updateForAccess(resource.get()); |
| 711 break; | 711 break; |
| 712 } | 712 } |
| 713 | 713 |
| 714 if (!resource) | 714 if (!resource) |
| 715 return 0; | 715 return 0; |
| 716 | 716 |
| 717 if (!resource->hasClients()) | 717 if (!resource->hasClients()) |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 832 if (request.cachePolicy() == UseProtocolCachePolicy) | 832 if (request.cachePolicy() == UseProtocolCachePolicy) |
| 833 request.setCachePolicy(resourceRequestCachePolicy(request, type)); | 833 request.setCachePolicy(resourceRequestCachePolicy(request, type)); |
| 834 if (request.targetType() == ResourceRequest::TargetIsUnspecified) | 834 if (request.targetType() == ResourceRequest::TargetIsUnspecified) |
| 835 determineTargetType(request, type); | 835 determineTargetType(request, type); |
| 836 if (type == Resource::LinkPrefetch || type == Resource::LinkSubresource) | 836 if (type == Resource::LinkPrefetch || type == Resource::LinkSubresource) |
| 837 request.setHTTPHeaderField("Purpose", "prefetch"); | 837 request.setHTTPHeaderField("Purpose", "prefetch"); |
| 838 | 838 |
| 839 context().addAdditionalRequestHeaders(document(), request, (type == Resource
::MainResource) ? FetchMainResource : FetchSubresource); | 839 context().addAdditionalRequestHeaders(document(), request, (type == Resource
::MainResource) ? FetchMainResource : FetchSubresource); |
| 840 } | 840 } |
| 841 | 841 |
| 842 ResourcePtr<Resource> ResourceFetcher::revalidateResource(const FetchRequest& re
quest, Resource* resource) | 842 ResourcePtr<Resource> ResourceFetcher::createResourceForRevalidation(const Fetch
Request& request, Resource* resource) |
| 843 { | 843 { |
| 844 ASSERT(resource); | 844 ASSERT(resource); |
| 845 ASSERT(memoryCache()->contains(resource)); | 845 ASSERT(memoryCache()->contains(resource)); |
| 846 ASSERT(resource->isLoaded()); | 846 ASSERT(resource->isLoaded()); |
| 847 ASSERT(resource->canUseCacheValidator()); | 847 ASSERT(resource->canUseCacheValidator()); |
| 848 ASSERT(!resource->resourceToRevalidate()); | 848 ASSERT(!resource->resourceToRevalidate()); |
| 849 | 849 |
| 850 ResourceRequest revalidatingRequest(resource->resourceRequest()); | 850 ResourceRequest revalidatingRequest(resource->resourceRequest()); |
| 851 revalidatingRequest.clearHTTPReferrer(); | 851 revalidatingRequest.clearHTTPReferrer(); |
| 852 addAdditionalRequestHeaders(revalidatingRequest, resource->type()); | 852 addAdditionalRequestHeaders(revalidatingRequest, resource->type()); |
| 853 | 853 |
| 854 const AtomicString& lastModified = resource->response().httpHeaderField("Las
t-Modified"); | 854 const AtomicString& lastModified = resource->response().httpHeaderField("Las
t-Modified"); |
| 855 const AtomicString& eTag = resource->response().httpHeaderField("ETag"); | 855 const AtomicString& eTag = resource->response().httpHeaderField("ETag"); |
| 856 if (!lastModified.isEmpty() || !eTag.isEmpty()) { | 856 if (!lastModified.isEmpty() || !eTag.isEmpty()) { |
| 857 ASSERT(context().cachePolicy(document()) != CachePolicyReload); | 857 ASSERT(context().cachePolicy(document()) != CachePolicyReload); |
| 858 if (context().cachePolicy(document()) == CachePolicyRevalidate) | 858 if (context().cachePolicy(document()) == CachePolicyRevalidate) |
| 859 revalidatingRequest.setHTTPHeaderField("Cache-Control", "max-age=0")
; | 859 revalidatingRequest.setHTTPHeaderField("Cache-Control", "max-age=0")
; |
| 860 if (!lastModified.isEmpty()) | |
| 861 revalidatingRequest.setHTTPHeaderField("If-Modified-Since", lastModi
fied); | |
| 862 if (!eTag.isEmpty()) | |
| 863 revalidatingRequest.setHTTPHeaderField("If-None-Match", eTag); | |
| 864 } | 860 } |
| 861 if (!lastModified.isEmpty()) |
| 862 revalidatingRequest.setHTTPHeaderField("If-Modified-Since", lastModified
); |
| 863 if (!eTag.isEmpty()) |
| 864 revalidatingRequest.setHTTPHeaderField("If-None-Match", eTag); |
| 865 | 865 |
| 866 ResourcePtr<Resource> newResource = createResource(resource->type(), revalid
atingRequest, resource->encoding()); | 866 ResourcePtr<Resource> newResource = createResource(resource->type(), revalid
atingRequest, resource->encoding()); |
| 867 WTF_LOG(ResourceLoading, "Resource %p created to revalidate %p", newResource
.get(), resource); |
| 867 | 868 |
| 868 WTF_LOG(ResourceLoading, "Resource %p created to revalidate %p", newResource
.get(), resource); | |
| 869 newResource->setResourceToRevalidate(resource); | 869 newResource->setResourceToRevalidate(resource); |
| 870 | 870 |
| 871 memoryCache()->remove(resource); | 871 memoryCache()->remove(resource); |
| 872 memoryCache()->add(newResource.get()); | 872 memoryCache()->add(newResource.get()); |
| 873 return newResource; | 873 return newResource; |
| 874 } | 874 } |
| 875 | 875 |
| 876 ResourcePtr<Resource> ResourceFetcher::loadResource(Resource::Type type, FetchRe
quest& request, const String& charset) | 876 ResourcePtr<Resource> ResourceFetcher::createResourceForLoading(Resource::Type t
ype, FetchRequest& request, const String& charset) |
| 877 { | 877 { |
| 878 ASSERT(!memoryCache()->resourceForURL(request.resourceRequest().url())); | 878 ASSERT(!memoryCache()->resourceForURL(request.resourceRequest().url())); |
| 879 | 879 |
| 880 WTF_LOG(ResourceLoading, "Loading Resource for '%s'.", request.resourceReque
st().url().elidedString().latin1().data()); | 880 WTF_LOG(ResourceLoading, "Loading Resource for '%s'.", request.resourceReque
st().url().elidedString().latin1().data()); |
| 881 | 881 |
| 882 addAdditionalRequestHeaders(request.mutableResourceRequest(), type); | 882 addAdditionalRequestHeaders(request.mutableResourceRequest(), type); |
| 883 ResourcePtr<Resource> resource = createResource(type, request.mutableResourc
eRequest(), charset); | 883 ResourcePtr<Resource> resource = createResource(type, request.resourceReques
t(), charset); |
| 884 | 884 |
| 885 memoryCache()->add(resource.get()); | 885 memoryCache()->add(resource.get()); |
| 886 return resource; | 886 return resource; |
| 887 } | 887 } |
| 888 | 888 |
| 889 void ResourceFetcher::storeResourceTimingInitiatorInformation(Resource* resource
) | 889 void ResourceFetcher::storeResourceTimingInitiatorInformation(Resource* resource
) |
| 890 { | 890 { |
| 891 if (resource->options().requestInitiatorContext != DocumentContext) | 891 if (resource->options().requestInitiatorContext != DocumentContext) |
| 892 return; | 892 return; |
| 893 | 893 |
| (...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1492 } | 1492 } |
| 1493 } | 1493 } |
| 1494 | 1494 |
| 1495 void ResourceFetcher::trace(Visitor* visitor) | 1495 void ResourceFetcher::trace(Visitor* visitor) |
| 1496 { | 1496 { |
| 1497 visitor->trace(m_document); | 1497 visitor->trace(m_document); |
| 1498 ResourceLoaderHost::trace(visitor); | 1498 ResourceLoaderHost::trace(visitor); |
| 1499 } | 1499 } |
| 1500 | 1500 |
| 1501 } | 1501 } |
| OLD | NEW |