Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1105)

Side by Side Diff: third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp

Issue 2343623002: Add a warning whenever link preloads are not used (Closed)
Patch Set: Review comments Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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_linkPreloadCounter(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
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 --m_linkPreloadCounter;
481 }
477 memoryCache()->updateForAccess(resource); 482 memoryCache()->updateForAccess(resource);
478 break; 483 break;
479 } 484 }
480 485
481 if (!resource) 486 if (!resource)
482 return nullptr; 487 return nullptr;
483 if (resource->getType() != factory.type()) { 488 if (resource->getType() != factory.type()) {
484 ASSERT(request.forPreload()); 489 ASSERT(request.forPreload());
485 return nullptr; 490 return nullptr;
486 } 491 }
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 { 867 {
863 return m_loaders.size() > 0 || m_nonBlockingLoaders.size() > 0; 868 return m_loaders.size() > 0 || m_nonBlockingLoaders.size() > 0;
864 } 869 }
865 870
866 void ResourceFetcher::preloadStarted(Resource* resource) 871 void ResourceFetcher::preloadStarted(Resource* resource)
867 { 872 {
868 if (m_preloads && m_preloads->contains(resource)) 873 if (m_preloads && m_preloads->contains(resource))
869 return; 874 return;
870 TRACE_EVENT_ASYNC_STEP_INTO0("blink.net", "Resource", resource->identifier() , "Preload"); 875 TRACE_EVENT_ASYNC_STEP_INTO0("blink.net", "Resource", resource->identifier() , "Preload");
871 resource->increasePreloadCount(); 876 resource->increasePreloadCount();
877 if (resource->isLinkPreload())
878 ++m_linkPreloadCounter;
872 879
873 if (!m_preloads) 880 if (!m_preloads)
874 m_preloads = new HeapListHashSet<Member<Resource>>; 881 m_preloads = new HeapListHashSet<Member<Resource>>;
875 m_preloads->add(resource); 882 m_preloads->add(resource);
876 } 883 }
877 884
878 bool ResourceFetcher::isPreloaded(const KURL& url) const 885 bool ResourceFetcher::isPreloaded(const KURL& url) const
879 { 886 {
880 if (m_preloads) { 887 if (m_preloads) {
881 for (auto resource : *m_preloads) { 888 for (const auto& resource : *m_preloads) {
882 if (resource->url() == url) 889 if (resource->url() == url)
883 return true; 890 return true;
884 } 891 }
885 } 892 }
886 893
887 return false; 894 return false;
888 } 895 }
889 896
890 void ResourceFetcher::clearPreloads(ClearPreloadsPolicy policy) 897 void ResourceFetcher::clearPreloads(ClearPreloadsPolicy policy)
891 { 898 {
892 if (!m_preloads) 899 if (!m_preloads)
893 return; 900 return;
894 901
895 logPreloadStats(); 902 logPreloadStats();
896 903
897 for (auto resource : *m_preloads) { 904 for (const auto& resource : *m_preloads) {
898 if (policy == ClearAllPreloads || !resource->isLinkPreload()) { 905 if (policy == ClearAllPreloads || !resource->isLinkPreload()) {
899 resource->decreasePreloadCount(); 906 resource->decreasePreloadCount();
900 if (resource->getPreloadResult() == Resource::PreloadNotReferenced) 907 if (resource->getPreloadResult() == Resource::PreloadNotReferenced)
901 memoryCache()->remove(resource.get()); 908 memoryCache()->remove(resource.get());
902 m_preloads->remove(resource); 909 m_preloads->remove(resource);
903 } 910 }
904 } 911 }
905 if (!m_preloads->size()) 912 if (!m_preloads->size())
906 m_preloads.clear(); 913 m_preloads.clear();
907 } 914 }
908 915
916 void ResourceFetcher::warnUnusedPreloads()
917 {
918 if (!m_preloads)
919 return;
920 for (const auto& resource : *m_preloads) {
921 if (resource && resource->isLinkPreload() && resource->getPreloadResult( ) == Resource::PreloadNotReferenced) {
922 context().addConsoleMessage("The resource " + resource->url().getStr ing() + " was preloaded using `<link rel=preload>` but not used within a few sec onds from the window's load event. Please make sure it wasn't preloaded for noth ing.", FetchContext::LogWarningMessage);
Charlie Harrison 2016/09/14 21:07:59 Hm... but what about Link preload headers?
923 }
924 }
925 }
926
909 ArchiveResource* ResourceFetcher::createArchive(Resource* resource) 927 ArchiveResource* ResourceFetcher::createArchive(Resource* resource)
910 { 928 {
911 // Only the top-frame can load MHTML. 929 // Only the top-frame can load MHTML.
912 if (!context().isMainFrame()) 930 if (!context().isMainFrame())
913 return nullptr; 931 return nullptr;
914 m_archive = MHTMLArchive::create(resource->url(), resource->resourceBuffer() ); 932 m_archive = MHTMLArchive::create(resource->url(), resource->resourceBuffer() );
915 return m_archive ? m_archive->mainResource() : nullptr; 933 return m_archive ? m_archive->mainResource() : nullptr;
916 } 934 }
917 935
918 void ResourceFetcher::didFinishLoading(Resource* resource, double finishTime, in t64_t encodedDataLength, DidFinishLoadingReason finishReason) 936 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
1173 unsigned fonts = 0; 1191 unsigned fonts = 0;
1174 unsigned fontMisses = 0; 1192 unsigned fontMisses = 0;
1175 unsigned medias = 0; 1193 unsigned medias = 0;
1176 unsigned mediaMisses = 0; 1194 unsigned mediaMisses = 0;
1177 unsigned textTracks = 0; 1195 unsigned textTracks = 0;
1178 unsigned textTrackMisses = 0; 1196 unsigned textTrackMisses = 0;
1179 unsigned imports = 0; 1197 unsigned imports = 0;
1180 unsigned importMisses = 0; 1198 unsigned importMisses = 0;
1181 unsigned raws = 0; 1199 unsigned raws = 0;
1182 unsigned rawMisses = 0; 1200 unsigned rawMisses = 0;
1183 for (auto resource : *m_preloads) { 1201 for (const auto& resource : *m_preloads) {
1184 int missCount = resource->getPreloadResult() == Resource::PreloadNotRefe renced ? 1 : 0; 1202 int missCount = resource->getPreloadResult() == Resource::PreloadNotRefe renced ? 1 : 0;
1185 switch (resource->getType()) { 1203 switch (resource->getType()) {
1186 case Resource::Image: 1204 case Resource::Image:
1187 images++; 1205 images++;
1188 imageMisses += missCount; 1206 imageMisses += missCount;
1189 break; 1207 break;
1190 case Resource::Script: 1208 case Resource::Script:
1191 scripts++; 1209 scripts++;
1192 scriptMisses += missCount; 1210 scriptMisses += missCount;
1193 break; 1211 break;
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
1323 visitor->trace(m_context); 1341 visitor->trace(m_context);
1324 visitor->trace(m_archive); 1342 visitor->trace(m_archive);
1325 visitor->trace(m_loaders); 1343 visitor->trace(m_loaders);
1326 visitor->trace(m_nonBlockingLoaders); 1344 visitor->trace(m_nonBlockingLoaders);
1327 visitor->trace(m_documentResources); 1345 visitor->trace(m_documentResources);
1328 visitor->trace(m_preloads); 1346 visitor->trace(m_preloads);
1329 visitor->trace(m_resourceTimingInfoMap); 1347 visitor->trace(m_resourceTimingInfoMap);
1330 } 1348 }
1331 1349
1332 } // namespace blink 1350 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698