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 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
671 | 671 |
672 // See if we can use an existing resource from the cache. | 672 // See if we can use an existing resource from the cache. |
673 ResourcePtr<Resource> resource = memoryCache()->resourceForURL(url); | 673 ResourcePtr<Resource> resource = memoryCache()->resourceForURL(url); |
674 | 674 |
675 const RevalidationPolicy policy = determineRevalidationPolicy(type, request. mutableResourceRequest(), request.forPreload(), resource.get(), request.defer(), request.options()); | 675 const RevalidationPolicy policy = determineRevalidationPolicy(type, request. mutableResourceRequest(), request.forPreload(), resource.get(), request.defer(), request.options()); |
676 switch (policy) { | 676 switch (policy) { |
677 case Reload: | 677 case Reload: |
678 memoryCache()->remove(resource.get()); | 678 memoryCache()->remove(resource.get()); |
679 // Fall through | 679 // Fall through |
680 case Load: | 680 case Load: |
681 resource = loadResource(type, request, request.charset()); | 681 resource = createResourceForLoading(type, request, request.charset()); |
682 break; | 682 break; |
683 case Revalidate: | 683 case Revalidate: |
684 resource = revalidateResource(request, resource.get()); | 684 resource = createResourceForRevalidation(request, resource.get()); |
685 break; | 685 break; |
686 case Use: | 686 case Use: |
687 memoryCache()->updateForAccess(resource.get()); | 687 memoryCache()->updateForAccess(resource.get()); |
688 notifyLoadedFromMemoryCache(resource.get()); | 688 notifyLoadedFromMemoryCache(resource.get()); |
689 break; | 689 break; |
690 } | 690 } |
691 | 691 |
692 if (!resource) | 692 if (!resource) |
693 return 0; | 693 return 0; |
694 | 694 |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
810 if (request.cachePolicy() == UseProtocolCachePolicy) | 810 if (request.cachePolicy() == UseProtocolCachePolicy) |
811 request.setCachePolicy(resourceRequestCachePolicy(request, type)); | 811 request.setCachePolicy(resourceRequestCachePolicy(request, type)); |
812 if (request.targetType() == ResourceRequest::TargetIsUnspecified) | 812 if (request.targetType() == ResourceRequest::TargetIsUnspecified) |
813 determineTargetType(request, type); | 813 determineTargetType(request, type); |
814 if (type == Resource::LinkPrefetch || type == Resource::LinkSubresource) | 814 if (type == Resource::LinkPrefetch || type == Resource::LinkSubresource) |
815 request.setHTTPHeaderField("Purpose", "prefetch"); | 815 request.setHTTPHeaderField("Purpose", "prefetch"); |
816 | 816 |
817 context().addAdditionalRequestHeaders(document(), request, (type == Resource ::MainResource) ? FetchMainResource : FetchSubresource); | 817 context().addAdditionalRequestHeaders(document(), request, (type == Resource ::MainResource) ? FetchMainResource : FetchSubresource); |
818 } | 818 } |
819 | 819 |
820 ResourcePtr<Resource> ResourceFetcher::revalidateResource(const FetchRequest& re quest, Resource* resource) | 820 ResourcePtr<Resource> ResourceFetcher::createResourceForRevalidation(const Fetch Request& request, Resource* resource) |
821 { | 821 { |
822 ASSERT(resource); | 822 ASSERT(resource); |
823 ASSERT(memoryCache()->contains(resource)); | 823 ASSERT(memoryCache()->contains(resource)); |
824 ASSERT(resource->isLoaded()); | 824 ASSERT(resource->isLoaded()); |
825 ASSERT(resource->canUseCacheValidator()); | 825 ASSERT(resource->canUseCacheValidator()); |
826 ASSERT(!resource->resourceToRevalidate()); | 826 ASSERT(!resource->resourceToRevalidate()); |
827 | 827 |
828 ResourceRequest revalidatingRequest(resource->resourceRequest()); | 828 ResourceRequest revalidatingRequest(resource->resourceRequest()); |
829 revalidatingRequest.clearHTTPReferrer(); | 829 revalidatingRequest.clearHTTPReferrer(); |
830 addAdditionalRequestHeaders(revalidatingRequest, resource->type()); | 830 addAdditionalRequestHeaders(revalidatingRequest, resource->type()); |
831 | 831 |
832 const AtomicString& lastModified = resource->response().httpHeaderField("Las t-Modified"); | 832 const AtomicString& lastModified = resource->response().httpHeaderField("Las t-Modified"); |
833 const AtomicString& eTag = resource->response().httpHeaderField("ETag"); | 833 const AtomicString& eTag = resource->response().httpHeaderField("ETag"); |
834 if (!lastModified.isEmpty() || !eTag.isEmpty()) { | 834 if (!lastModified.isEmpty() || !eTag.isEmpty()) { |
835 ASSERT(context().cachePolicy(document()) != CachePolicyReload); | 835 ASSERT(context().cachePolicy(document()) != CachePolicyReload); |
836 if (context().cachePolicy(document()) == CachePolicyRevalidate) | 836 if (context().cachePolicy(document()) == CachePolicyRevalidate) |
837 revalidatingRequest.setHTTPHeaderField("Cache-Control", "max-age=0") ; | 837 revalidatingRequest.setHTTPHeaderField("Cache-Control", "max-age=0") ; |
838 if (!lastModified.isEmpty()) | |
839 revalidatingRequest.setHTTPHeaderField("If-Modified-Since", lastModi fied); | |
840 if (!eTag.isEmpty()) | |
841 revalidatingRequest.setHTTPHeaderField("If-None-Match", eTag); | |
842 } | 838 } |
839 if (!lastModified.isEmpty()) | |
840 revalidatingRequest.setHTTPHeaderField("If-Modified-Since", lastModified ); | |
841 if (!eTag.isEmpty()) | |
842 revalidatingRequest.setHTTPHeaderField("If-None-Match", eTag); | |
843 | 843 |
844 ResourcePtr<Resource> newResource = createResource(resource->type(), revalid atingRequest, resource->encoding()); | 844 ResourcePtr<Resource> newResource = createResource(resource->type(), revalid atingRequest, resource->encoding()); |
845 WTF_LOG(ResourceLoading, "Resource %p created to revalidate %p", newResource .get(), resource); | |
845 | 846 |
846 WTF_LOG(ResourceLoading, "Resource %p created to revalidate %p", newResource .get(), resource); | |
847 newResource->setResourceToRevalidate(resource); | 847 newResource->setResourceToRevalidate(resource); |
848 | 848 |
849 memoryCache()->remove(resource); | 849 memoryCache()->remove(resource); |
850 memoryCache()->add(newResource.get()); | 850 memoryCache()->add(newResource.get()); |
851 | |
Nate Chapin
2014/06/06 16:16:31
Why the newlines here and below?
tyoshino (SeeGerritForStatus)
2014/06/09 02:03:32
I tend to insert a blank line right before the las
| |
851 return newResource; | 852 return newResource; |
852 } | 853 } |
853 | 854 |
854 ResourcePtr<Resource> ResourceFetcher::loadResource(Resource::Type type, FetchRe quest& request, const String& charset) | 855 ResourcePtr<Resource> ResourceFetcher::createResourceForLoading(Resource::Type t ype, FetchRequest& request, const String& charset) |
855 { | 856 { |
856 ASSERT(!memoryCache()->resourceForURL(request.resourceRequest().url())); | 857 ASSERT(!memoryCache()->resourceForURL(request.resourceRequest().url())); |
857 | 858 |
858 WTF_LOG(ResourceLoading, "Loading Resource for '%s'.", request.resourceReque st().url().elidedString().latin1().data()); | 859 WTF_LOG(ResourceLoading, "Loading Resource for '%s'.", request.resourceReque st().url().elidedString().latin1().data()); |
859 | 860 |
860 addAdditionalRequestHeaders(request.mutableResourceRequest(), type); | 861 addAdditionalRequestHeaders(request.mutableResourceRequest(), type); |
861 ResourcePtr<Resource> resource = createResource(type, request.mutableResourc eRequest(), charset); | 862 ResourcePtr<Resource> resource = createResource(type, request.resourceReques t(), charset); |
862 | 863 |
863 memoryCache()->add(resource.get()); | 864 memoryCache()->add(resource.get()); |
865 | |
864 return resource; | 866 return resource; |
865 } | 867 } |
866 | 868 |
867 void ResourceFetcher::storeResourceTimingInitiatorInformation(Resource* resource ) | 869 void ResourceFetcher::storeResourceTimingInitiatorInformation(Resource* resource ) |
868 { | 870 { |
869 if (resource->options().requestInitiatorContext != DocumentContext) | 871 if (resource->options().requestInitiatorContext != DocumentContext) |
870 return; | 872 return; |
871 | 873 |
872 RefPtr<ResourceTimingInfo> info = ResourceTimingInfo::create(resource->optio ns().initiatorInfo.name, monotonicallyIncreasingTime()); | 874 RefPtr<ResourceTimingInfo> info = ResourceTimingInfo::create(resource->optio ns().initiatorInfo.name, monotonicallyIncreasingTime()); |
873 | 875 |
(...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1470 } | 1472 } |
1471 } | 1473 } |
1472 | 1474 |
1473 void ResourceFetcher::trace(Visitor* visitor) | 1475 void ResourceFetcher::trace(Visitor* visitor) |
1474 { | 1476 { |
1475 visitor->trace(m_document); | 1477 visitor->trace(m_document); |
1476 ResourceLoaderHost::trace(visitor); | 1478 ResourceLoaderHost::trace(visitor); |
1477 } | 1479 } |
1478 | 1480 |
1479 } | 1481 } |
OLD | NEW |