// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "content/browser/accessibility/browser_accessibility.h" #include #include #include "base/containers/contains.h" #include "base/logging.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "content/browser/accessibility/browser_accessibility_manager.h" #include "content/browser/accessibility/browser_accessibility_state_impl.h" #include "content/browser/accessibility/web_ax_platform_tree_manager_delegate.h" #include "content/common/ax_serialization_utils.h" #include "content/public/common/content_client.h" #include "third_party/blink/public/strings/grit/blink_accessibility_strings.h" #include "ui/accessibility/ax_enums.mojom.h" #include "ui/accessibility/ax_role_properties.h" #include "ui/accessibility/ax_selection.h" #include "ui/accessibility/ax_tree_id.h" #include "ui/accessibility/platform/ax_unique_id.h" #include "ui/base/buildflags.h" #include "ui/gfx/geometry/rect_conversions.h" #include "ui/gfx/geometry/rect_f.h" #include "ui/strings/grit/ax_strings.h" namespace content { #if !BUILDFLAG(HAS_PLATFORM_ACCESSIBILITY_SUPPORT) // static std::unique_ptr BrowserAccessibility::Create( BrowserAccessibilityManager* manager, ui::AXNode* node) { return std::unique_ptr( new BrowserAccessibility(manager, node)); } #endif // !BUILDFLAG(HAS_PLATFORM_ACCESSIBILITY_SUPPORT) // static BrowserAccessibility* BrowserAccessibility::FromAXPlatformNodeDelegate( ui::AXPlatformNodeDelegate* delegate) { if (!delegate || !delegate->IsWebContent()) return nullptr; return static_cast(delegate); } BrowserAccessibility::BrowserAccessibility(BrowserAccessibilityManager* manager, ui::AXNode* node) : AXPlatformNodeDelegate(node), manager_(manager) { DCHECK(manager); DCHECK(node); DCHECK(node->IsDataValid()); } BrowserAccessibility::~BrowserAccessibility() = default; namespace { // Get the native text field's deepest container; the lowest descendant that // contains all its text. Returns nullptr if the text field is empty, or if it // is not a native text field (input or textarea). BrowserAccessibility* GetTextFieldInnerEditorElement( const BrowserAccessibility& text_field) { ui::AXNode* text_container = text_field.node()->GetTextFieldInnerEditorElement(); return text_field.manager()->GetFromAXNode(text_container); } } // namespace bool BrowserAccessibility::IsValid() const { // Currently we only perform validity checks on non-empty, atomic text fields. // An atomic text field does not expose its internal implementation to // assistive software, appearing as a single leaf node in the accessibility // tree. It includes ,