| 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
|
|
|