Chromium Code Reviews| 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 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 149 return ResourceLoadPriorityVeryLow; | 149 return ResourceLoadPriorityVeryLow; |
| 150 case Resource::LinkSubresource: | 150 case Resource::LinkSubresource: |
| 151 return ResourceLoadPriorityLow; | 151 return ResourceLoadPriorityLow; |
| 152 case Resource::TextTrack: | 152 case Resource::TextTrack: |
| 153 return ResourceLoadPriorityLow; | 153 return ResourceLoadPriorityLow; |
| 154 } | 154 } |
| 155 ASSERT_NOT_REACHED(); | 155 ASSERT_NOT_REACHED(); |
| 156 return ResourceLoadPriorityUnresolved; | 156 return ResourceLoadPriorityUnresolved; |
| 157 } | 157 } |
| 158 | 158 |
| 159 static Resource* resourceFromDataURIRequest(const ResourceRequest& request, cons t ResourceLoaderOptions& resourceOptions) | 159 static Resource* resourceFromDataURIRequest(const ResourceRequest& request, cons t ResourceLoaderOptions& resourceOptions, const String& cacheIdentifier) |
| 160 { | 160 { |
| 161 const KURL& url = request.url(); | 161 const KURL& url = request.url(); |
| 162 ASSERT(url.protocolIsData()); | 162 ASSERT(url.protocolIsData()); |
| 163 | 163 |
| 164 blink::WebString mimetype; | 164 blink::WebString mimetype; |
| 165 blink::WebString charset; | 165 blink::WebString charset; |
| 166 RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(blink::Platform::curren t()->parseDataURL(url, mimetype, charset)); | 166 RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(blink::Platform::curren t()->parseDataURL(url, mimetype, charset)); |
| 167 if (!data) | 167 if (!data) |
| 168 return nullptr; | 168 return nullptr; |
| 169 ResourceResponse response(url, mimetype, data->size(), charset, String()); | 169 ResourceResponse response(url, mimetype, data->size(), charset, String()); |
| 170 | 170 |
| 171 Resource* resource = createResource(Resource::Image, request, charset); | 171 Resource* resource = createResource(Resource::Image, request, charset); |
| 172 resource->setOptions(resourceOptions); | 172 resource->setOptions(resourceOptions); |
| 173 resource->responseReceived(response); | 173 resource->responseReceived(response); |
| 174 if (data->size()) | 174 if (data->size()) |
| 175 resource->setResourceBuffer(data); | 175 resource->setResourceBuffer(data); |
| 176 resource->setCacheIdentifier(cacheIdentifier); | |
| 176 resource->finish(); | 177 resource->finish(); |
| 177 return resource; | 178 return resource; |
| 178 } | 179 } |
| 179 | 180 |
| 180 static void populateResourceTiming(ResourceTimingInfo* info, Resource* resource, bool clearLoadTimings) | 181 static void populateResourceTiming(ResourceTimingInfo* info, Resource* resource, bool clearLoadTimings) |
| 181 { | 182 { |
| 182 info->setInitialRequest(resource->resourceRequest()); | 183 info->setInitialRequest(resource->resourceRequest()); |
| 183 info->setFinalResponse(resource->response()); | 184 info->setFinalResponse(resource->response()); |
| 184 if (clearLoadTimings) { | 185 if (clearLoadTimings) { |
| 185 info->clearLoadTimings(); | 186 info->clearLoadTimings(); |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 323 request.setDefer(clientDefersImage(request.resourceRequest().url()) ? FetchR equest::DeferredByClient : FetchRequest::NoDefer); | 324 request.setDefer(clientDefersImage(request.resourceRequest().url()) ? FetchR equest::DeferredByClient : FetchRequest::NoDefer); |
| 324 ResourcePtr<Resource> resource = requestResource(Resource::Image, request); | 325 ResourcePtr<Resource> resource = requestResource(Resource::Image, request); |
| 325 return resource && resource->type() == Resource::Image ? toImageResource(res ource) : 0; | 326 return resource && resource->type() == Resource::Image ? toImageResource(res ource) : 0; |
| 326 } | 327 } |
| 327 | 328 |
| 328 void ResourceFetcher::preCacheDataURIImage(const FetchRequest& request) | 329 void ResourceFetcher::preCacheDataURIImage(const FetchRequest& request) |
| 329 { | 330 { |
| 330 const KURL& url = request.resourceRequest().url(); | 331 const KURL& url = request.resourceRequest().url(); |
| 331 ASSERT(url.protocolIsData()); | 332 ASSERT(url.protocolIsData()); |
| 332 | 333 |
| 333 if (memoryCache()->resourceForURL(url)) | 334 const String cacheIdentifier = createCacheIdentifier(); |
| 335 if (memoryCache()->resourceForURL(cacheIdentifier, url)) | |
| 334 return; | 336 return; |
| 335 | 337 |
| 336 if (Resource* resource = resourceFromDataURIRequest(request.resourceRequest( ), request.options())) { | 338 if (Resource* resource = resourceFromDataURIRequest(request.resourceRequest( ), request.options(), cacheIdentifier)) { |
|
Mike West
2014/10/24 12:43:00
cacheIdentifier should always be either first or l
nhiroki
2014/10/27 14:30:13
Done. I made "resourceForURL" receive "cacheIdenti
| |
| 337 memoryCache()->add(resource); | 339 memoryCache()->add(resource); |
| 338 scheduleDocumentResourcesGC(); | 340 scheduleDocumentResourcesGC(); |
| 339 } | 341 } |
| 340 } | 342 } |
| 341 | 343 |
| 342 ResourcePtr<FontResource> ResourceFetcher::fetchFont(FetchRequest& request) | 344 ResourcePtr<FontResource> ResourceFetcher::fetchFont(FetchRequest& request) |
| 343 { | 345 { |
| 344 ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone ); | 346 ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone ); |
| 345 request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestCon textFont); | 347 request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestCon textFont); |
| 346 return toFontResource(requestResource(Resource::Font, request)); | 348 return toFontResource(requestResource(Resource::Font, request)); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 417 | 419 |
| 418 ResourcePtr<RawResource> ResourceFetcher::fetchTextTrack(FetchRequest& request) | 420 ResourcePtr<RawResource> ResourceFetcher::fetchTextTrack(FetchRequest& request) |
| 419 { | 421 { |
| 420 ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone ); | 422 ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone ); |
| 421 request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestCon textTrack); | 423 request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestCon textTrack); |
| 422 return toRawResource(requestResource(Resource::TextTrack, request)); | 424 return toRawResource(requestResource(Resource::TextTrack, request)); |
| 423 } | 425 } |
| 424 | 426 |
| 425 void ResourceFetcher::preCacheSubstituteDataForMainResource(const FetchRequest& request, const SubstituteData& substituteData) | 427 void ResourceFetcher::preCacheSubstituteDataForMainResource(const FetchRequest& request, const SubstituteData& substituteData) |
| 426 { | 428 { |
| 429 const String cacheIdentifier = createCacheIdentifier(); | |
| 427 const KURL& url = request.url(); | 430 const KURL& url = request.url(); |
| 428 if (Resource* oldResource = memoryCache()->resourceForURL(url)) | 431 if (Resource* oldResource = memoryCache()->resourceForURL(cacheIdentifier, u rl)) |
| 429 memoryCache()->remove(oldResource); | 432 memoryCache()->remove(oldResource); |
| 430 | 433 |
| 431 ResourceResponse response(url, substituteData.mimeType(), substituteData.con tent()->size(), substituteData.textEncoding(), emptyString()); | 434 ResourceResponse response(url, substituteData.mimeType(), substituteData.con tent()->size(), substituteData.textEncoding(), emptyString()); |
| 432 ResourcePtr<Resource> resource = createResource(Resource::MainResource, requ est.resourceRequest(), substituteData.textEncoding()); | 435 ResourcePtr<Resource> resource = createResource(Resource::MainResource, requ est.resourceRequest(), substituteData.textEncoding()); |
| 433 resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()) ; | 436 resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()) ; |
| 434 resource->setOptions(request.options()); | 437 resource->setOptions(request.options()); |
| 435 resource->setDataBufferingPolicy(BufferData); | 438 resource->setDataBufferingPolicy(BufferData); |
| 436 resource->responseReceived(response); | 439 resource->responseReceived(response); |
| 437 if (substituteData.content()->size()) | 440 if (substituteData.content()->size()) |
| 438 resource->setResourceBuffer(substituteData.content()); | 441 resource->setResourceBuffer(substituteData.content()); |
| 442 resource->setCacheIdentifier(cacheIdentifier); | |
| 439 resource->finish(); | 443 resource->finish(); |
| 440 memoryCache()->add(resource.get()); | 444 memoryCache()->add(resource.get()); |
| 441 } | 445 } |
| 442 | 446 |
| 443 bool ResourceFetcher::canRequest(Resource::Type type, const ResourceRequest& res ourceRequest, const KURL& url, const ResourceLoaderOptions& options, bool forPre load, FetchRequest::OriginRestriction originRestriction) const | 447 bool ResourceFetcher::canRequest(Resource::Type type, const ResourceRequest& res ourceRequest, const KURL& url, const ResourceLoaderOptions& options, bool forPre load, FetchRequest::OriginRestriction originRestriction) const |
| 444 { | 448 { |
| 445 SecurityOrigin* securityOrigin = options.securityOrigin.get(); | 449 SecurityOrigin* securityOrigin = options.securityOrigin.get(); |
| 446 if (!securityOrigin && document()) | 450 if (!securityOrigin && document()) |
| 447 securityOrigin = document()->securityOrigin(); | 451 securityOrigin = document()->securityOrigin(); |
| 448 | 452 |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 715 | 719 |
| 716 if (activityLogger) { | 720 if (activityLogger) { |
| 717 Vector<String> argv; | 721 Vector<String> argv; |
| 718 argv.append(Resource::resourceTypeToString(type, request.options().i nitiatorInfo)); | 722 argv.append(Resource::resourceTypeToString(type, request.options().i nitiatorInfo)); |
| 719 argv.append(url); | 723 argv.append(url); |
| 720 activityLogger->logEvent("blinkRequestResource", argv.size(), argv.d ata()); | 724 activityLogger->logEvent("blinkRequestResource", argv.size(), argv.d ata()); |
| 721 } | 725 } |
| 722 } | 726 } |
| 723 | 727 |
| 724 // See if we can use an existing resource from the cache. | 728 // See if we can use an existing resource from the cache. |
| 725 ResourcePtr<Resource> resource = memoryCache()->resourceForURL(url); | 729 ResourcePtr<Resource> resource = memoryCache()->resourceForURL(createCacheId entifier(), url); |
| 726 | 730 |
| 727 const RevalidationPolicy policy = determineRevalidationPolicy(type, request, resource.get()); | 731 const RevalidationPolicy policy = determineRevalidationPolicy(type, request, resource.get()); |
| 728 switch (policy) { | 732 switch (policy) { |
| 729 case Reload: | 733 case Reload: |
| 730 memoryCache()->remove(resource.get()); | 734 memoryCache()->remove(resource.get()); |
| 731 // Fall through | 735 // Fall through |
| 732 case Load: | 736 case Load: |
| 733 resource = createResourceForLoading(type, request, request.charset()); | 737 resource = createResourceForLoading(type, request, request.charset()); |
| 734 break; | 738 break; |
| 735 case Revalidate: | 739 case Revalidate: |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 787 | 791 |
| 788 // FIXME: Temporarily leave main resource caching disabled for chromium, | 792 // FIXME: Temporarily leave main resource caching disabled for chromium, |
| 789 // see https://bugs.webkit.org/show_bug.cgi?id=107962. Before caching main | 793 // see https://bugs.webkit.org/show_bug.cgi?id=107962. Before caching main |
| 790 // resources, we should be sure to understand the implications for memory | 794 // resources, we should be sure to understand the implications for memory |
| 791 // use. | 795 // use. |
| 792 // Remove main resource from cache to prevent reuse. | 796 // Remove main resource from cache to prevent reuse. |
| 793 if (type == Resource::MainResource) { | 797 if (type == Resource::MainResource) { |
| 794 ASSERT(policy != Use || m_documentLoader->substituteData().isValid()); | 798 ASSERT(policy != Use || m_documentLoader->substituteData().isValid()); |
| 795 ASSERT(policy != Revalidate); | 799 ASSERT(policy != Revalidate); |
| 796 memoryCache()->remove(resource.get()); | 800 memoryCache()->remove(resource.get()); |
| 797 } else { | |
| 798 // Remove a resource to be handled by Service Worker from the cache to | |
| 799 // prevent reuse because Service Worker can serve an arbitrary resource | |
| 800 // for an URL and pollute a memory cache entry. | |
| 801 // FIXME: isControlledByServiceWorker() always returns false on main | |
| 802 // resource request, but main resource is always removed from the cache | |
| 803 // as the above comment (http://crbug.com/388375). | |
| 804 if (isControlledByServiceWorker()) { | |
| 805 ASSERT(policy == Load || policy == Reload); | |
| 806 memoryCache()->remove(resource.get()); | |
| 807 } | |
| 808 } | 801 } |
| 809 | 802 |
| 810 requestLoadStarted(resource.get(), request, policy == Use ? ResourceLoadingF romCache : ResourceLoadingFromNetwork); | 803 requestLoadStarted(resource.get(), request, policy == Use ? ResourceLoadingF romCache : ResourceLoadingFromNetwork); |
| 811 | 804 |
| 812 ASSERT(resource->url() == url.string()); | 805 ASSERT(resource->url() == url.string()); |
| 813 m_documentResources.set(resource->url(), resource); | 806 m_documentResources.set(resource->url(), resource); |
| 814 return resource; | 807 return resource; |
| 815 } | 808 } |
| 816 | 809 |
| 817 void ResourceFetcher::resourceTimingReportTimerFired(Timer<ResourceFetcher>* tim er) | 810 void ResourceFetcher::resourceTimingReportTimerFired(Timer<ResourceFetcher>* tim er) |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 900 } | 893 } |
| 901 if (!lastModified.isEmpty()) | 894 if (!lastModified.isEmpty()) |
| 902 revalidatingRequest.setHTTPHeaderField("If-Modified-Since", lastModified ); | 895 revalidatingRequest.setHTTPHeaderField("If-Modified-Since", lastModified ); |
| 903 if (!eTag.isEmpty()) | 896 if (!eTag.isEmpty()) |
| 904 revalidatingRequest.setHTTPHeaderField("If-None-Match", eTag); | 897 revalidatingRequest.setHTTPHeaderField("If-None-Match", eTag); |
| 905 | 898 |
| 906 ResourcePtr<Resource> newResource = createResource(resource->type(), revalid atingRequest, resource->encoding()); | 899 ResourcePtr<Resource> newResource = createResource(resource->type(), revalid atingRequest, resource->encoding()); |
| 907 WTF_LOG(ResourceLoading, "Resource %p created to revalidate %p", newResource .get(), resource); | 900 WTF_LOG(ResourceLoading, "Resource %p created to revalidate %p", newResource .get(), resource); |
| 908 | 901 |
| 909 newResource->setResourceToRevalidate(resource); | 902 newResource->setResourceToRevalidate(resource); |
| 903 newResource->setCacheIdentifier(resource->cacheIdentifier()); | |
| 910 | 904 |
| 911 memoryCache()->remove(resource); | 905 memoryCache()->remove(resource); |
| 912 memoryCache()->add(newResource.get()); | 906 memoryCache()->add(newResource.get()); |
| 913 return newResource; | 907 return newResource; |
| 914 } | 908 } |
| 915 | 909 |
| 916 ResourcePtr<Resource> ResourceFetcher::createResourceForLoading(Resource::Type t ype, FetchRequest& request, const String& charset) | 910 ResourcePtr<Resource> ResourceFetcher::createResourceForLoading(Resource::Type t ype, FetchRequest& request, const String& charset) |
| 917 { | 911 { |
| 918 ASSERT(!memoryCache()->resourceForURL(request.resourceRequest().url())); | 912 const String cacheIdentifier = createCacheIdentifier(); |
| 913 ASSERT(!memoryCache()->resourceForURL(cacheIdentifier, request.resourceReque st().url())); | |
| 919 | 914 |
| 920 WTF_LOG(ResourceLoading, "Loading Resource for '%s'.", request.resourceReque st().url().elidedString().latin1().data()); | 915 WTF_LOG(ResourceLoading, "Loading Resource for '%s'.", request.resourceReque st().url().elidedString().latin1().data()); |
| 921 | 916 |
| 922 addAdditionalRequestHeaders(request.mutableResourceRequest(), type); | 917 addAdditionalRequestHeaders(request.mutableResourceRequest(), type); |
| 923 ResourcePtr<Resource> resource = createResource(type, request.resourceReques t(), charset); | 918 ResourcePtr<Resource> resource = createResource(type, request.resourceReques t(), charset); |
| 919 resource->setCacheIdentifier(cacheIdentifier); | |
| 924 | 920 |
| 925 memoryCache()->add(resource.get()); | 921 memoryCache()->add(resource.get()); |
| 926 return resource; | 922 return resource; |
| 927 } | 923 } |
| 928 | 924 |
| 929 void ResourceFetcher::storeResourceTimingInitiatorInformation(Resource* resource ) | 925 void ResourceFetcher::storeResourceTimingInitiatorInformation(Resource* resource ) |
| 930 { | 926 { |
| 931 if (resource->options().requestInitiatorContext != DocumentContext) | 927 if (resource->options().requestInitiatorContext != DocumentContext) |
| 932 return; | 928 return; |
| 933 | 929 |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 952 } | 948 } |
| 953 } | 949 } |
| 954 | 950 |
| 955 ResourceFetcher::RevalidationPolicy ResourceFetcher::determineRevalidationPolicy (Resource::Type type, const FetchRequest& fetchRequest, Resource* existingResour ce) const | 951 ResourceFetcher::RevalidationPolicy ResourceFetcher::determineRevalidationPolicy (Resource::Type type, const FetchRequest& fetchRequest, Resource* existingResour ce) const |
| 956 { | 952 { |
| 957 const ResourceRequest& request = fetchRequest.resourceRequest(); | 953 const ResourceRequest& request = fetchRequest.resourceRequest(); |
| 958 | 954 |
| 959 if (!existingResource) | 955 if (!existingResource) |
| 960 return Load; | 956 return Load; |
| 961 | 957 |
| 962 // FIXME: Currently caching for a resource to be handled by Service Worker | |
| 963 // is disabled (http://crbug.com/388375). | |
| 964 if (isControlledByServiceWorker()) | |
| 965 return Reload; | |
| 966 | |
| 967 // We already have a preload going for this URL. | 958 // We already have a preload going for this URL. |
| 968 if (fetchRequest.forPreload() && existingResource->isPreloaded()) | 959 if (fetchRequest.forPreload() && existingResource->isPreloaded()) |
| 969 return Use; | 960 return Use; |
| 970 | 961 |
| 971 // If the same URL has been loaded as a different type, we need to reload. | 962 // If the same URL has been loaded as a different type, we need to reload. |
| 972 if (existingResource->type() != type) { | 963 if (existingResource->type() != type) { |
| 973 // FIXME: If existingResource is a Preload and the new type is LinkPrefe tch | 964 // FIXME: If existingResource is a Preload and the new type is LinkPrefe tch |
| 974 // We really should discard the new prefetch since the preload has more | 965 // We really should discard the new prefetch since the preload has more |
| 975 // specific type information! crbug.com/379893 | 966 // specific type information! crbug.com/379893 |
| 976 // fast/dom/HTMLLinkElement/link-and-subresource-test hits this case. | 967 // fast/dom/HTMLLinkElement/link-and-subresource-test hits this case. |
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1512 printf("IMAGES: %d (%d hits, hit rate %d%%)\n", images, images - imageM isses, (images - imageMisses) * 100 / images); | 1503 printf("IMAGES: %d (%d hits, hit rate %d%%)\n", images, images - imageM isses, (images - imageMisses) * 100 / images); |
| 1513 } | 1504 } |
| 1514 #endif | 1505 #endif |
| 1515 | 1506 |
| 1516 const ResourceLoaderOptions& ResourceFetcher::defaultResourceOptions() | 1507 const ResourceLoaderOptions& ResourceFetcher::defaultResourceOptions() |
| 1517 { | 1508 { |
| 1518 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (BufferData, AllowStored Credentials, ClientRequestedCredentials, CheckContentSecurityPolicy, DocumentCon text)); | 1509 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (BufferData, AllowStored Credentials, ClientRequestedCredentials, CheckContentSecurityPolicy, DocumentCon text)); |
| 1519 return options; | 1510 return options; |
| 1520 } | 1511 } |
| 1521 | 1512 |
| 1513 String ResourceFetcher::createCacheIdentifier() const | |
|
Mike West
2014/10/24 12:43:00
"create" seems wrong here. "get"?
nhiroki
2014/10/27 14:30:13
Done.
| |
| 1514 { | |
| 1515 if (isControlledByServiceWorker()) | |
| 1516 return String::number(serviceWorkerID()); | |
| 1517 return MemoryCache::defaultCacheIdentifier(); | |
| 1518 } | |
| 1519 | |
| 1522 ResourceFetcher::DeadResourceStatsRecorder::DeadResourceStatsRecorder() | 1520 ResourceFetcher::DeadResourceStatsRecorder::DeadResourceStatsRecorder() |
| 1523 : m_useCount(0) | 1521 : m_useCount(0) |
| 1524 , m_revalidateCount(0) | 1522 , m_revalidateCount(0) |
| 1525 , m_loadCount(0) | 1523 , m_loadCount(0) |
| 1526 { | 1524 { |
| 1527 } | 1525 } |
| 1528 | 1526 |
| 1529 ResourceFetcher::DeadResourceStatsRecorder::~DeadResourceStatsRecorder() | 1527 ResourceFetcher::DeadResourceStatsRecorder::~DeadResourceStatsRecorder() |
| 1530 { | 1528 { |
| 1531 blink::Platform::current()->histogramCustomCounts( | 1529 blink::Platform::current()->histogramCustomCounts( |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 1554 | 1552 |
| 1555 void ResourceFetcher::trace(Visitor* visitor) | 1553 void ResourceFetcher::trace(Visitor* visitor) |
| 1556 { | 1554 { |
| 1557 visitor->trace(m_document); | 1555 visitor->trace(m_document); |
| 1558 visitor->trace(m_loaders); | 1556 visitor->trace(m_loaders); |
| 1559 visitor->trace(m_multipartLoaders); | 1557 visitor->trace(m_multipartLoaders); |
| 1560 ResourceLoaderHost::trace(visitor); | 1558 ResourceLoaderHost::trace(visitor); |
| 1561 } | 1559 } |
| 1562 | 1560 |
| 1563 } | 1561 } |
| OLD | NEW |