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

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: more 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_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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698