// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ui/accessibility/ax_node_position.h" #include "build/build_config.h" #include "ui/accessibility/ax_enums.mojom.h" #include "ui/base/buildflags.h" namespace ui { // On some platforms, most objects are represented in the text of their parents // with a special "embedded object character" and not with their actual text // contents. Also on the same platforms, if a node has only ignored descendants, // i.e., it appears to be empty to assistive software, we need to treat it as a // character and a word boundary. AXEmbeddedObjectBehavior g_ax_embedded_object_behavior = #if defined(OS_WIN) || BUILDFLAG(USE_ATK) AXEmbeddedObjectBehavior::kExposeCharacter; #else AXEmbeddedObjectBehavior::kSuppressCharacter; #endif // defined(OS_WIN) || BUILDFLAG(USE_ATK) namespace testing { ScopedAXEmbeddedObjectBehaviorSetter::ScopedAXEmbeddedObjectBehaviorSetter( AXEmbeddedObjectBehavior behavior) { prev_behavior_ = g_ax_embedded_object_behavior; g_ax_embedded_object_behavior = behavior; } ScopedAXEmbeddedObjectBehaviorSetter::~ScopedAXEmbeddedObjectBehaviorSetter() { g_ax_embedded_object_behavior = prev_behavior_; } } // namespace testing // static AXNodePosition::AXPositionInstance AXNodePosition::CreatePosition( const AXNode& node, int child_index_or_text_offset, ax::mojom::TextAffinity affinity) { if (!node.tree()) return CreateNullPosition(); AXTreeID tree_id = node.tree()->GetAXTreeID(); if (node.IsLeaf()) { return CreateTextPosition(tree_id, node.id(), child_index_or_text_offset, affinity); } return CreateTreePosition(tree_id, node.id(), child_index_or_text_offset); } AXNodePosition::AXNodePosition() = default; AXNodePosition::~AXNodePosition() = default; AXNodePosition::AXNodePosition(const AXNodePosition& other) : AXPosition(other) {} AXNodePosition::AXPositionInstance AXNodePosition::Clone() const { return AXPositionInstance(new AXNodePosition(*this)); } } // namespace ui