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