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

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

Issue 1377163002: Use DOMSettableTokenList for {HTMLAnchorElement, HTMLAreaElement}.ping. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years 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
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";
« no previous file with comments | « third_party/WebKit/Source/core/html/HTMLAnchorElement.h ('k') | third_party/WebKit/Source/core/html/HTMLAnchorElement.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698