diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/html/HTMLAnchorElement.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/html/HTMLAnchorElement.h')
-rw-r--r-- | Source/WebCore/html/HTMLAnchorElement.h | 120 |
1 files changed, 41 insertions, 79 deletions
diff --git a/Source/WebCore/html/HTMLAnchorElement.h b/Source/WebCore/html/HTMLAnchorElement.h index 466916325..a7bc6099e 100644 --- a/Source/WebCore/html/HTMLAnchorElement.h +++ b/Source/WebCore/html/HTMLAnchorElement.h @@ -2,7 +2,7 @@ * Copyright (C) 1999 Lars Knoll (knoll@kde.org) * (C) 1999 Antti Koivisto (koivisto@kde.org) * (C) 2000 Simon Hausmann <hausmann@kde.org> - * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. + * Copyright (C) 2007-2016 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -21,142 +21,104 @@ * */ -#ifndef HTMLAnchorElement_h -#define HTMLAnchorElement_h +#pragma once #include "HTMLElement.h" #include "HTMLNames.h" #include "LinkHash.h" +#include "URLUtils.h" +#include <wtf/OptionSet.h> namespace WebCore { +class DOMTokenList; + // Link relation bitmask values. -// FIXME: Uncomment as the various link relations are implemented. -enum { -// RelationAlternate = 0x00000001, -// RelationArchives = 0x00000002, -// RelationAuthor = 0x00000004, -// RelationBoomark = 0x00000008, -// RelationExternal = 0x00000010, -// RelationFirst = 0x00000020, -// RelationHelp = 0x00000040, -// RelationIndex = 0x00000080, -// RelationLast = 0x00000100, -// RelationLicense = 0x00000200, -// RelationNext = 0x00000400, -// RelationNoFolow = 0x00000800, - RelationNoReferrer = 0x00001000, -// RelationPrev = 0x00002000, -// RelationSearch = 0x00004000, -// RelationSidebar = 0x00008000, -// RelationTag = 0x00010000, -// RelationUp = 0x00020000, +enum class Relation { + NoReferrer = 1 << 0, + NoOpener = 1 << 1, }; -class HTMLAnchorElement : public HTMLElement { +class HTMLAnchorElement : public HTMLElement, public URLUtils<HTMLAnchorElement> { public: - static PassRefPtr<HTMLAnchorElement> create(Document&); - static PassRefPtr<HTMLAnchorElement> create(const QualifiedName&, Document&); + static Ref<HTMLAnchorElement> create(Document&); + static Ref<HTMLAnchorElement> create(const QualifiedName&, Document&); virtual ~HTMLAnchorElement(); - URL href() const; + WEBCORE_EXPORT URL href() const; void setHref(const AtomicString&); const AtomicString& name() const; - String hash() const; - void setHash(const String&); - - String host() const; - void setHost(const String&); - - String hostname() const; - void setHostname(const String&); - - String pathname() const; - void setPathname(const String&); - - String port() const; - void setPort(const String&); - - String protocol() const; - void setProtocol(const String&); - - String search() const; - void setSearch(const String&); + WEBCORE_EXPORT String origin() const; - String origin() const; - - String text(); - - String toString() const; + WEBCORE_EXPORT String text(); + void setText(const String&); bool isLiveLink() const; - virtual bool willRespondToMouseClickEvents() override; + bool willRespondToMouseClickEvents() final; - bool hasRel(uint32_t relation) const; - void setRel(const String&); + bool hasRel(Relation) const; LinkHash visitedLinkHash() const; void invalidateCachedVisitedLinkHash() { m_cachedVisitedLinkHash = 0; } + WEBCORE_EXPORT DOMTokenList& relList(); + protected: HTMLAnchorElement(const QualifiedName&, Document&); - virtual void parseAttribute(const QualifiedName&, const AtomicString&) override; + void parseAttribute(const QualifiedName&, const AtomicString&) override; private: - virtual bool supportsFocus() const override; - virtual bool isMouseFocusable() const override; - virtual bool isKeyboardFocusable(KeyboardEvent*) const override; - virtual void defaultEventHandler(Event*) override; - virtual void setActive(bool active = true, bool pause = false) override final; - virtual void accessKeyAction(bool sendMouseEvents) override; - virtual bool isURLAttribute(const Attribute&) const override; - virtual bool canStartSelection() const override; - virtual String target() const override; - virtual short tabIndex() const override final; - virtual bool draggable() const override; + bool supportsFocus() const override; + bool isMouseFocusable() const override; + bool isKeyboardFocusable(KeyboardEvent&) const override; + void defaultEventHandler(Event&) final; + void setActive(bool active = true, bool pause = false) final; + void accessKeyAction(bool sendMouseEvents) final; + bool isURLAttribute(const Attribute&) const final; + bool canStartSelection() const final; + String target() const override; + int tabIndex() const final; + bool draggable() const final; void sendPings(const URL& destinationURL); - void handleClick(Event*); + void handleClick(Event&); enum EventType { MouseEventWithoutShiftKey, MouseEventWithShiftKey, NonMouseEvent, }; - static EventType eventType(Event*); + static EventType eventType(Event&); bool treatLinkAsLiveForEventType(EventType) const; Element* rootEditableElementForSelectionOnMouseDown() const; void setRootEditableElementForSelectionOnMouseDown(Element*); void clearRootEditableElementForSelectionOnMouseDown(); - bool m_hasRootEditableElementForSelectionOnMouseDown : 1; - bool m_wasShiftKeyDownOnMouseDown : 1; - uint32_t m_linkRelations : 30; + bool m_hasRootEditableElementForSelectionOnMouseDown; + bool m_wasShiftKeyDownOnMouseDown; + OptionSet<Relation> m_linkRelations; mutable LinkHash m_cachedVisitedLinkHash; + + std::unique_ptr<DOMTokenList> m_relList; }; inline LinkHash HTMLAnchorElement::visitedLinkHash() const { if (!m_cachedVisitedLinkHash) - m_cachedVisitedLinkHash = WebCore::visitedLinkHash(document().baseURL(), fastGetAttribute(HTMLNames::hrefAttr)); + m_cachedVisitedLinkHash = WebCore::visitedLinkHash(document().baseURL(), attributeWithoutSynchronization(HTMLNames::hrefAttr)); return m_cachedVisitedLinkHash; } // Functions shared with the other anchor elements (i.e., SVG). -bool isEnterKeyKeydownEvent(Event*); -bool isLinkClick(Event*); +bool isEnterKeyKeydownEvent(Event&); bool shouldProhibitLinks(Element*); -NODE_TYPE_CASTS(HTMLAnchorElement) - } // namespace WebCore - -#endif // HTMLAnchorElement_h |