1 // Copyright 2017 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 "third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h"
6 #include "third_party/blink/renderer/modules/accessibility/ax_virtual_object.h"
7 
8 namespace blink {
9 
AXVirtualObject(AXObjectCacheImpl & axObjectCache,AccessibleNode * accessible_node)10 AXVirtualObject::AXVirtualObject(AXObjectCacheImpl& axObjectCache,
11                                  AccessibleNode* accessible_node)
12     : AXObject(axObjectCache), accessible_node_(accessible_node) {
13 }
14 
15 AXVirtualObject::~AXVirtualObject() = default;
16 
Detach()17 void AXVirtualObject::Detach() {
18   AXObject::Detach();
19 
20   accessible_node_ = nullptr;
21 }
22 
ComputeAccessibilityIsIgnored(IgnoredReasons * ignoredReasons) const23 bool AXVirtualObject::ComputeAccessibilityIsIgnored(
24     IgnoredReasons* ignoredReasons) const {
25   return AccessibilityIsIgnoredByDefault(ignoredReasons);
26 }
27 
AddChildren()28 void AXVirtualObject::AddChildren() {
29   if (!accessible_node_)
30     return;
31 
32   for (const auto& child : accessible_node_->GetChildren())
33     children_.push_back(AXObjectCache().GetOrCreate(child));
34 }
35 
ChildrenChanged()36 void AXVirtualObject::ChildrenChanged() {
37   ClearChildren();
38   AXObjectCache().PostNotification(this, ax::mojom::Event::kChildrenChanged);
39 }
40 
GetAOMPropertyOrARIAAttribute(AOMStringProperty property) const41 const AtomicString& AXVirtualObject::GetAOMPropertyOrARIAAttribute(
42     AOMStringProperty property) const {
43   if (!accessible_node_)
44     return g_null_atom;
45 
46   return accessible_node_->GetProperty(property);
47 }
48 
HasAOMPropertyOrARIAAttribute(AOMBooleanProperty property,bool & result) const49 bool AXVirtualObject::HasAOMPropertyOrARIAAttribute(AOMBooleanProperty property,
50                                                     bool& result) const {
51   if (!accessible_node_)
52     return false;
53 
54   bool is_null = true;
55   result = accessible_node_->GetProperty(property, is_null);
56   return !is_null;
57 }
58 
GetAccessibleNode() const59 AccessibleNode* AXVirtualObject::GetAccessibleNode() const {
60   return accessible_node_;
61 }
62 
TextAlternative(bool recursive,bool in_aria_labelled_by_traversal,AXObjectSet & visited,ax::mojom::NameFrom & name_from,AXRelatedObjectVector * related_objects,NameSources * name_sources) const63 String AXVirtualObject::TextAlternative(bool recursive,
64                                         bool in_aria_labelled_by_traversal,
65                                         AXObjectSet& visited,
66                                         ax::mojom::NameFrom& name_from,
67                                         AXRelatedObjectVector* related_objects,
68                                         NameSources* name_sources) const {
69   if (!accessible_node_)
70     return String();
71 
72   bool found_text_alternative = false;
73   return AriaTextAlternative(recursive, in_aria_labelled_by_traversal, visited,
74                              name_from, related_objects, name_sources,
75                              &found_text_alternative);
76 }
77 
Trace(Visitor * visitor)78 void AXVirtualObject::Trace(Visitor* visitor) {
79   visitor->Trace(accessible_node_);
80   AXObject::Trace(visitor);
81 }
82 
83 }  // namespace blink
84