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

Side by Side Diff: third_party/WebKit/Source/modules/accessibility/InspectorAccessibilityAgent.cpp

Issue 2589273002: Add sparse accessibility attribute interface to Blink (Closed)
Patch Set: Try to fix win component build compile Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/accessibility/InspectorAccessibilityAgent.h" 5 #include "modules/accessibility/InspectorAccessibilityAgent.h"
6 6
7 #include "core/HTMLNames.h" 7 #include "core/HTMLNames.h"
8 #include "core/dom/AXObjectCache.h" 8 #include "core/dom/AXObjectCache.h"
9 #include "core/dom/DOMNodeIds.h" 9 #include "core/dom/DOMNodeIds.h"
10 #include "core/dom/Element.h" 10 #include "core/dom/Element.h"
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 const String& key, 320 const String& key,
321 AXObject::AXObjectVector& nodes, 321 AXObject::AXObjectVector& nodes,
322 const QualifiedName& attr, 322 const QualifiedName& attr,
323 AXObject& axObject) { 323 AXObject& axObject) {
324 std::unique_ptr<AXValue> nodeListValue = createRelatedNodeListValue(nodes); 324 std::unique_ptr<AXValue> nodeListValue = createRelatedNodeListValue(nodes);
325 const AtomicString& attrValue = axObject.getAttribute(attr); 325 const AtomicString& attrValue = axObject.getAttribute(attr);
326 nodeListValue->setValue(protocol::StringValue::create(attrValue)); 326 nodeListValue->setValue(protocol::StringValue::create(attrValue));
327 return createProperty(key, std::move(nodeListValue)); 327 return createProperty(key, std::move(nodeListValue));
328 } 328 }
329 329
330 class SparseAttributeAXPropertyAdapter
331 : public GarbageCollected<SparseAttributeAXPropertyAdapter>,
332 public AXSparseAttributeMap {
333 public:
334 SparseAttributeAXPropertyAdapter(AXObject& axObject,
335 protocol::Array<AXProperty>& properties)
336 : m_axObject(&axObject), m_properties(properties) {}
337
338 DEFINE_INLINE_TRACE() { visitor->trace(m_axObject); }
339
340 private:
341 Member<AXObject> m_axObject;
342 protocol::Array<AXProperty>& m_properties;
343
344 void addBoolAttribute(AXBoolAttribute attribute, bool value) {
345 switch (attribute) {
346 case AXBoolAttribute::AriaModal:
347 // TODO
348 break;
349 }
350 }
351
352 void addStringAttribute(AXStringAttribute attribute, const String& value) {
353 switch (attribute) {
354 case AXStringAttribute::AriaKeyShortcuts:
355 // TODO
356 break;
357 case AXStringAttribute::AriaRoleDescription:
358 // TODO
359 break;
360 }
361 }
362
363 void addObjectAttribute(AXObjectAttribute attribute, AXObject* object) {
364 switch (attribute) {
365 case AXObjectAttribute::AriaActiveDescendant:
366 m_properties.addItem(
367 createProperty(AXRelationshipAttributesEnum::Activedescendant,
368 createRelatedNodeListValue(*object)));
369 break;
370 case AXObjectAttribute::AriaErrorMessage:
371 // TODO
372 break;
373 }
374 }
375
376 void addObjectVectorAttribute(AXObjectVectorAttribute attribute,
377 HeapVector<Member<AXObject>>& objects) {
378 switch (attribute) {
379 case AXObjectVectorAttribute::AriaControls:
380 m_properties.addItem(createRelatedNodeListProperty(
381 AXRelationshipAttributesEnum::Controls, objects, aria_controlsAttr,
382 *m_axObject));
383 break;
384 case AXObjectVectorAttribute::AriaDetails:
385 // TODO
386 break;
387 case AXObjectVectorAttribute::AriaFlowTo:
388 m_properties.addItem(createRelatedNodeListProperty(
389 AXRelationshipAttributesEnum::Flowto, objects, aria_flowtoAttr,
390 *m_axObject));
391 break;
392 }
393 }
394 };
395
330 void fillRelationships(AXObject& axObject, 396 void fillRelationships(AXObject& axObject,
331 protocol::Array<AXProperty>& properties) { 397 protocol::Array<AXProperty>& properties) {
332 if (AXObject* activeDescendant = axObject.activeDescendant()) {
333 properties.addItem(
334 createProperty(AXRelationshipAttributesEnum::Activedescendant,
335 createRelatedNodeListValue(*activeDescendant)));
336 }
337
338 AXObject::AXObjectVector results; 398 AXObject::AXObjectVector results;
339 axObject.ariaFlowToElements(results);
340 if (!results.isEmpty())
341 properties.addItem(
342 createRelatedNodeListProperty(AXRelationshipAttributesEnum::Flowto,
343 results, aria_flowtoAttr, axObject));
344 results.clear();
345
346 axObject.ariaControlsElements(results);
347 if (!results.isEmpty())
348 properties.addItem(
349 createRelatedNodeListProperty(AXRelationshipAttributesEnum::Controls,
350 results, aria_controlsAttr, axObject));
351 results.clear();
352
353 axObject.ariaDescribedbyElements(results); 399 axObject.ariaDescribedbyElements(results);
354 if (!results.isEmpty()) 400 if (!results.isEmpty())
355 properties.addItem( 401 properties.addItem(
356 createRelatedNodeListProperty(AXRelationshipAttributesEnum::Describedby, 402 createRelatedNodeListProperty(AXRelationshipAttributesEnum::Describedby,
357 results, aria_describedbyAttr, axObject)); 403 results, aria_describedbyAttr, axObject));
358 results.clear(); 404 results.clear();
359 405
360 axObject.ariaOwnsElements(results); 406 axObject.ariaOwnsElements(results);
361 if (!results.isEmpty()) 407 if (!results.isEmpty())
362 properties.addItem(createRelatedNodeListProperty( 408 properties.addItem(createRelatedNodeListProperty(
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 nodeObject->setRole(createRoleNameValue(role)); 661 nodeObject->setRole(createRoleNameValue(role));
616 662
617 std::unique_ptr<protocol::Array<AXProperty>> properties = 663 std::unique_ptr<protocol::Array<AXProperty>> properties =
618 protocol::Array<AXProperty>::create(); 664 protocol::Array<AXProperty>::create();
619 fillLiveRegionProperties(axObject, *(properties.get())); 665 fillLiveRegionProperties(axObject, *(properties.get()));
620 fillGlobalStates(axObject, *(properties.get())); 666 fillGlobalStates(axObject, *(properties.get()));
621 fillWidgetProperties(axObject, *(properties.get())); 667 fillWidgetProperties(axObject, *(properties.get()));
622 fillWidgetStates(axObject, *(properties.get())); 668 fillWidgetStates(axObject, *(properties.get()));
623 fillRelationships(axObject, *(properties.get())); 669 fillRelationships(axObject, *(properties.get()));
624 670
671 Member<SparseAttributeAXPropertyAdapter> adapter =
672 new SparseAttributeAXPropertyAdapter(axObject, *(properties.get()));
673 axObject.getSparseAXAttributes(*adapter.get());
674
625 AXObject::NameSources nameSources; 675 AXObject::NameSources nameSources;
626 String computedName = axObject.name(&nameSources); 676 String computedName = axObject.name(&nameSources);
627 if (!nameSources.isEmpty()) { 677 if (!nameSources.isEmpty()) {
628 std::unique_ptr<AXValue> name = 678 std::unique_ptr<AXValue> name =
629 createValue(computedName, AXValueTypeEnum::ComputedString); 679 createValue(computedName, AXValueTypeEnum::ComputedString);
630 if (!nameSources.isEmpty()) { 680 if (!nameSources.isEmpty()) {
631 std::unique_ptr<protocol::Array<AXValueSource>> nameSourceProperties = 681 std::unique_ptr<protocol::Array<AXValueSource>> nameSourceProperties =
632 protocol::Array<AXValueSource>::create(); 682 protocol::Array<AXValueSource>::create();
633 for (size_t i = 0; i < nameSources.size(); ++i) { 683 for (size_t i = 0; i < nameSources.size(); ++i) {
634 NameSource& nameSource = nameSources[i]; 684 NameSource& nameSource = nameSources[i];
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
784 } 834 }
785 } 835 }
786 836
787 DEFINE_TRACE(InspectorAccessibilityAgent) { 837 DEFINE_TRACE(InspectorAccessibilityAgent) {
788 visitor->trace(m_page); 838 visitor->trace(m_page);
789 visitor->trace(m_domAgent); 839 visitor->trace(m_domAgent);
790 InspectorBaseAgent::trace(visitor); 840 InspectorBaseAgent::trace(visitor);
791 } 841 }
792 842
793 } // namespace blink 843 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698