summaryrefslogtreecommitdiff
path: root/Source/WebCore/dom/VisitedLinkState.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/dom/VisitedLinkState.cpp')
-rw-r--r--Source/WebCore/dom/VisitedLinkState.cpp36
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