diff options
Diffstat (limited to 'Source/WebCore/dom/VisitedLinkState.cpp')
-rw-r--r-- | Source/WebCore/dom/VisitedLinkState.cpp | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/Source/WebCore/dom/VisitedLinkState.cpp b/Source/WebCore/dom/VisitedLinkState.cpp index 3b12f6c80..5920bdadc 100644 --- a/Source/WebCore/dom/VisitedLinkState.cpp +++ b/Source/WebCore/dom/VisitedLinkState.cpp @@ -33,31 +33,24 @@ #include "Frame.h" #include "HTMLAnchorElement.h" #include "Page.h" -#include "PageGroup.h" -#include "PlatformStrategies.h" -#include "VisitedLinkStrategy.h" +#include "VisitedLinkStore.h" #include "XLinkNames.h" namespace WebCore { using namespace HTMLNames; -inline static const AtomicString* linkAttribute(Element& element) +inline static const AtomicString* linkAttribute(const Element& element) { if (!element.isLink()) return 0; if (element.isHTMLElement()) - return &element.fastGetAttribute(HTMLNames::hrefAttr); + return &element.attributeWithoutSynchronization(HTMLNames::hrefAttr); if (element.isSVGElement()) return &element.getAttribute(XLinkNames::hrefAttr); return 0; } -PassOwnPtr<VisitedLinkState> VisitedLinkState::create(Document& document) -{ - return adoptPtr(new VisitedLinkState(document)); -} - VisitedLinkState::VisitedLinkState(Document& document) : m_document(document) { @@ -69,14 +62,14 @@ void VisitedLinkState::invalidateStyleForAllLinks() return; for (auto& element : descendantsOfType<Element>(m_document)) { if (element.isLink()) - element.setNeedsStyleRecalc(); + element.invalidateStyleForSubtree(); } } -inline static LinkHash linkHashForElement(Document& document, Element& element) +inline static LinkHash linkHashForElement(Document& document, const Element& element) { - if (isHTMLAnchorElement(element)) - return toHTMLAnchorElement(element).visitedLinkHash(); + if (is<HTMLAnchorElement>(element)) + return downcast<HTMLAnchorElement>(element).visitedLinkHash(); if (const AtomicString* attribute = linkAttribute(element)) return WebCore::visitedLinkHash(document.baseURL(), *attribute); return 0; @@ -88,11 +81,11 @@ void VisitedLinkState::invalidateStyleForLink(LinkHash linkHash) return; for (auto& element : descendantsOfType<Element>(m_document)) { if (linkHashForElement(m_document, element) == linkHash) - element.setNeedsStyleRecalc(); + element.invalidateStyleForSubtree(); } } -EInsideLink VisitedLinkState::determineLinkStateSlowCase(Element& element) +EInsideLink VisitedLinkState::determineLinkStateSlowCase(const Element& element) { ASSERT(element.isLink()); @@ -106,8 +99,8 @@ EInsideLink VisitedLinkState::determineLinkStateSlowCase(Element& element) return InsideVisitedLink; LinkHash hash; - if (isHTMLAnchorElement(element)) - hash = toHTMLAnchorElement(element).visitedLinkHash(); + if (is<HTMLAnchorElement>(element)) + hash = downcast<HTMLAnchorElement>(element).visitedLinkHash(); else hash = WebCore::visitedLinkHash(element.document().baseURL(), *attribute); @@ -124,7 +117,10 @@ EInsideLink VisitedLinkState::determineLinkStateSlowCase(Element& element) m_linksCheckedForVisitedState.add(hash); - return platformStrategies()->visitedLinkStrategy()->isLinkVisited(page, hash, element.document().baseURL(), *attribute) ? InsideVisitedLink : InsideUnvisitedLink; -} + if (!page->visitedLinkStore().isLinkVisited(*page, hash, element.document().baseURL(), *attribute)) + return InsideUnvisitedLink; + return InsideVisitedLink; } + +} // namespace WebCore |