AccessibilityLabel.cpp [plain text]
#include "config.h"
#include "AccessibilityLabel.h"
#include "AXObjectCache.h"
#include "HTMLNames.h"
namespace WebCore {
using namespace HTMLNames;
AccessibilityLabel::AccessibilityLabel(RenderObject* renderer)
: AccessibilityRenderObject(renderer)
{
}
AccessibilityLabel::~AccessibilityLabel()
{
}
Ref<AccessibilityLabel> AccessibilityLabel::create(RenderObject* renderer)
{
return adoptRef(*new AccessibilityLabel(renderer));
}
bool AccessibilityLabel::computeAccessibilityIsIgnored() const
{
return accessibilityIsIgnoredByDefault();
}
String AccessibilityLabel::stringValue() const
{
if (containsOnlyStaticText())
return textUnderElement();
return AccessibilityNodeObject::stringValue();
}
static bool childrenContainOnlyStaticText(const AccessibilityObject::AccessibilityChildrenVector& children)
{
if (!children.size())
return false;
for (const auto& child : children) {
if (child->roleValue() == StaticTextRole)
continue;
if (child->roleValue() == GroupRole) {
if (!childrenContainOnlyStaticText(child->children()))
return false;
} else
return false;
}
return true;
}
bool AccessibilityLabel::containsOnlyStaticText() const
{
if (m_containsOnlyStaticTextDirty)
return childrenContainOnlyStaticText(m_children);
return m_containsOnlyStaticText;
}
void AccessibilityLabel::updateChildrenIfNecessary()
{
AccessibilityRenderObject::updateChildrenIfNecessary();
if (m_containsOnlyStaticTextDirty)
m_containsOnlyStaticText = childrenContainOnlyStaticText(m_children);
m_containsOnlyStaticTextDirty = false;
}
void AccessibilityLabel::clearChildren()
{
AccessibilityRenderObject::clearChildren();
m_containsOnlyStaticText = false;
m_containsOnlyStaticTextDirty = false;
}
void AccessibilityLabel::insertChild(AccessibilityObject* object, unsigned index)
{
AccessibilityRenderObject::insertChild(object, index);
m_containsOnlyStaticTextDirty = true;
}
}