Index: third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp |
diff --git a/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp b/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp |
index 45c444fa841c36a4326989f5ae2a51b92fdb07a4..af9decff7091877f65348003fedad4d1b78dc33c 100644 |
--- a/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp |
+++ b/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp |
@@ -52,6 +52,13 @@ HTMLAnchorElement::HTMLAnchorElement(const QualifiedName& tagName, Document& doc |
{ |
} |
+DEFINE_TRACE(HTMLAnchorElement) |
+{ |
+ visitor->trace(m_ping); |
+ HTMLElement::trace(visitor); |
+ DOMSettableTokenListObserver::trace(visitor); |
+} |
+ |
PassRefPtrWillBeRawPtr<HTMLAnchorElement> HTMLAnchorElement::create(Document& document) |
{ |
return adoptRefWillBeNoop(new HTMLAnchorElement(aTag, document)); |
@@ -59,6 +66,10 @@ PassRefPtrWillBeRawPtr<HTMLAnchorElement> HTMLAnchorElement::create(Document& do |
HTMLAnchorElement::~HTMLAnchorElement() |
{ |
+#if !ENABLE(OILPAN) |
+ if (m_ping) |
+ m_ping->setObserver(nullptr); |
+#endif |
} |
bool HTMLAnchorElement::supportsFocus() const |
@@ -204,6 +215,8 @@ void HTMLAnchorElement::parseAttribute(const QualifiedName& name, const AtomicSt |
// Do nothing. |
} else if (name == relAttr) { |
setRel(value); |
+ } else if (name == pingAttr) { |
+ ping()->setValue(value); |
} else { |
HTMLElement::parseAttribute(name, oldValue, value); |
} |
@@ -306,17 +319,24 @@ bool HTMLAnchorElement::isLiveLink() const |
void HTMLAnchorElement::sendPings(const KURL& destinationURL) const |
{ |
- const AtomicString& pingValue = getAttribute(pingAttr); |
- if (pingValue.isNull() || !document().settings() || !document().settings()->hyperlinkAuditingEnabled()) |
+ if (!m_ping || m_ping->value().isNull() || !document().settings() || !document().settings()->hyperlinkAuditingEnabled()) |
return; |
UseCounter::count(document(), UseCounter::HTMLAnchorElementPingAttribute); |
- SpaceSplitString pingURLs(pingValue, SpaceSplitString::ShouldNotFoldCase); |
+ const SpaceSplitString& pingURLs = m_ping->tokens(); |
for (unsigned i = 0; i < pingURLs.size(); i++) |
PingLoader::sendLinkAuditPing(document().frame(), document().completeURL(pingURLs[i]), destinationURL); |
} |
+DOMSettableTokenList* HTMLAnchorElement::ping() |
+{ |
+ if (!m_ping) |
+ m_ping = DOMSettableTokenList::create(this); |
+ |
+ return m_ping.get(); |
+} |
+ |
void HTMLAnchorElement::handleClick(Event* event) |
{ |
event->setDefaultHandled(); |
@@ -363,6 +383,11 @@ void HTMLAnchorElement::handleClick(Event* event) |
} |
} |
+void HTMLAnchorElement::valueWasSet() |
+{ |
+ setSynchronizedLazyAttribute(pingAttr, m_ping->value()); |
+} |
+ |
bool isEnterKeyKeydownEvent(Event* event) |
{ |
return event->type() == EventTypeNames::keydown && event->isKeyboardEvent() && toKeyboardEvent(event)->keyIdentifier() == "Enter"; |