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 ASSERT_NOT_REACHED(); | 208 ASSERT_NOT_REACHED(); |
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: |
478 if (resource->isLinkPreload() && !request.isLinkPreload()) { | |
479 resource->setLinkPreload(false); | |
480 DCHECK_GT(static_cast<int>(m_unusedLinkPreloadCounter), 0); | |
Nate Chapin
2016/09/14 22:14:31
Why static_cast and not 0u?
Yoav Weiss
2016/09/15 06:11:29
changed
| |
481 --m_unusedLinkPreloadCounter; | |
482 } | |
477 memoryCache()->updateForAccess(resource); | 483 memoryCache()->updateForAccess(resource); |
478 break; | 484 break; |
479 } | 485 } |
480 | 486 |
481 if (!resource) | 487 if (!resource) |
482 return nullptr; | 488 return nullptr; |
483 if (resource->getType() != factory.type()) { | 489 if (resource->getType() != factory.type()) { |
484 ASSERT(request.forPreload()); | 490 ASSERT(request.forPreload()); |
485 return nullptr; | 491 return nullptr; |
486 } | 492 } |
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
862 { | 868 { |
863 return m_loaders.size() > 0 || m_nonBlockingLoaders.size() > 0; | 869 return m_loaders.size() > 0 || m_nonBlockingLoaders.size() > 0; |
864 } | 870 } |
865 | 871 |
866 void ResourceFetcher::preloadStarted(Resource* resource) | 872 void ResourceFetcher::preloadStarted(Resource* resource) |
867 { | 873 { |
868 if (m_preloads && m_preloads->contains(resource)) | 874 if (m_preloads && m_preloads->contains(resource)) |
869 return; | 875 return; |
870 TRACE_EVENT_ASYNC_STEP_INTO0("blink.net", "Resource", resource->identifier() , "Preload"); | 876 TRACE_EVENT_ASYNC_STEP_INTO0("blink.net", "Resource", resource->identifier() , "Preload"); |
871 resource->increasePreloadCount(); | 877 resource->increasePreloadCount(); |
878 if (resource->isLinkPreload()) | |
879 ++m_unusedLinkPreloadCounter; | |
872 | 880 |
873 if (!m_preloads) | 881 if (!m_preloads) |
874 m_preloads = new HeapListHashSet<Member<Resource>>; | 882 m_preloads = new HeapListHashSet<Member<Resource>>; |
875 m_preloads->add(resource); | 883 m_preloads->add(resource); |
876 } | 884 } |
877 | 885 |
878 bool ResourceFetcher::isPreloaded(const KURL& url) const | 886 bool ResourceFetcher::isPreloaded(const KURL& url) const |
879 { | 887 { |
880 if (m_preloads) { | 888 if (m_preloads) { |
881 for (auto resource : *m_preloads) { | 889 for (const auto& resource : *m_preloads) { |
882 if (resource->url() == url) | 890 if (resource->url() == url) |
883 return true; | 891 return true; |
884 } | 892 } |
885 } | 893 } |
886 | 894 |
887 return false; | 895 return false; |
888 } | 896 } |
889 | 897 |
890 void ResourceFetcher::clearPreloads(ClearPreloadsPolicy policy) | 898 void ResourceFetcher::clearPreloads(ClearPreloadsPolicy policy) |
891 { | 899 { |
892 if (!m_preloads) | 900 if (!m_preloads) |
893 return; | 901 return; |
894 | 902 |
895 logPreloadStats(); | 903 logPreloadStats(); |
896 | 904 |
897 for (auto resource : *m_preloads) { | 905 for (const auto& resource : *m_preloads) { |
898 if (policy == ClearAllPreloads || !resource->isLinkPreload()) { | 906 if (policy == ClearAllPreloads || !resource->isLinkPreload()) { |
899 resource->decreasePreloadCount(); | 907 resource->decreasePreloadCount(); |
900 if (resource->getPreloadResult() == Resource::PreloadNotReferenced) | 908 if (resource->getPreloadResult() == Resource::PreloadNotReferenced) |
901 memoryCache()->remove(resource.get()); | 909 memoryCache()->remove(resource.get()); |
902 m_preloads->remove(resource); | 910 m_preloads->remove(resource); |
903 } | 911 } |
904 } | 912 } |
905 if (!m_preloads->size()) | 913 if (!m_preloads->size()) |
906 m_preloads.clear(); | 914 m_preloads.clear(); |
907 } | 915 } |
908 | 916 |
917 void ResourceFetcher::warnUnusedPreloads() | |
918 { | |
919 if (!m_preloads) | |
920 return; | |
921 for (const auto& resource : *m_preloads) { | |
922 if (resource && resource->isLinkPreload() && resource->getPreloadResult( ) == Resource::PreloadNotReferenced) { | |
923 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); | |
924 } | |
925 } | |
926 } | |
927 | |
909 ArchiveResource* ResourceFetcher::createArchive(Resource* resource) | 928 ArchiveResource* ResourceFetcher::createArchive(Resource* resource) |
910 { | 929 { |
911 // Only the top-frame can load MHTML. | 930 // Only the top-frame can load MHTML. |
912 if (!context().isMainFrame()) | 931 if (!context().isMainFrame()) |
913 return nullptr; | 932 return nullptr; |
914 m_archive = MHTMLArchive::create(resource->url(), resource->resourceBuffer() ); | 933 m_archive = MHTMLArchive::create(resource->url(), resource->resourceBuffer() ); |
915 return m_archive ? m_archive->mainResource() : nullptr; | 934 return m_archive ? m_archive->mainResource() : nullptr; |
916 } | 935 } |
917 | 936 |
918 void ResourceFetcher::didFinishLoading(Resource* resource, double finishTime, in t64_t encodedDataLength, DidFinishLoadingReason finishReason) | 937 void ResourceFetcher::didFinishLoading(Resource* resource, double finishTime, in t64_t encodedDataLength, DidFinishLoadingReason finishReason) |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1173 unsigned fonts = 0; | 1192 unsigned fonts = 0; |
1174 unsigned fontMisses = 0; | 1193 unsigned fontMisses = 0; |
1175 unsigned medias = 0; | 1194 unsigned medias = 0; |
1176 unsigned mediaMisses = 0; | 1195 unsigned mediaMisses = 0; |
1177 unsigned textTracks = 0; | 1196 unsigned textTracks = 0; |
1178 unsigned textTrackMisses = 0; | 1197 unsigned textTrackMisses = 0; |
1179 unsigned imports = 0; | 1198 unsigned imports = 0; |
1180 unsigned importMisses = 0; | 1199 unsigned importMisses = 0; |
1181 unsigned raws = 0; | 1200 unsigned raws = 0; |
1182 unsigned rawMisses = 0; | 1201 unsigned rawMisses = 0; |
1183 for (auto resource : *m_preloads) { | 1202 for (const auto& resource : *m_preloads) { |
1184 int missCount = resource->getPreloadResult() == Resource::PreloadNotRefe renced ? 1 : 0; | 1203 int missCount = resource->getPreloadResult() == Resource::PreloadNotRefe renced ? 1 : 0; |
1185 switch (resource->getType()) { | 1204 switch (resource->getType()) { |
1186 case Resource::Image: | 1205 case Resource::Image: |
1187 images++; | 1206 images++; |
1188 imageMisses += missCount; | 1207 imageMisses += missCount; |
1189 break; | 1208 break; |
1190 case Resource::Script: | 1209 case Resource::Script: |
1191 scripts++; | 1210 scripts++; |
1192 scriptMisses += missCount; | 1211 scriptMisses += missCount; |
1193 break; | 1212 break; |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1323 visitor->trace(m_context); | 1342 visitor->trace(m_context); |
1324 visitor->trace(m_archive); | 1343 visitor->trace(m_archive); |
1325 visitor->trace(m_loaders); | 1344 visitor->trace(m_loaders); |
1326 visitor->trace(m_nonBlockingLoaders); | 1345 visitor->trace(m_nonBlockingLoaders); |
1327 visitor->trace(m_documentResources); | 1346 visitor->trace(m_documentResources); |
1328 visitor->trace(m_preloads); | 1347 visitor->trace(m_preloads); |
1329 visitor->trace(m_resourceTimingInfoMap); | 1348 visitor->trace(m_resourceTimingInfoMap); |
1330 } | 1349 } |
1331 | 1350 |
1332 } // namespace blink | 1351 } // namespace blink |
OLD | NEW |