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 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 return WebURLRequest::RequestContextVideo; | 204 return WebURLRequest::RequestContextVideo; |
205 case Resource::Manifest: | 205 case Resource::Manifest: |
206 return WebURLRequest::RequestContextManifest; | 206 return WebURLRequest::RequestContextManifest; |
207 } | 207 } |
208 NOTREACHED(); | 208 NOTREACHED(); |
209 return WebURLRequest::RequestContextSubresource; | 209 return WebURLRequest::RequestContextSubresource; |
210 } | 210 } |
211 | 211 |
212 ResourceFetcher::ResourceFetcher(FetchContext* newContext) | 212 ResourceFetcher::ResourceFetcher(FetchContext* newContext) |
213 : m_context(newContext) | 213 : m_context(newContext) |
| 214 , m_unusedLinkPreloadCounter(0) |
214 , m_archive(context().isMainFrame() ? nullptr : context().archive()) | 215 , m_archive(context().isMainFrame() ? nullptr : context().archive()) |
215 , m_resourceTimingReportTimer(this, &ResourceFetcher::resourceTimingReportTi
merFired) | 216 , m_resourceTimingReportTimer(this, &ResourceFetcher::resourceTimingReportTi
merFired) |
216 , m_autoLoadImages(true) | 217 , m_autoLoadImages(true) |
217 , m_imagesEnabled(true) | 218 , m_imagesEnabled(true) |
218 , m_allowStaleResources(false) | 219 , m_allowStaleResources(false) |
219 , m_imageFetched(false) | 220 , m_imageFetched(false) |
220 { | 221 { |
221 ThreadState::current()->registerPreFinalizer(this); | 222 ThreadState::current()->registerPreFinalizer(this); |
222 } | 223 } |
223 | 224 |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
467 case Reload: | 468 case Reload: |
468 memoryCache()->remove(resource); | 469 memoryCache()->remove(resource); |
469 // Fall through | 470 // Fall through |
470 case Load: | 471 case Load: |
471 resource = createResourceForLoading(request, request.charset(), factory)
; | 472 resource = createResourceForLoading(request, request.charset(), factory)
; |
472 break; | 473 break; |
473 case Revalidate: | 474 case Revalidate: |
474 initializeRevalidation(request.mutableResourceRequest(), resource); | 475 initializeRevalidation(request.mutableResourceRequest(), resource); |
475 break; | 476 break; |
476 case Use: | 477 case Use: |
477 if (resource->isLinkPreload() && !request.isLinkPreload()) | 478 if (resource->isLinkPreload() && !request.isLinkPreload()) { |
478 resource->setLinkPreload(false); | 479 resource->setLinkPreload(false); |
| 480 DCHECK_GT(m_unusedLinkPreloadCounter, 0u); |
| 481 --m_unusedLinkPreloadCounter; |
| 482 } |
479 memoryCache()->updateForAccess(resource); | 483 memoryCache()->updateForAccess(resource); |
480 break; | 484 break; |
481 } | 485 } |
482 | 486 |
483 if (!resource) | 487 if (!resource) |
484 return nullptr; | 488 return nullptr; |
485 if (resource->getType() != factory.type()) { | 489 if (resource->getType() != factory.type()) { |
486 DCHECK(request.forPreload()); | 490 DCHECK(request.forPreload()); |
487 return nullptr; | 491 return nullptr; |
488 } | 492 } |
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
864 { | 868 { |
865 return m_loaders.size() > 0 || m_nonBlockingLoaders.size() > 0; | 869 return m_loaders.size() > 0 || m_nonBlockingLoaders.size() > 0; |
866 } | 870 } |
867 | 871 |
868 void ResourceFetcher::preloadStarted(Resource* resource) | 872 void ResourceFetcher::preloadStarted(Resource* resource) |
869 { | 873 { |
870 if (m_preloads && m_preloads->contains(resource)) | 874 if (m_preloads && m_preloads->contains(resource)) |
871 return; | 875 return; |
872 TRACE_EVENT_ASYNC_STEP_INTO0("blink.net", "Resource", resource->identifier()
, "Preload"); | 876 TRACE_EVENT_ASYNC_STEP_INTO0("blink.net", "Resource", resource->identifier()
, "Preload"); |
873 resource->increasePreloadCount(); | 877 resource->increasePreloadCount(); |
| 878 if (resource->isLinkPreload()) |
| 879 ++m_unusedLinkPreloadCounter; |
874 | 880 |
875 if (!m_preloads) | 881 if (!m_preloads) |
876 m_preloads = new HeapListHashSet<Member<Resource>>; | 882 m_preloads = new HeapListHashSet<Member<Resource>>; |
877 m_preloads->add(resource); | 883 m_preloads->add(resource); |
878 | 884 |
879 if (m_preloadedURLsForTest) | 885 if (m_preloadedURLsForTest) |
880 m_preloadedURLsForTest->add(resource->url().getString()); | 886 m_preloadedURLsForTest->add(resource->url().getString()); |
881 } | 887 } |
882 | 888 |
883 void ResourceFetcher::enableIsPreloadedForTest() | 889 void ResourceFetcher::enableIsPreloadedForTest() |
(...skipping 14 matching lines...) Expand all Loading... |
898 return m_preloadedURLsForTest->contains(url.getString()); | 904 return m_preloadedURLsForTest->contains(url.getString()); |
899 } | 905 } |
900 | 906 |
901 void ResourceFetcher::clearPreloads(ClearPreloadsPolicy policy) | 907 void ResourceFetcher::clearPreloads(ClearPreloadsPolicy policy) |
902 { | 908 { |
903 if (!m_preloads) | 909 if (!m_preloads) |
904 return; | 910 return; |
905 | 911 |
906 logPreloadStats(); | 912 logPreloadStats(); |
907 | 913 |
908 for (auto resource : *m_preloads) { | 914 for (const auto& resource : *m_preloads) { |
909 if (policy == ClearAllPreloads || !resource->isLinkPreload()) { | 915 if (policy == ClearAllPreloads || !resource->isLinkPreload()) { |
910 resource->decreasePreloadCount(); | 916 resource->decreasePreloadCount(); |
911 if (resource->getPreloadResult() == Resource::PreloadNotReferenced) | 917 if (resource->getPreloadResult() == Resource::PreloadNotReferenced) |
912 memoryCache()->remove(resource.get()); | 918 memoryCache()->remove(resource.get()); |
913 m_preloads->remove(resource); | 919 m_preloads->remove(resource); |
914 } | 920 } |
915 } | 921 } |
916 if (!m_preloads->size()) | 922 if (!m_preloads->size()) |
917 m_preloads.clear(); | 923 m_preloads.clear(); |
918 } | 924 } |
919 | 925 |
| 926 void ResourceFetcher::warnUnusedPreloads() |
| 927 { |
| 928 if (!m_preloads) |
| 929 return; |
| 930 for (const auto& resource : *m_preloads) { |
| 931 if (resource && resource->isLinkPreload() && resource->getPreloadResult(
) == Resource::PreloadNotReferenced) { |
| 932 context().addConsoleMessage("The resource " + resource->url().getStr
ing() + " was preloaded using link preload but not used within a few seconds fro
m the window's load event. Please make sure it wasn't preloaded for nothing.", F
etchContext::LogWarningMessage); |
| 933 } |
| 934 } |
| 935 } |
| 936 |
920 ArchiveResource* ResourceFetcher::createArchive(Resource* resource) | 937 ArchiveResource* ResourceFetcher::createArchive(Resource* resource) |
921 { | 938 { |
922 // Only the top-frame can load MHTML. | 939 // Only the top-frame can load MHTML. |
923 if (!context().isMainFrame()) | 940 if (!context().isMainFrame()) |
924 return nullptr; | 941 return nullptr; |
925 m_archive = MHTMLArchive::create(resource->url(), resource->resourceBuffer()
); | 942 m_archive = MHTMLArchive::create(resource->url(), resource->resourceBuffer()
); |
926 return m_archive ? m_archive->mainResource() : nullptr; | 943 return m_archive ? m_archive->mainResource() : nullptr; |
927 } | 944 } |
928 | 945 |
929 void ResourceFetcher::didFinishLoading(Resource* resource, double finishTime, in
t64_t encodedDataLength, DidFinishLoadingReason finishReason) | 946 void ResourceFetcher::didFinishLoading(Resource* resource, double finishTime, in
t64_t encodedDataLength, DidFinishLoadingReason finishReason) |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1185 unsigned fonts = 0; | 1202 unsigned fonts = 0; |
1186 unsigned fontMisses = 0; | 1203 unsigned fontMisses = 0; |
1187 unsigned medias = 0; | 1204 unsigned medias = 0; |
1188 unsigned mediaMisses = 0; | 1205 unsigned mediaMisses = 0; |
1189 unsigned textTracks = 0; | 1206 unsigned textTracks = 0; |
1190 unsigned textTrackMisses = 0; | 1207 unsigned textTrackMisses = 0; |
1191 unsigned imports = 0; | 1208 unsigned imports = 0; |
1192 unsigned importMisses = 0; | 1209 unsigned importMisses = 0; |
1193 unsigned raws = 0; | 1210 unsigned raws = 0; |
1194 unsigned rawMisses = 0; | 1211 unsigned rawMisses = 0; |
1195 for (auto resource : *m_preloads) { | 1212 for (const auto& resource : *m_preloads) { |
1196 int missCount = resource->getPreloadResult() == Resource::PreloadNotRefe
renced ? 1 : 0; | 1213 int missCount = resource->getPreloadResult() == Resource::PreloadNotRefe
renced ? 1 : 0; |
1197 switch (resource->getType()) { | 1214 switch (resource->getType()) { |
1198 case Resource::Image: | 1215 case Resource::Image: |
1199 images++; | 1216 images++; |
1200 imageMisses += missCount; | 1217 imageMisses += missCount; |
1201 break; | 1218 break; |
1202 case Resource::Script: | 1219 case Resource::Script: |
1203 scripts++; | 1220 scripts++; |
1204 scriptMisses += missCount; | 1221 scriptMisses += missCount; |
1205 break; | 1222 break; |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1335 visitor->trace(m_context); | 1352 visitor->trace(m_context); |
1336 visitor->trace(m_archive); | 1353 visitor->trace(m_archive); |
1337 visitor->trace(m_loaders); | 1354 visitor->trace(m_loaders); |
1338 visitor->trace(m_nonBlockingLoaders); | 1355 visitor->trace(m_nonBlockingLoaders); |
1339 visitor->trace(m_documentResources); | 1356 visitor->trace(m_documentResources); |
1340 visitor->trace(m_preloads); | 1357 visitor->trace(m_preloads); |
1341 visitor->trace(m_resourceTimingInfoMap); | 1358 visitor->trace(m_resourceTimingInfoMap); |
1342 } | 1359 } |
1343 | 1360 |
1344 } // namespace blink | 1361 } // namespace blink |
OLD | NEW |