| Index: third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
|
| diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
|
| index a61d582a7a65b49fe938cba6f06b2a72098347c0..0773379f3e943fe3dd158946ed8328bbc28464cc 100644
|
| --- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
|
| +++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
|
| @@ -211,6 +211,7 @@ static WebURLRequest::RequestContext requestContextFromType(bool isMainFrame, Re
|
|
|
| ResourceFetcher::ResourceFetcher(FetchContext* newContext)
|
| : m_context(newContext)
|
| + , m_unusedLinkPreloadCounter(0)
|
| , m_archive(context().isMainFrame() ? nullptr : context().archive())
|
| , m_resourceTimingReportTimer(this, &ResourceFetcher::resourceTimingReportTimerFired)
|
| , m_autoLoadImages(true)
|
| @@ -474,8 +475,11 @@ Resource* ResourceFetcher::requestResource(FetchRequest& request, const Resource
|
| initializeRevalidation(request.mutableResourceRequest(), resource);
|
| break;
|
| case Use:
|
| - if (resource->isLinkPreload() && !request.isLinkPreload())
|
| + if (resource->isLinkPreload() && !request.isLinkPreload()) {
|
| resource->setLinkPreload(false);
|
| + DCHECK_GT(m_unusedLinkPreloadCounter, 0u);
|
| + --m_unusedLinkPreloadCounter;
|
| + }
|
| memoryCache()->updateForAccess(resource);
|
| break;
|
| }
|
| @@ -871,6 +875,8 @@ void ResourceFetcher::preloadStarted(Resource* resource)
|
| return;
|
| TRACE_EVENT_ASYNC_STEP_INTO0("blink.net", "Resource", resource->identifier(), "Preload");
|
| resource->increasePreloadCount();
|
| + if (resource->isLinkPreload())
|
| + ++m_unusedLinkPreloadCounter;
|
|
|
| if (!m_preloads)
|
| m_preloads = new HeapListHashSet<Member<Resource>>;
|
| @@ -905,7 +911,7 @@ void ResourceFetcher::clearPreloads(ClearPreloadsPolicy policy)
|
|
|
| logPreloadStats();
|
|
|
| - for (auto resource : *m_preloads) {
|
| + for (const auto& resource : *m_preloads) {
|
| if (policy == ClearAllPreloads || !resource->isLinkPreload()) {
|
| resource->decreasePreloadCount();
|
| if (resource->getPreloadResult() == Resource::PreloadNotReferenced)
|
| @@ -917,6 +923,17 @@ void ResourceFetcher::clearPreloads(ClearPreloadsPolicy policy)
|
| m_preloads.clear();
|
| }
|
|
|
| +void ResourceFetcher::warnUnusedPreloads()
|
| +{
|
| + if (!m_preloads)
|
| + return;
|
| + for (const auto& resource : *m_preloads) {
|
| + if (resource && resource->isLinkPreload() && resource->getPreloadResult() == Resource::PreloadNotReferenced) {
|
| + context().addConsoleMessage("The resource " + resource->url().getString() + " was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it wasn't preloaded for nothing.", FetchContext::LogWarningMessage);
|
| + }
|
| + }
|
| +}
|
| +
|
| ArchiveResource* ResourceFetcher::createArchive(Resource* resource)
|
| {
|
| // Only the top-frame can load MHTML.
|
| @@ -1192,7 +1209,7 @@ void ResourceFetcher::logPreloadStats()
|
| unsigned importMisses = 0;
|
| unsigned raws = 0;
|
| unsigned rawMisses = 0;
|
| - for (auto resource : *m_preloads) {
|
| + for (const auto& resource : *m_preloads) {
|
| int missCount = resource->getPreloadResult() == Resource::PreloadNotReferenced ? 1 : 0;
|
| switch (resource->getType()) {
|
| case Resource::Image:
|
|
|