15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 1999 Antti Koivisto (koivisto@kde.org) 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 2000 Simon Hausmann <hausmann@kde.org> 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef HTMLAnchorElement_h 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define HTMLAnchorElement_h 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 275d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/HTMLNames.h" 281e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/dom/DOMURLUtils.h" 295d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/dom/Document.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLElement.h" 311e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/LinkHash.h" 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 33c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Link relation bitmask values. 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// FIXME: Uncomment as the various link relations are implemented. 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum { 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationAlternate = 0x00000001, 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationArchives = 0x00000002, 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationAuthor = 0x00000004, 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationBoomark = 0x00000008, 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationExternal = 0x00000010, 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationFirst = 0x00000020, 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationHelp = 0x00000040, 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationIndex = 0x00000080, 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationLast = 0x00000100, 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationLicense = 0x00000200, 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationNext = 0x00000400, 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationNoFolow = 0x00000800, 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RelationNoReferrer = 0x00001000, 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationPrev = 0x00002000, 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationSearch = 0x00004000, 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationSidebar = 0x00008000, 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationTag = 0x00010000, 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// RelationUp = 0x00020000, 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 581e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)class HTMLAnchorElement : public HTMLElement, public DOMURLUtils { 597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_WRAPPERTYPEINFO(); 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 61323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) static PassRefPtrWillBeRawPtr<HTMLAnchorElement> create(Document&); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~HTMLAnchorElement(); 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) KURL href() const; 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setHref(const AtomicString&); 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const AtomicString& name() const; 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual KURL url() const OVERRIDE FINAL; 7109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void setURL(const KURL&) OVERRIDE FINAL; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual String input() const OVERRIDE FINAL; 7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void setInput(const String&) OVERRIDE FINAL; 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 76197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual bool isLiveLink() const OVERRIDE FINAL; 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool willRespondToMouseClickEvents() OVERRIDE FINAL; 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasRel(uint32_t relation) const; 8109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void setRel(const AtomicString&); 8202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LinkHash visitedLinkHash() const; 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void invalidateCachedVisitedLinkHash() { m_cachedVisitedLinkHash = 0; } 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 86197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch void sendPings(const KURL& destinationURL) const; 87d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 898abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) HTMLAnchorElement(const QualifiedName&, Document&); 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 91197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual void attributeWillChange(const QualifiedName&, const AtomicString& oldValue, const AtomicString& newValue) OVERRIDE; 92926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE; 93f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu virtual bool supportsFocus() const OVERRIDE; 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual bool shouldHaveFocusAppearance() const OVERRIDE FINAL; 977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void dispatchFocusEvent(Element* oldFocusedElement, FocusType) OVERRIDE; 9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool isMouseFocusable() const OVERRIDE; 99f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) virtual bool isKeyboardFocusable() const OVERRIDE; 10009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void defaultEventHandler(Event*) OVERRIDE FINAL; 10151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) virtual void setActive(bool = true) OVERRIDE FINAL; 10209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void accessKeyAction(bool sendMouseEvents) OVERRIDE FINAL; 10309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool isURLAttribute(const Attribute&) const OVERRIDE FINAL; 10443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) virtual bool hasLegalLinkAttribute(const QualifiedName&) const OVERRIDE FINAL; 10509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool canStartSelection() const OVERRIDE FINAL; 10609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual short tabIndex() const OVERRIDE FINAL; 10709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool draggable() const OVERRIDE FINAL; 10809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual bool isInteractiveContent() const OVERRIDE FINAL; 109197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual InsertionNotificationRequest insertedInto(ContainerNode*) OVERRIDE; 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void handleClick(Event*); 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1126f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch uint32_t m_linkRelations; 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mutable LinkHash m_cachedVisitedLinkHash; 1147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool m_wasFocusedByMouse; 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LinkHash HTMLAnchorElement::visitedLinkHash() const 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_cachedVisitedLinkHash) 120c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) m_cachedVisitedLinkHash = blink::visitedLinkHash(document().baseURL(), fastGetAttribute(HTMLNames::hrefAttr)); 12102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch return m_cachedVisitedLinkHash; 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Functions shared with the other anchor elements (i.e., SVG). 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isEnterKeyKeydownEvent(Event*); 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isLinkClick(Event*); 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 129c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // HTMLAnchorElement_h 132