| 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 AXPresentationalRole: |
| 78 return "presentationalRole"; |
| 79 case AXProbablyPresentational: |
| 80 return "probablyPresentational"; |
| 81 case AXStaticTextUsedAsNameFor: |
| 82 return "staticTextUsedAsNameFor"; |
| 83 case AXUninteresting: |
| 84 return "uninteresting"; |
| 85 } |
| 86 ASSERT_NOT_REACHED(); |
| 87 return ""; |
| 88 } |
| 89 |
| 90 PassRefPtr<AXProperty> createProperty(IgnoredReason reason) |
| 91 { |
| 92 if (reason.relatedObject) |
| 93 return createProperty(ignoredReasonName(reason.reason), createRelatedNod
eValue(reason.relatedObject)); |
| 94 return createProperty(ignoredReasonName(reason.reason), createBooleanValue(t
rue)); |
| 95 } |
| 96 |
| 97 PassRefPtr<AXValue> createValue(String value, AXValueType::Enum type) |
| 98 { |
| 99 RefPtr<AXValue> axValue = AXValue::create().setType(type); |
| 100 axValue->setValue(JSONString::create(value)); |
| 101 return axValue; |
| 102 } |
| 103 |
| 104 PassRefPtr<AXValue> createValue(int value, AXValueType::Enum type) |
| 105 { |
| 106 RefPtr<AXValue> axValue = AXValue::create().setType(type); |
| 107 axValue->setValue(JSONBasicValue::create(value)); |
| 108 return axValue; |
| 109 } |
| 110 |
| 111 PassRefPtr<AXValue> createValue(float value, AXValueType::Enum type) |
| 112 { |
| 113 RefPtr<AXValue> axValue = AXValue::create().setType(type); |
| 114 axValue->setValue(JSONBasicValue::create(value)); |
| 115 return axValue; |
| 116 } |
| 117 |
| 118 PassRefPtr<AXValue> createBooleanValue(bool value, AXValueType::Enum type) |
| 119 { |
| 120 RefPtr<AXValue> axValue = AXValue::create().setType(type); |
| 121 axValue->setValue(JSONBasicValue::create(value)); |
| 122 return axValue; |
| 123 } |
| 124 |
| 125 PassRefPtr<AXRelatedNode> relatedNodeForAXObject(const AXObject* axObject) |
| 126 { |
| 127 Node* node = axObject->node(); |
| 128 if (!node) |
| 129 return PassRefPtr<AXRelatedNode>(); |
| 130 int backendNodeId = DOMNodeIds::idForNode(node); |
| 131 if (!backendNodeId) |
| 132 return PassRefPtr<AXRelatedNode>(); |
| 133 RefPtr<AXRelatedNode> relatedNode = AXRelatedNode::create().setBackendNodeId
(backendNodeId); |
| 134 if (!node->isElementNode()) |
| 135 return relatedNode; |
| 136 |
| 137 Element* element = toElement(node); |
| 138 const AtomicString& idref = element->getIdAttribute(); |
| 139 if (!idref.isEmpty()) |
| 140 relatedNode->setIdref(idref); |
| 141 return relatedNode; |
| 142 } |
| 143 |
| 144 PassRefPtr<AXValue> createRelatedNodeValue(const AXObject* axObject) |
| 145 { |
| 146 RefPtr<AXValue> axValue = AXValue::create().setType(AXValueType::Idref); |
| 147 RefPtr<AXRelatedNode> relatedNode = relatedNodeForAXObject(axObject); |
| 148 axValue->setRelatedNodeValue(relatedNode); |
| 149 return axValue; |
| 150 } |
| 151 |
| 152 PassRefPtr<AXValue> createRelatedNodeListValue(AXObject::AccessibilityChildrenVe
ctor axObjects) |
| 153 { |
| 154 RefPtr<TypeBuilder::Array<AXRelatedNode>> relatedNodes = TypeBuilder::Array<
AXRelatedNode>::create(); |
| 155 for (unsigned i = 0; i < axObjects.size(); i++) { |
| 156 if (RefPtr<AXRelatedNode> relatedNode = relatedNodeForAXObject(axObjects
[i].get())) |
| 157 relatedNodes->addItem(relatedNode); |
| 158 } |
| 159 RefPtr<AXValue> axValue = AXValue::create().setType(AXValueType::IdrefList); |
| 160 axValue->setRelatedNodeArrayValue(relatedNodes); |
| 161 return axValue; |
| 162 } |
| 163 |
| 164 } // namespace blink |
| OLD | NEW |