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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 46 using namespace HTMLNames; | 46 using namespace HTMLNames; |
| 47 | 47 |
| 48 HTMLAnchorElement::HTMLAnchorElement(const QualifiedName& tagName, Document& doc ument) | 48 HTMLAnchorElement::HTMLAnchorElement(const QualifiedName& tagName, Document& doc ument) |
| 49 : HTMLElement(tagName, document) | 49 : HTMLElement(tagName, document) |
| 50 , m_linkRelations(0) | 50 , m_linkRelations(0) |
| 51 , m_cachedVisitedLinkHash(0) | 51 , m_cachedVisitedLinkHash(0) |
| 52 , m_wasFocusedByMouse(false) | 52 , m_wasFocusedByMouse(false) |
| 53 { | 53 { |
| 54 } | 54 } |
| 55 | 55 |
| 56 DEFINE_TRACE(HTMLAnchorElement) | |
| 57 { | |
| 58 visitor->trace(m_ping); | |
| 59 HTMLElement::trace(visitor); | |
| 60 DOMSettableTokenListObserver::trace(visitor); | |
| 61 } | |
| 62 | |
| 56 PassRefPtrWillBeRawPtr<HTMLAnchorElement> HTMLAnchorElement::create(Document& do cument) | 63 PassRefPtrWillBeRawPtr<HTMLAnchorElement> HTMLAnchorElement::create(Document& do cument) |
| 57 { | 64 { |
| 58 return adoptRefWillBeNoop(new HTMLAnchorElement(aTag, document)); | 65 return adoptRefWillBeNoop(new HTMLAnchorElement(aTag, document)); |
| 59 } | 66 } |
| 60 | 67 |
| 61 HTMLAnchorElement::~HTMLAnchorElement() | 68 HTMLAnchorElement::~HTMLAnchorElement() |
| 62 { | 69 { |
| 70 #if !ENABLE(OILPAN) | |
| 71 if (m_ping) | |
| 72 m_ping->setObserver(nullptr); | |
| 73 #endif | |
| 63 } | 74 } |
| 64 | 75 |
| 65 bool HTMLAnchorElement::supportsFocus() const | 76 bool HTMLAnchorElement::supportsFocus() const |
| 66 { | 77 { |
| 67 if (hasEditableStyle()) | 78 if (hasEditableStyle()) |
| 68 return HTMLElement::supportsFocus(); | 79 return HTMLElement::supportsFocus(); |
| 69 // If not a link we should still be able to focus the element if it has tabI ndex. | 80 // If not a link we should still be able to focus the element if it has tabI ndex. |
| 70 return isLink() || HTMLElement::supportsFocus(); | 81 return isLink() || HTMLElement::supportsFocus(); |
| 71 } | 82 } |
| 72 | 83 |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 213 if (document().isDNSPrefetchEnabled()) { | 224 if (document().isDNSPrefetchEnabled()) { |
| 214 if (protocolIs(parsedURL, "http") || protocolIs(parsedURL, "http s") || parsedURL.startsWith("//")) | 225 if (protocolIs(parsedURL, "http") || protocolIs(parsedURL, "http s") || parsedURL.startsWith("//")) |
| 215 prefetchDNS(document().completeURL(parsedURL).host()); | 226 prefetchDNS(document().completeURL(parsedURL).host()); |
| 216 } | 227 } |
| 217 } | 228 } |
| 218 invalidateCachedVisitedLinkHash(); | 229 invalidateCachedVisitedLinkHash(); |
| 219 } else if (name == nameAttr || name == titleAttr) { | 230 } else if (name == nameAttr || name == titleAttr) { |
| 220 // Do nothing. | 231 // Do nothing. |
| 221 } else if (name == relAttr) { | 232 } else if (name == relAttr) { |
| 222 setRel(value); | 233 setRel(value); |
| 234 } else if (name == pingAttr) { | |
| 235 if (!m_ping) | |
| 236 m_ping = DOMSettableTokenList::create((DOMSettableTokenListObserver* )this); | |
|
philipj_slow
2015/10/05 15:03:17
It looks like you could use ping()->setValue(value
hyunjunekim2
2015/10/05 15:30:25
When call |anchor.setAttribute('ping', 'p1');|, if
philipj_slow
2015/10/05 16:36:43
It will segfault if you use use m_ping->, but why
| |
| 237 m_ping->setValue(value); | |
| 223 } else { | 238 } else { |
| 224 HTMLElement::parseAttribute(name, value); | 239 HTMLElement::parseAttribute(name, value); |
| 225 } | 240 } |
| 226 } | 241 } |
| 227 | 242 |
| 228 void HTMLAnchorElement::accessKeyAction(bool sendMouseEvents) | 243 void HTMLAnchorElement::accessKeyAction(bool sendMouseEvents) |
| 229 { | 244 { |
| 230 dispatchSimulatedClick(0, sendMouseEvents ? SendMouseUpDownEvents : SendNoEv ents); | 245 dispatchSimulatedClick(0, sendMouseEvents ? SendMouseUpDownEvents : SendNoEv ents); |
| 231 } | 246 } |
| 232 | 247 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 313 return Element::tabIndex(); | 328 return Element::tabIndex(); |
| 314 } | 329 } |
| 315 | 330 |
| 316 bool HTMLAnchorElement::isLiveLink() const | 331 bool HTMLAnchorElement::isLiveLink() const |
| 317 { | 332 { |
| 318 return isLink() && !hasEditableStyle(); | 333 return isLink() && !hasEditableStyle(); |
| 319 } | 334 } |
| 320 | 335 |
| 321 void HTMLAnchorElement::sendPings(const KURL& destinationURL) const | 336 void HTMLAnchorElement::sendPings(const KURL& destinationURL) const |
| 322 { | 337 { |
| 323 const AtomicString& pingValue = getAttribute(pingAttr); | 338 if (!m_ping || m_ping->value().isNull() || !document().settings() || !docume nt().settings()->hyperlinkAuditingEnabled()) |
| 324 if (pingValue.isNull() || !document().settings() || !document().settings()-> hyperlinkAuditingEnabled()) | |
| 325 return; | 339 return; |
| 326 | 340 |
| 327 UseCounter::count(document(), UseCounter::HTMLAnchorElementPingAttribute); | 341 UseCounter::count(document(), UseCounter::HTMLAnchorElementPingAttribute); |
| 328 | 342 |
| 329 SpaceSplitString pingURLs(pingValue, SpaceSplitString::ShouldNotFoldCase); | 343 const SpaceSplitString& pingURLs = m_ping->tokens(); |
| 330 for (unsigned i = 0; i < pingURLs.size(); i++) | 344 for (unsigned i = 0; i < pingURLs.size(); i++) |
| 331 PingLoader::sendLinkAuditPing(document().frame(), document().completeURL (pingURLs[i]), destinationURL); | 345 PingLoader::sendLinkAuditPing(document().frame(), document().completeURL (pingURLs[i]), destinationURL); |
| 332 } | 346 } |
| 333 | 347 |
| 348 DOMSettableTokenList* HTMLAnchorElement::ping() const | |
| 349 { | |
| 350 if (!m_ping) | |
| 351 m_ping = DOMSettableTokenList::create((DOMSettableTokenListObserver*)thi s); | |
|
philipj_slow
2015/10/05 15:03:17
Why is the case needed? If it is needed, it should
hyunjunekim2
2015/10/05 15:30:25
currently lazily it did make. If there is'n this c
philipj_slow
2015/10/05 16:36:43
It seems like just making ping() not const would b
| |
| 352 | |
| 353 return m_ping.get(); | |
| 354 } | |
| 355 | |
| 334 void HTMLAnchorElement::handleClick(Event* event) | 356 void HTMLAnchorElement::handleClick(Event* event) |
| 335 { | 357 { |
| 336 event->setDefaultHandled(); | 358 event->setDefaultHandled(); |
| 337 | 359 |
| 338 LocalFrame* frame = document().frame(); | 360 LocalFrame* frame = document().frame(); |
| 339 if (!frame) | 361 if (!frame) |
| 340 return; | 362 return; |
| 341 | 363 |
| 342 StringBuilder url; | 364 StringBuilder url; |
| 343 url.append(stripLeadingAndTrailingHTMLSpaces(fastGetAttribute(hrefAttr))); | 365 url.append(stripLeadingAndTrailingHTMLSpaces(fastGetAttribute(hrefAttr))); |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 366 } else { | 388 } else { |
| 367 request.setRequestContext(WebURLRequest::RequestContextHyperlink); | 389 request.setRequestContext(WebURLRequest::RequestContextHyperlink); |
| 368 FrameLoadRequest frameRequest(&document(), request, getAttribute(targetA ttr)); | 390 FrameLoadRequest frameRequest(&document(), request, getAttribute(targetA ttr)); |
| 369 frameRequest.setTriggeringEvent(event); | 391 frameRequest.setTriggeringEvent(event); |
| 370 if (hasRel(RelationNoReferrer)) | 392 if (hasRel(RelationNoReferrer)) |
| 371 frameRequest.setShouldSendReferrer(NeverSendReferrer); | 393 frameRequest.setShouldSendReferrer(NeverSendReferrer); |
| 372 frame->loader().load(frameRequest); | 394 frame->loader().load(frameRequest); |
| 373 } | 395 } |
| 374 } | 396 } |
| 375 | 397 |
| 398 void HTMLAnchorElement::valueChanged() | |
| 399 { | |
| 400 setSynchronizedLazyAttribute(pingAttr, m_ping->value()); | |
| 401 } | |
| 402 | |
| 376 bool isEnterKeyKeydownEvent(Event* event) | 403 bool isEnterKeyKeydownEvent(Event* event) |
| 377 { | 404 { |
| 378 return event->type() == EventTypeNames::keydown && event->isKeyboardEvent() && toKeyboardEvent(event)->keyIdentifier() == "Enter"; | 405 return event->type() == EventTypeNames::keydown && event->isKeyboardEvent() && toKeyboardEvent(event)->keyIdentifier() == "Enter"; |
| 379 } | 406 } |
| 380 | 407 |
| 381 bool isLinkClick(Event* event) | 408 bool isLinkClick(Event* event) |
| 382 { | 409 { |
| 383 return event->type() == EventTypeNames::click && (!event->isMouseEvent() || toMouseEvent(event)->button() != RightButton); | 410 return event->type() == EventTypeNames::click && (!event->isMouseEvent() || toMouseEvent(event)->button() != RightButton); |
| 384 } | 411 } |
| 385 | 412 |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 401 Vector<String> argv; | 428 Vector<String> argv; |
| 402 argv.append("a"); | 429 argv.append("a"); |
| 403 argv.append(fastGetAttribute(hrefAttr)); | 430 argv.append(fastGetAttribute(hrefAttr)); |
| 404 activityLogger->logEvent("blinkAddElement", argv.size(), argv.data() ); | 431 activityLogger->logEvent("blinkAddElement", argv.size(), argv.data() ); |
| 405 } | 432 } |
| 406 } | 433 } |
| 407 return HTMLElement::insertedInto(insertionPoint); | 434 return HTMLElement::insertedInto(insertionPoint); |
| 408 } | 435 } |
| 409 | 436 |
| 410 } // namespace blink | 437 } // namespace blink |
| OLD | NEW |