Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2000 Simon Hausmann <hausmann@kde.org> | 4 * (C) 2000 Simon Hausmann <hausmann@kde.org> |
| 5 * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed. | 5 * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed. |
| 6 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) | 6 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 40 | 40 |
| 41 namespace blink { | 41 namespace blink { |
| 42 | 42 |
| 43 using namespace HTMLNames; | 43 using namespace HTMLNames; |
| 44 | 44 |
| 45 HTMLAnchorElement::HTMLAnchorElement(const QualifiedName& tagName, Document& doc ument) | 45 HTMLAnchorElement::HTMLAnchorElement(const QualifiedName& tagName, Document& doc ument) |
| 46 : HTMLElement(tagName, document) | 46 : HTMLElement(tagName, document) |
| 47 , m_linkRelations(0) | 47 , m_linkRelations(0) |
| 48 , m_cachedVisitedLinkHash(0) | 48 , m_cachedVisitedLinkHash(0) |
| 49 , m_wasFocusedByMouse(false) | 49 , m_wasFocusedByMouse(false) |
| 50 , m_ping(DOMSettableTokenList::create(this)) | |
| 50 { | 51 { |
| 51 } | 52 } |
| 52 | 53 |
| 54 DEFINE_TRACE(HTMLAnchorElement) | |
| 55 { | |
| 56 visitor->trace(m_ping); | |
| 57 HTMLElement::trace(visitor); | |
| 58 DOMSettableTokenListObserver::trace(visitor); | |
| 59 } | |
| 60 | |
| 53 PassRefPtrWillBeRawPtr<HTMLAnchorElement> HTMLAnchorElement::create(Document& do cument) | 61 PassRefPtrWillBeRawPtr<HTMLAnchorElement> HTMLAnchorElement::create(Document& do cument) |
| 54 { | 62 { |
| 55 return adoptRefWillBeNoop(new HTMLAnchorElement(aTag, document)); | 63 return adoptRefWillBeNoop(new HTMLAnchorElement(aTag, document)); |
| 56 } | 64 } |
| 57 | 65 |
| 58 HTMLAnchorElement::~HTMLAnchorElement() | 66 HTMLAnchorElement::~HTMLAnchorElement() |
| 59 { | 67 { |
| 68 m_ping->setObserver(nullptr); | |
|
tkent
2015/07/14 00:29:44
This doesn't work on Oilpan because m_ping can be
| |
| 60 } | 69 } |
| 61 | 70 |
| 62 bool HTMLAnchorElement::supportsFocus() const | 71 bool HTMLAnchorElement::supportsFocus() const |
| 63 { | 72 { |
| 64 if (hasEditableStyle()) | 73 if (hasEditableStyle()) |
| 65 return HTMLElement::supportsFocus(); | 74 return HTMLElement::supportsFocus(); |
| 66 // If not a link we should still be able to focus the element if it has tabI ndex. | 75 // If not a link we should still be able to focus the element if it has tabI ndex. |
| 67 return isLink() || HTMLElement::supportsFocus(); | 76 return isLink() || HTMLElement::supportsFocus(); |
| 68 } | 77 } |
| 69 | 78 |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 210 if (document().isDNSPrefetchEnabled()) { | 219 if (document().isDNSPrefetchEnabled()) { |
| 211 if (protocolIs(parsedURL, "http") || protocolIs(parsedURL, "http s") || parsedURL.startsWith("//")) | 220 if (protocolIs(parsedURL, "http") || protocolIs(parsedURL, "http s") || parsedURL.startsWith("//")) |
| 212 prefetchDNS(document().completeURL(parsedURL).host()); | 221 prefetchDNS(document().completeURL(parsedURL).host()); |
| 213 } | 222 } |
| 214 } | 223 } |
| 215 invalidateCachedVisitedLinkHash(); | 224 invalidateCachedVisitedLinkHash(); |
| 216 } else if (name == nameAttr || name == titleAttr) { | 225 } else if (name == nameAttr || name == titleAttr) { |
| 217 // Do nothing. | 226 // Do nothing. |
| 218 } else if (name == relAttr) { | 227 } else if (name == relAttr) { |
| 219 setRel(value); | 228 setRel(value); |
| 229 } else if (name == pingAttr) { | |
| 230 m_ping->setValue(value); | |
| 220 } else { | 231 } else { |
| 221 HTMLElement::parseAttribute(name, value); | 232 HTMLElement::parseAttribute(name, value); |
| 222 } | 233 } |
| 223 } | 234 } |
| 224 | 235 |
| 225 void HTMLAnchorElement::accessKeyAction(bool sendMouseEvents) | 236 void HTMLAnchorElement::accessKeyAction(bool sendMouseEvents) |
| 226 { | 237 { |
| 227 dispatchSimulatedClick(0, sendMouseEvents ? SendMouseUpDownEvents : SendNoEv ents); | 238 dispatchSimulatedClick(0, sendMouseEvents ? SendMouseUpDownEvents : SendNoEv ents); |
| 228 } | 239 } |
| 229 | 240 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 310 return Element::tabIndex(); | 321 return Element::tabIndex(); |
| 311 } | 322 } |
| 312 | 323 |
| 313 bool HTMLAnchorElement::isLiveLink() const | 324 bool HTMLAnchorElement::isLiveLink() const |
| 314 { | 325 { |
| 315 return isLink() && !hasEditableStyle(); | 326 return isLink() && !hasEditableStyle(); |
| 316 } | 327 } |
| 317 | 328 |
| 318 void HTMLAnchorElement::sendPings(const KURL& destinationURL) const | 329 void HTMLAnchorElement::sendPings(const KURL& destinationURL) const |
| 319 { | 330 { |
| 320 const AtomicString& pingValue = getAttribute(pingAttr); | 331 if (m_ping->value().isNull() || !document().settings() || !document().settin gs()->hyperlinkAuditingEnabled()) |
| 321 if (pingValue.isNull() || !document().settings() || !document().settings()-> hyperlinkAuditingEnabled()) | |
| 322 return; | 332 return; |
| 323 | 333 |
| 324 UseCounter::count(document(), UseCounter::HTMLAnchorElementPingAttribute); | 334 UseCounter::count(document(), UseCounter::HTMLAnchorElementPingAttribute); |
| 325 | 335 |
| 326 SpaceSplitString pingURLs(pingValue, SpaceSplitString::ShouldNotFoldCase); | 336 SpaceSplitString pingURLs = m_ping->tokens(); |
|
tkent
2015/07/14 00:29:44
should be |const SpaceSplitString&|.
| |
| 327 for (unsigned i = 0; i < pingURLs.size(); i++) | 337 for (unsigned i = 0; i < pingURLs.size(); i++) |
| 328 PingLoader::sendLinkAuditPing(document().frame(), document().completeURL (pingURLs[i]), destinationURL); | 338 PingLoader::sendLinkAuditPing(document().frame(), document().completeURL (pingURLs[i]), destinationURL); |
| 329 } | 339 } |
| 330 | 340 |
| 341 DOMSettableTokenList* HTMLAnchorElement::ping() const | |
| 342 { | |
| 343 return m_ping.get(); | |
| 344 } | |
| 345 | |
| 331 void HTMLAnchorElement::handleClick(Event* event) | 346 void HTMLAnchorElement::handleClick(Event* event) |
| 332 { | 347 { |
| 333 event->setDefaultHandled(); | 348 event->setDefaultHandled(); |
| 334 | 349 |
| 335 LocalFrame* frame = document().frame(); | 350 LocalFrame* frame = document().frame(); |
| 336 if (!frame) | 351 if (!frame) |
| 337 return; | 352 return; |
| 338 | 353 |
| 339 StringBuilder url; | 354 StringBuilder url; |
| 340 url.append(stripLeadingAndTrailingHTMLSpaces(fastGetAttribute(hrefAttr))); | 355 url.append(stripLeadingAndTrailingHTMLSpaces(fastGetAttribute(hrefAttr))); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 391 if (activityLogger) { | 406 if (activityLogger) { |
| 392 Vector<String> argv; | 407 Vector<String> argv; |
| 393 argv.append("a"); | 408 argv.append("a"); |
| 394 argv.append(fastGetAttribute(hrefAttr)); | 409 argv.append(fastGetAttribute(hrefAttr)); |
| 395 activityLogger->logEvent("blinkAddElement", argv.size(), argv.data() ); | 410 activityLogger->logEvent("blinkAddElement", argv.size(), argv.data() ); |
| 396 } | 411 } |
| 397 } | 412 } |
| 398 return HTMLElement::insertedInto(insertionPoint); | 413 return HTMLElement::insertedInto(insertionPoint); |
| 399 } | 414 } |
| 400 | 415 |
| 416 void HTMLAnchorElement::valueChanged() | |
| 417 { | |
| 418 setSynchronizedLazyAttribute(pingAttr, m_ping->value()); | |
| 419 } | |
| 420 | |
| 401 } // namespace blink | 421 } // namespace blink |
| OLD | NEW |