Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2114)

Unified Diff: Source/modules/accessibility/InspectorAccessibilityAgent.cpp

Issue 1076453004: Show reasons why nodes are ignored in accessibility sidebar (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Add a catch-all return to ignoredReasonName Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/modules/accessibility/InspectorAccessibilityAgent.cpp
diff --git a/Source/modules/accessibility/InspectorAccessibilityAgent.cpp b/Source/modules/accessibility/InspectorAccessibilityAgent.cpp
index fe1664975ef649c729a11bc6d63cb6b452e2ebc6..b609a876e20047000a92b2b8d6bf488a17eeb4d8 100644
--- a/Source/modules/accessibility/InspectorAccessibilityAgent.cpp
+++ b/Source/modules/accessibility/InspectorAccessibilityAgent.cpp
@@ -15,6 +15,7 @@
#include "core/page/Page.h"
#include "modules/accessibility/AXObject.h"
#include "modules/accessibility/AXObjectCacheImpl.h"
+#include "modules/accessibility/InspectorTypeBuilderHelper.h"
#include "platform/JSONValues.h"
namespace blink {
@@ -33,107 +34,6 @@ using TypeBuilder::Accessibility::AXWidgetStates;
namespace {
-PassRefPtr<AXProperty> createProperty(String name, PassRefPtr<AXValue> value)
-{
- RefPtr<AXProperty> property = AXProperty::create().setName(name).setValue(value);
- return property;
-}
-
-PassRefPtr<AXProperty> createProperty(AXGlobalStates::Enum name, PassRefPtr<AXValue> value)
-{
- return createProperty(TypeBuilder::getEnumConstantValue(name), value);
-}
-
-PassRefPtr<AXProperty> createProperty(AXLiveRegionAttributes::Enum name, PassRefPtr<AXValue> value)
-{
- return createProperty(TypeBuilder::getEnumConstantValue(name), value);
-}
-
-
-PassRefPtr<AXProperty> createProperty(AXRelationshipAttributes::Enum name, PassRefPtr<AXValue> value)
-{
- return createProperty(TypeBuilder::getEnumConstantValue(name), value);
-}
-
-PassRefPtr<AXProperty> createProperty(AXWidgetAttributes::Enum name, PassRefPtr<AXValue> value)
-{
- return createProperty(TypeBuilder::getEnumConstantValue(name), value);
-}
-
-PassRefPtr<AXProperty> createProperty(AXWidgetStates::Enum name, PassRefPtr<AXValue> value)
-{
- return createProperty(TypeBuilder::getEnumConstantValue(name), value);
-}
-
-
-PassRefPtr<AXValue> createValue(String value, AXValueType::Enum type = AXValueType::String)
-{
- RefPtr<AXValue> axValue = AXValue::create().setType(type);
- axValue->setValue(JSONString::create(value));
- return axValue;
-}
-
-PassRefPtr<AXValue> createValue(int value, AXValueType::Enum type = AXValueType::Integer)
-{
- RefPtr<AXValue> axValue = AXValue::create().setType(type);
- axValue->setValue(JSONBasicValue::create(value));
- return axValue;
-}
-
-PassRefPtr<AXValue> createValue(float value, AXValueType::Enum type = AXValueType::Number)
-{
- RefPtr<AXValue> axValue = AXValue::create().setType(type);
- axValue->setValue(JSONBasicValue::create(value));
- return axValue;
-}
-
-PassRefPtr<AXValue> createBooleanValue(bool value, AXValueType::Enum type = AXValueType::Boolean)
-{
- RefPtr<AXValue> axValue = AXValue::create().setType(type);
- axValue->setValue(JSONBasicValue::create(value));
- return axValue;
-}
-
-PassRefPtr<AXRelatedNode> relatedNodeForAXObject(const AXObject* axObject)
-{
- Node* node = axObject->node();
- if (!node)
- return PassRefPtr<AXRelatedNode>();
- int backendNodeId = DOMNodeIds::idForNode(node);
- if (!backendNodeId)
- return PassRefPtr<AXRelatedNode>();
- RefPtr<AXRelatedNode> relatedNode = AXRelatedNode::create().setBackendNodeId(backendNodeId);
- if (!node->isElementNode())
- return relatedNode;
-
- Element* element = toElement(node);
- const AtomicString& idref = element->getIdAttribute();
- if (!idref.isEmpty())
- relatedNode->setIdref(idref);
- return relatedNode;
-}
-
-
-PassRefPtr<AXValue> createRelatedNodeValue(const AXObject* axObject)
-{
- RefPtr<AXValue> axValue = AXValue::create().setType(AXValueType::Idref);
- RefPtr<AXRelatedNode> relatedNode = relatedNodeForAXObject(axObject);
- axValue->setRelatedNodeValue(relatedNode);
- return axValue;
-}
-
-PassRefPtr<AXValue> createRelatedNodeListValue(AXObject::AccessibilityChildrenVector axObjects)
-{
- RefPtr<TypeBuilder::Array<AXRelatedNode>> relatedNodes = TypeBuilder::Array<AXRelatedNode>::create();
- for (unsigned i = 0; i < axObjects.size(); i++) {
- if (RefPtr<AXRelatedNode> relatedNode = relatedNodeForAXObject(axObjects[i].get()))
- relatedNodes->addItem(relatedNode);
- }
- RefPtr<AXValue> axValue = AXValue::create().setType(AXValueType::IdrefList);
- axValue->setRelatedNodeArrayValue(relatedNodes);
- return axValue;
-}
-
void fillCoreProperties(AXObject* axObject, PassRefPtr<AXNode> nodeObject)
{
// core properties
@@ -381,9 +281,8 @@ void fillRelationships(AXObject* axObject, PassRefPtr<TypeBuilder::Array<AXPrope
results.clear();
}
-PassRefPtr<AXNode> buildObjectForNode(Node* node, AXObject* axObject, AXObjectCacheImpl* cacheImpl, PassRefPtr<TypeBuilder::Array<AXProperty>> properties)
+PassRefPtr<AXValue> createRoleNameValue(AccessibilityRole role)
{
- AccessibilityRole role = axObject->roleValue();
AtomicString roleName = AXObject::roleName(role);
RefPtr<AXValue> roleNameValue;
if (!roleName.isNull()) {
@@ -391,7 +290,38 @@ PassRefPtr<AXNode> buildObjectForNode(Node* node, AXObject* axObject, AXObjectCa
} else {
roleNameValue = createValue(AXObject::internalRoleName(role), AXValueType::InternalRole);
}
- RefPtr<AXNode> nodeObject = AXNode::create().setNodeId(String::number(axObject->axObjectID())).setRole(roleNameValue).setProperties(properties);
+ return roleNameValue;
+}
+
+PassRefPtr<AXNode> buildObjectForIgnoredNode(Node* node, AXObject* axObject, AXObjectCacheImpl* cacheImpl)
+{
+ AXObject::IgnoredReasons ignoredReasons;
+
+ AXID axID = 0;
+ RefPtr<AXNode> ignoredNodeObject = AXNode::create().setNodeId(String::number(axID)).setIgnored(true);
+ if (axObject) {
+ axObject->computeAccessibilityIsIgnored(&ignoredReasons);
+ axID = axObject->axObjectID();
+ AccessibilityRole role = axObject->roleValue();
+ ignoredNodeObject->setRole(createRoleNameValue(role));
+ } else if (!node->layoutObject()) {
+ ignoredReasons.append(IgnoredReason(AXNotRendered));
+ }
+
+ RefPtr<TypeBuilder::Array<AXProperty>> ignoredReasonProperties = TypeBuilder::Array<AXProperty>::create();
+ for (size_t i = 0; i < ignoredReasons.size(); i++)
+ ignoredReasonProperties->addItem(createProperty(ignoredReasons[i]));
+ ignoredNodeObject->setIgnoredReasons(ignoredReasonProperties);
+
+ return ignoredNodeObject;
+}
+
+PassRefPtr<AXNode> buildObjectForNode(Node* node, AXObject* axObject, AXObjectCacheImpl* cacheImpl, PassRefPtr<TypeBuilder::Array<AXProperty>> properties)
+{
+ AccessibilityRole role = axObject->roleValue();
+ RefPtr<AXNode> nodeObject = AXNode::create().setNodeId(String::number(axObject->axObjectID())).setIgnored(false);
+ nodeObject->setRole(createRoleNameValue(role));
+ nodeObject->setProperties(properties);
String computedName = cacheImpl->computedNameForNode(node);
if (!computedName.isEmpty())
nodeObject->setName(createValue(computedName));
@@ -424,12 +354,15 @@ void InspectorAccessibilityAgent::getAXNode(ErrorString* errorString, int nodeId
Node* node = domAgent->assertNode(errorString, nodeId);
if (!node)
return;
+
Document& document = node->document();
RefPtr<ScopedAXObjectCache> cache(adoptRef(new ScopedAXObjectCache(document)));
AXObjectCacheImpl* cacheImpl = toAXObjectCacheImpl(cache->get());
AXObject* axObject = cacheImpl->getOrCreate(node);
- if (!axObject)
+ if (!axObject || axObject->accessibilityIsIgnored()) {
+ accessibilityNode = buildObjectForIgnoredNode(node, axObject, cacheImpl);
return;
+ }
RefPtr<TypeBuilder::Array<AXProperty>> properties = TypeBuilder::Array<AXProperty>::create();
fillLiveRegionProperties(axObject, properties);
« no previous file with comments | « Source/modules/accessibility/AXObject.cpp ('k') | Source/modules/accessibility/InspectorTypeBuilderHelper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698