Chromium Code Reviews| 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 5ff0d0d3861a31c60532f733a76016d704734229..3e56e1fcb049584894b4eee483a530c221730e35 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,6 +475,11 @@ Resource* ResourceFetcher::requestResource(FetchRequest& request, const Resource |
| initializeRevalidation(request.mutableResourceRequest(), resource); |
| break; |
| case Use: |
| + if (resource->isLinkPreload() && !request.isLinkPreload()) { |
| + resource->setLinkPreload(false); |
| + 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
|
| + --m_unusedLinkPreloadCounter; |
| + } |
| memoryCache()->updateForAccess(resource); |
| break; |
| } |
| @@ -869,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>>; |
| @@ -878,7 +886,7 @@ void ResourceFetcher::preloadStarted(Resource* resource) |
| bool ResourceFetcher::isPreloaded(const KURL& url) const |
| { |
| if (m_preloads) { |
| - for (auto resource : *m_preloads) { |
| + for (const auto& resource : *m_preloads) { |
| if (resource->url() == url) |
| return true; |
| } |
| @@ -894,7 +902,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) |
| @@ -906,6 +914,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. |
| @@ -1180,7 +1199,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: |