| OLD | NEW |
| (Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "config.h" |
| 6 #include "modules/accessibility/InspectorTypeBuilderHelper.h" |
| 7 |
| 8 #include "core/InspectorTypeBuilder.h" |
| 9 #include "core/dom/DOMNodeIds.h" |
| 10 #include "modules/accessibility/AXObject.h" |
| 11 #include "modules/accessibility/AXObjectCacheImpl.h" |
| 12 |
| 13 namespace blink { |
| 14 |
| 15 using TypeBuilder::Accessibility::AXRelatedNode; |
| 16 |
| 17 PassRefPtr<AXProperty> createProperty(String name, PassRefPtr<AXValue> value) |
| 18 { |
| 19 RefPtr<AXProperty> property = AXProperty::create().setName(name).setValue(va
lue); |
| 20 return property; |
| 21 } |
| 22 |
| 23 PassRefPtr<AXProperty> createProperty(AXGlobalStates::Enum name, PassRefPtr<AXVa
lue> value) |
| 24 { |
| 25 return createProperty(TypeBuilder::getEnumConstantValue(name), value); |
| 26 } |
| 27 |
| 28 PassRefPtr<AXProperty> createProperty(AXLiveRegionAttributes::Enum name, PassRef
Ptr<AXValue> value) |
| 29 { |
| 30 return createProperty(TypeBuilder::getEnumConstantValue(name), value); |
| 31 } |
| 32 |
| 33 PassRefPtr<AXProperty> createProperty(AXRelationshipAttributes::Enum name, PassR
efPtr<AXValue> value) |
| 34 { |
| 35 return createProperty(TypeBuilder::getEnumConstantValue(name), value); |
| 36 } |
| 37 |
| 38 PassRefPtr<AXProperty> createProperty(AXWidgetAttributes::Enum name, PassRefPtr<
AXValue> value) |
| 39 { |
| 40 return createProperty(TypeBuilder::getEnumConstantValue(name), value); |
| 41 } |
| 42 |
| 43 PassRefPtr<AXProperty> createProperty(AXWidgetStates::Enum name, PassRefPtr<AXVa
lue> value) |
| 44 { |
| 45 return createProperty(TypeBuilder::getEnumConstantValue(name), value); |
| 46 } |
| 47 |
| 48 String ignoredReasonName(AXIgnoredReason reason) |
| 49 { |
| 50 switch (reason) { |
| 51 case AXActiveModalDialog: |
| 52 return "activeModalDialog"; |
| 53 case AXAncestorDisallowsChild: |
| 54 return "ancestorDisallowsChild"; |
| 55 case AXAncestorIsLeafNode: |
| 56 return "ancestorIsLeafNode"; |
| 57 case AXAriaHidden: |
| 58 return "ariaHidden"; |
| 59 case AXAriaHiddenRoot: |
| 60 return "ariaHiddenRoot"; |
| 61 case AXEmptyAlt: |
| 62 return "emptyAlt"; |
| 63 case AXEmptyText: |
| 64 return "emptyText"; |
| 65 case AXInert: |
| 66 return "inert"; |
| 67 case AXInheritsPresentation: |
| 68 return "inheritsPresentation"; |
| 69 case AXLabelContainer: |
| 70 return "labelContainer"; |
| 71 case AXLabelFor: |
| 72 return "labelFor"; |
| 73 case AXNotRendered: |
| 74 return "notRendered"; |
| 75 case AXNotVisible: |
| 76 return "notVisible"; |
| 77 case AXProbablyPresentational: |
| 78 return "probablyPresentational"; |
| 79 case AXStaticTextUsedAsNameFor: |
| 80 return "staticTextUsedAsNameFor"; |
| 81 case AXUninteresting: |
| 82 return "uninteresting"; |
| 83 } |
| 84 } |
| 85 |
| 86 PassRefPtr<AXProperty> createProperty(IgnoredReason reason) |
| 87 { |
| 88 if (reason.relatedObject) |
| 89 return createProperty(ignoredReasonName(reason.reason), createRelatedNod
eValue(reason.relatedObject)); |
| 90 return createProperty(ignoredReasonName(reason.reason), createBooleanValue(t
rue)); |
| 91 } |
| 92 |
| 93 PassRefPtr<AXValue> createValue(String value, AXValueType::Enum type) |
| 94 { |
| 95 RefPtr<AXValue> axValue = AXValue::create().setType(type); |
| 96 axValue->setValue(JSONString::create(value)); |
| 97 return axValue; |
| 98 } |
| 99 |
| 100 PassRefPtr<AXValue> createValue(int value, AXValueType::Enum type) |
| 101 { |
| 102 RefPtr<AXValue> axValue = AXValue::create().setType(type); |
| 103 axValue->setValue(JSONBasicValue::create(value)); |
| 104 return axValue; |
| 105 } |
| 106 |
| 107 PassRefPtr<AXValue> createValue(float value, AXValueType::Enum type) |
| 108 { |
| 109 RefPtr<AXValue> axValue = AXValue::create().setType(type); |
| 110 axValue->setValue(JSONBasicValue::create(value)); |
| 111 return axValue; |
| 112 } |
| 113 |
| 114 PassRefPtr<AXValue> createBooleanValue(bool value, AXValueType::Enum type) |
| 115 { |
| 116 RefPtr<AXValue> axValue = AXValue::create().setType(type); |
| 117 axValue->setValue(JSONBasicValue::create(value)); |
| 118 return axValue; |
| 119 } |
| 120 |
| 121 PassRefPtr<AXRelatedNode> relatedNodeForAXObject(const AXObject* axObject) |
| 122 { |
| 123 Node* node = axObject->node(); |
| 124 if (!node) |
| 125 return PassRefPtr<AXRelatedNode>(); |
| 126 int backendNodeId = DOMNodeIds::idForNode(node); |
| 127 if (!backendNodeId) |
| 128 return PassRefPtr<AXRelatedNode>(); |
| 129 RefPtr<AXRelatedNode> relatedNode = AXRelatedNode::create().setBackendNodeId
(backendNodeId); |
| 130 if (!node->isElementNode()) |
| 131 return relatedNode; |
| 132 |
| 133 Element* element = toElement(node); |
| 134 const AtomicString& idref = element->getIdAttribute(); |
| 135 if (!idref.isEmpty()) |
| 136 relatedNode->setIdref(idref); |
| 137 return relatedNode; |
| 138 } |
| 139 |
| 140 PassRefPtr<AXValue> createRelatedNodeValue(const AXObject* axObject) |
| 141 { |
| 142 RefPtr<AXValue> axValue = AXValue::create().setType(AXValueType::Idref); |
| 143 RefPtr<AXRelatedNode> relatedNode = relatedNodeForAXObject(axObject); |
| 144 axValue->setRelatedNodeValue(relatedNode); |
| 145 return axValue; |
| 146 } |
| 147 |
| 148 PassRefPtr<AXValue> createRelatedNodeListValue(AXObject::AccessibilityChildrenVe
ctor axObjects) |
| 149 { |
| 150 RefPtr<TypeBuilder::Array<AXRelatedNode>> relatedNodes = TypeBuilder::Array<
AXRelatedNode>::create(); |
| 151 for (unsigned i = 0; i < axObjects.size(); i++) { |
| 152 if (RefPtr<AXRelatedNode> relatedNode = relatedNodeForAXObject(axObjects
[i].get())) |
| 153 relatedNodes->addItem(relatedNode); |
| 154 } |
| 155 RefPtr<AXValue> axValue = AXValue::create().setType(AXValueType::IdrefList); |
| 156 axValue->setRelatedNodeArrayValue(relatedNodes); |
| 157 return axValue; |
| 158 } |
| 159 |
| 160 } // namespace blink |
| OLD | NEW |