| Index: third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp
|
| diff --git a/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp b/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp
|
| index 76827a89668652c30a26a5156694a0096f837c0d..3b8e896d6faae3b6c4a9425afaef82cf731e96e5 100644
|
| --- a/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp
|
| +++ b/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp
|
| @@ -47,6 +47,7 @@
|
| #include "core/events/PageTransitionEvent.h"
|
| #include "core/events/PopStateEvent.h"
|
| #include "core/events/ScopedEventQueue.h"
|
| +#include "core/fetch/ResourceFetcher.h"
|
| #include "core/frame/BarProp.h"
|
| #include "core/frame/DOMVisualViewport.h"
|
| #include "core/frame/EventHandlerRegistry.h"
|
| @@ -83,6 +84,9 @@
|
|
|
| namespace blink {
|
|
|
| +// Timeout for link preloads to be used after window.onload
|
| +static const int unusedPreloadTimeoutInSeconds = 3;
|
| +
|
| class PostMessageTimer final : public GarbageCollectedFinalized<PostMessageTimer>, public SuspendableTimer {
|
| USING_GARBAGE_COLLECTED_MIXIN(PostMessageTimer);
|
| public:
|
| @@ -260,6 +264,7 @@ bool LocalDOMWindow::allowPopUp()
|
| LocalDOMWindow::LocalDOMWindow(LocalFrame& frame)
|
| : m_frame(&frame)
|
| , m_visualViewport(DOMVisualViewport::create(this))
|
| + , m_unusedPreloadsTimer(this, &LocalDOMWindow::warnUnusedPreloads)
|
| , m_shouldPrintWhenFinishedLoading(false)
|
| {
|
| ThreadState::current()->registerPreFinalizer(this);
|
| @@ -275,6 +280,7 @@ void LocalDOMWindow::clearDocument()
|
| // FIXME: This should be part of ActiveDOMObject shutdown
|
| clearEventQueue();
|
|
|
| + m_unusedPreloadsTimer.stop();
|
| m_document->clearDOMWindow();
|
| m_document = nullptr;
|
| }
|
| @@ -1336,6 +1342,16 @@ void LocalDOMWindow::removedEventListener(const AtomicString& eventType, const R
|
| }
|
| }
|
|
|
| +void LocalDOMWindow::warnUnusedPreloads(TimerBase* base)
|
| +{
|
| + if (frame() && frame()->loader().documentLoader()) {
|
| + ResourceFetcher* fetcher = frame()->loader().documentLoader()->fetcher();
|
| + DCHECK(fetcher);
|
| + if (fetcher->countPreloads())
|
| + fetcher->warnUnusedPreloads();
|
| + }
|
| +}
|
| +
|
| void LocalDOMWindow::dispatchLoadEvent()
|
| {
|
| Event* loadEvent(Event::create(EventTypeNames::load));
|
| @@ -1345,6 +1361,11 @@ void LocalDOMWindow::dispatchLoadEvent()
|
| timing.markLoadEventStart();
|
| dispatchEvent(loadEvent, document());
|
| timing.markLoadEventEnd();
|
| + DCHECK(documentLoader->fetcher());
|
| + // If fetcher->countPreloads() is not empty here, it's full of link preloads,
|
| + // as speculatove preloads were cleared at DCL.
|
| + if (frame() && documentLoader == frame()->loader().documentLoader() && documentLoader->fetcher()->countPreloads())
|
| + m_unusedPreloadsTimer.startOneShot(unusedPreloadTimeoutInSeconds, BLINK_FROM_HERE);
|
| } else {
|
| dispatchEvent(loadEvent, document());
|
| }
|
|
|