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

Unified Diff: Source/core/html/HTMLAnchorElement.cpp

Issue 344133002: remove HTMLAnchorElement::PrefetchEventHandler (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/HTMLAnchorElement.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/HTMLAnchorElement.cpp
diff --git a/Source/core/html/HTMLAnchorElement.cpp b/Source/core/html/HTMLAnchorElement.cpp
index 7c955b5f483163f1c02db18f6e40fc6e05e78ba7..c3fcb72933e5eb0d2eb6b70839c38cdd0f4ff0ad 100644
--- a/Source/core/html/HTMLAnchorElement.cpp
+++ b/Source/core/html/HTMLAnchorElement.cpp
@@ -50,62 +50,11 @@
#include "platform/weborigin/SecurityOrigin.h"
#include "platform/weborigin/SecurityPolicy.h"
#include "public/platform/Platform.h"
-#include "public/platform/WebPrescientNetworking.h"
#include "public/platform/WebURL.h"
#include "wtf/text/StringBuilder.h"
namespace WebCore {
-namespace {
-
-void preconnectToURL(const KURL& url, blink::WebPreconnectMotivation motivation)
-{
- blink::WebPrescientNetworking* prescientNetworking = blink::Platform::current()->prescientNetworking();
- if (!prescientNetworking)
- return;
-
- prescientNetworking->preconnect(url, motivation);
-}
-
-}
-
-class HTMLAnchorElement::PrefetchEventHandler FINAL : public NoBaseWillBeGarbageCollected<HTMLAnchorElement::PrefetchEventHandler> {
-public:
- static PassOwnPtrWillBeRawPtr<PrefetchEventHandler> create(HTMLAnchorElement* anchorElement)
- {
- return adoptPtrWillBeNoop(new HTMLAnchorElement::PrefetchEventHandler(anchorElement));
- }
-
- void reset();
-
- void handleEvent(Event* e);
- void didChangeHREF() { m_hadHREFChanged = true; }
- bool hasIssuedPreconnect() const { return m_hasIssuedPreconnect; }
-
- void trace(Visitor* visitor) { visitor->trace(m_anchorElement); }
-
-private:
- explicit PrefetchEventHandler(HTMLAnchorElement*);
-
- void handleMouseOver(Event* event);
- void handleMouseOut(Event* event);
- void handleLeftMouseDown(Event* event);
- void handleGestureTapUnconfirmed(Event*);
- void handleGestureShowPress(Event*);
- void handleClick(Event* event);
-
- bool shouldPrefetch(const KURL&);
- void prefetch(blink::WebPreconnectMotivation);
-
- RawPtrWillBeMember<HTMLAnchorElement> m_anchorElement;
- double m_mouseOverTimestamp;
- double m_mouseDownTimestamp;
- double m_tapDownTimestamp;
- bool m_hadHREFChanged;
- bool m_hadTapUnconfirmed;
- bool m_hasIssuedPreconnect;
-};
-
using namespace HTMLNames;
HTMLAnchorElement::HTMLAnchorElement(const QualifiedName& tagName, Document& document)
@@ -193,11 +142,8 @@ void HTMLAnchorElement::defaultEventHandler(Event* event)
return;
}
- prefetchEventHandler()->handleEvent(event);
-
if (isLinkClick(event) && isLiveLink()) {
handleClick(event);
- prefetchEventHandler()->reset();
return;
}
}
@@ -232,9 +178,6 @@ void HTMLAnchorElement::parseAttribute(const QualifiedName& name, const AtomicSt
if (protocolIs(parsedURL, "http") || protocolIs(parsedURL, "https") || parsedURL.startsWith("//"))
prefetchDNS(document().completeURL(parsedURL).host());
}
-
- if (wasLink)
- prefetchEventHandler()->didChangeHREF();
}
invalidateCachedVisitedLinkHash();
} else if (name == nameAttr || name == titleAttr) {
@@ -374,8 +317,6 @@ void HTMLAnchorElement::handleClick(Event* event)
sendPings(completedURL);
ResourceRequest request(completedURL);
- if (prefetchEventHandler()->hasIssuedPreconnect())
- frame->loader().client()->dispatchWillRequestAfterPreconnect(request);
if (hasAttribute(downloadAttr)) {
if (!hasRel(RelationNoReferrer)) {
String referrer = SecurityPolicy::generateReferrerHeader(document().referrerPolicy(), completedURL, document().outgoingReferrer());
@@ -411,182 +352,9 @@ bool HTMLAnchorElement::willRespondToMouseClickEvents()
return isLink() || HTMLElement::willRespondToMouseClickEvents();
}
-HTMLAnchorElement::PrefetchEventHandler* HTMLAnchorElement::prefetchEventHandler()
-{
- if (!m_prefetchEventHandler)
- m_prefetchEventHandler = PrefetchEventHandler::create(this);
-
- return m_prefetchEventHandler.get();
-}
-
-HTMLAnchorElement::PrefetchEventHandler::PrefetchEventHandler(HTMLAnchorElement* anchorElement)
- : m_anchorElement(anchorElement)
-{
- ASSERT(m_anchorElement);
-
- reset();
-}
-
-void HTMLAnchorElement::PrefetchEventHandler::reset()
-{
- m_hadHREFChanged = false;
- m_mouseOverTimestamp = 0;
- m_mouseDownTimestamp = 0;
- m_hadTapUnconfirmed = false;
- m_tapDownTimestamp = 0;
- m_hasIssuedPreconnect = false;
-}
-
-void HTMLAnchorElement::PrefetchEventHandler::handleEvent(Event* event)
-{
- if (!shouldPrefetch(m_anchorElement->href()))
- return;
-
- if (event->type() == EventTypeNames::mouseover)
- handleMouseOver(event);
- else if (event->type() == EventTypeNames::mouseout)
- handleMouseOut(event);
- else if (event->type() == EventTypeNames::mousedown && event->isMouseEvent() && toMouseEvent(event)->button() == LeftButton)
- handleLeftMouseDown(event);
- else if (event->type() == EventTypeNames::gestureshowpress)
- handleGestureShowPress(event);
- else if (event->type() == EventTypeNames::gesturetapunconfirmed)
- handleGestureTapUnconfirmed(event);
- else if (isLinkClick(event))
- handleClick(event);
-}
-
-void HTMLAnchorElement::PrefetchEventHandler::handleMouseOver(Event* event)
-{
- if (m_mouseOverTimestamp == 0.0) {
- m_mouseOverTimestamp = event->timeStamp();
-
- blink::Platform::current()->histogramEnumeration("MouseEventPrefetch.MouseOvers", 0, 2);
-
- prefetch(blink::WebPreconnectMotivationLinkMouseOver);
- }
-}
-
-void HTMLAnchorElement::PrefetchEventHandler::handleMouseOut(Event* event)
-{
- if (m_mouseOverTimestamp > 0.0) {
- double mouseOverDuration = convertDOMTimeStampToSeconds(event->timeStamp() - m_mouseOverTimestamp);
- blink::Platform::current()->histogramCustomCounts("MouseEventPrefetch.MouseOverDuration_NoClick", mouseOverDuration * 1000, 0, 10000, 100);
-
- m_mouseOverTimestamp = 0.0;
- }
-}
-
-void HTMLAnchorElement::PrefetchEventHandler::handleLeftMouseDown(Event* event)
-{
- m_mouseDownTimestamp = event->timeStamp();
-
- blink::Platform::current()->histogramEnumeration("MouseEventPrefetch.MouseDowns", 0, 2);
-
- prefetch(blink::WebPreconnectMotivationLinkMouseDown);
-}
-
-void HTMLAnchorElement::PrefetchEventHandler::handleGestureTapUnconfirmed(Event* event)
-{
- m_hadTapUnconfirmed = true;
-
- blink::Platform::current()->histogramEnumeration("MouseEventPrefetch.TapUnconfirmeds", 0, 2);
-
- prefetch(blink::WebPreconnectMotivationLinkTapUnconfirmed);
-}
-
-void HTMLAnchorElement::PrefetchEventHandler::handleGestureShowPress(Event* event)
-{
- m_tapDownTimestamp = event->timeStamp();
-
- blink::Platform::current()->histogramEnumeration("MouseEventPrefetch.TapDowns", 0, 2);
-
- prefetch(blink::WebPreconnectMotivationLinkTapDown);
-}
-
-void HTMLAnchorElement::PrefetchEventHandler::handleClick(Event* event)
-{
- bool capturedMouseOver = (m_mouseOverTimestamp > 0.0);
- if (capturedMouseOver) {
- double mouseOverDuration = convertDOMTimeStampToSeconds(event->timeStamp() - m_mouseOverTimestamp);
-
- blink::Platform::current()->histogramCustomCounts("MouseEventPrefetch.MouseOverDuration_Click", mouseOverDuration * 1000, 0, 10000, 100);
- }
-
- bool capturedMouseDown = (m_mouseDownTimestamp > 0.0);
- blink::Platform::current()->histogramEnumeration("MouseEventPrefetch.MouseDownFollowedByClick", capturedMouseDown, 2);
-
- if (capturedMouseDown) {
- double mouseDownDuration = convertDOMTimeStampToSeconds(event->timeStamp() - m_mouseDownTimestamp);
-
- blink::Platform::current()->histogramCustomCounts("MouseEventPrefetch.MouseDownDuration_Click", mouseDownDuration * 1000, 0, 10000, 100);
- }
-
- bool capturedTapDown = (m_tapDownTimestamp > 0.0);
- if (capturedTapDown) {
- double tapDownDuration = convertDOMTimeStampToSeconds(event->timeStamp() - m_tapDownTimestamp);
-
- blink::Platform::current()->histogramCustomCounts("MouseEventPrefetch.TapDownDuration_Click", tapDownDuration * 1000, 0, 10000, 100);
- }
-
- int flags = (m_hadTapUnconfirmed ? 2 : 0) | (capturedTapDown ? 1 : 0);
- blink::Platform::current()->histogramEnumeration("MouseEventPrefetch.PreTapEventsFollowedByClick", flags, 4);
-}
-
-bool HTMLAnchorElement::PrefetchEventHandler::shouldPrefetch(const KURL& url)
-{
- if (m_hadHREFChanged)
- return false;
-
- if (m_anchorElement->hasEventListeners(EventTypeNames::click))
- return false;
-
- if (!url.protocolIsInHTTPFamily())
- return false;
-
- Document& document = m_anchorElement->document();
-
- if (!document.securityOrigin()->canDisplay(url))
- return false;
-
- if (url.hasFragmentIdentifier() && equalIgnoringFragmentIdentifier(document.url(), url))
- return false;
-
- LocalFrame* frame = document.frame();
- if (!frame)
- return false;
-
- // Links which create new window/tab are avoided because they may require user approval interaction.
- if (!m_anchorElement->target().isEmpty())
- return false;
-
- return true;
-}
-
-void HTMLAnchorElement::PrefetchEventHandler::prefetch(blink::WebPreconnectMotivation motivation)
-{
- const KURL& url = m_anchorElement->href();
-
- if (!shouldPrefetch(url))
- return;
-
- // The precision of current MouseOver trigger is too low to actually trigger preconnects.
- if (motivation == blink::WebPreconnectMotivationLinkMouseOver)
- return;
-
- preconnectToURL(url, motivation);
- m_hasIssuedPreconnect = true;
-}
-
bool HTMLAnchorElement::isInteractiveContent() const
{
return isLink();
}
-void HTMLAnchorElement::trace(Visitor* visitor)
-{
- visitor->trace(m_prefetchEventHandler);
- HTMLElement::trace(visitor);
-}
-
}
« no previous file with comments | « Source/core/html/HTMLAnchorElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698