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

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: Added failing unit tests 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 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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698