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

Unified Diff: Source/modules/accessibility/InspectorTypeBuilderHelper.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
« no previous file with comments | « Source/modules/accessibility/InspectorTypeBuilderHelper.h ('k') | Source/modules/modules.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/accessibility/InspectorTypeBuilderHelper.cpp
diff --git a/Source/modules/accessibility/InspectorTypeBuilderHelper.cpp b/Source/modules/accessibility/InspectorTypeBuilderHelper.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a280294b1e5d17d45f2bc1dd6c4167123885e234
--- /dev/null
+++ b/Source/modules/accessibility/InspectorTypeBuilderHelper.cpp
@@ -0,0 +1,164 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "config.h"
+#include "modules/accessibility/InspectorTypeBuilderHelper.h"
+
+#include "core/InspectorTypeBuilder.h"
+#include "core/dom/DOMNodeIds.h"
+#include "modules/accessibility/AXObject.h"
+#include "modules/accessibility/AXObjectCacheImpl.h"
+
+namespace blink {
+
+using TypeBuilder::Accessibility::AXRelatedNode;
+
+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);
+}
+
+String ignoredReasonName(AXIgnoredReason reason)
+{
+ switch (reason) {
+ case AXActiveModalDialog:
+ return "activeModalDialog";
+ case AXAncestorDisallowsChild:
+ return "ancestorDisallowsChild";
+ case AXAncestorIsLeafNode:
+ return "ancestorIsLeafNode";
+ case AXAriaHidden:
+ return "ariaHidden";
+ case AXAriaHiddenRoot:
+ return "ariaHiddenRoot";
+ case AXEmptyAlt:
+ return "emptyAlt";
+ case AXEmptyText:
+ return "emptyText";
+ case AXInert:
+ return "inert";
+ case AXInheritsPresentation:
+ return "inheritsPresentation";
+ case AXLabelContainer:
+ return "labelContainer";
+ case AXLabelFor:
+ return "labelFor";
+ case AXNotRendered:
+ return "notRendered";
+ case AXNotVisible:
+ return "notVisible";
+ case AXPresentationalRole:
+ return "presentationalRole";
+ case AXProbablyPresentational:
+ return "probablyPresentational";
+ case AXStaticTextUsedAsNameFor:
+ return "staticTextUsedAsNameFor";
+ case AXUninteresting:
+ return "uninteresting";
+ }
+ ASSERT_NOT_REACHED();
+ return "";
+}
+
+PassRefPtr<AXProperty> createProperty(IgnoredReason reason)
+{
+ if (reason.relatedObject)
+ return createProperty(ignoredReasonName(reason.reason), createRelatedNodeValue(reason.relatedObject));
+ return createProperty(ignoredReasonName(reason.reason), createBooleanValue(true));
+}
+
+PassRefPtr<AXValue> createValue(String value, AXValueType::Enum type)
+{
+ RefPtr<AXValue> axValue = AXValue::create().setType(type);
+ axValue->setValue(JSONString::create(value));
+ return axValue;
+}
+
+PassRefPtr<AXValue> createValue(int value, AXValueType::Enum type)
+{
+ RefPtr<AXValue> axValue = AXValue::create().setType(type);
+ axValue->setValue(JSONBasicValue::create(value));
+ return axValue;
+}
+
+PassRefPtr<AXValue> createValue(float value, AXValueType::Enum type)
+{
+ RefPtr<AXValue> axValue = AXValue::create().setType(type);
+ axValue->setValue(JSONBasicValue::create(value));
+ return axValue;
+}
+
+PassRefPtr<AXValue> createBooleanValue(bool value, AXValueType::Enum type)
+{
+ 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;
+}
+
+} // namespace blink
« no previous file with comments | « Source/modules/accessibility/InspectorTypeBuilderHelper.h ('k') | Source/modules/modules.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698