1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ui/accessibility/platform/browser_accessibility_manager_ios.h"
#import <UIKit/UIKit.h>
#include "base/apple/foundation_util.h"
namespace ui {
// static
BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
const AXTreeUpdate& initial_tree,
AXNodeIdDelegate& node_id_delegate,
AXPlatformTreeManagerDelegate* delegate) {
return new BrowserAccessibilityManagerIOS(initial_tree, node_id_delegate,
delegate);
}
// static
BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
AXNodeIdDelegate& node_id_delegate,
AXPlatformTreeManagerDelegate* delegate) {
return new BrowserAccessibilityManagerIOS(
BrowserAccessibilityManagerIOS::GetEmptyDocument(), node_id_delegate,
delegate);
}
BrowserAccessibilityManagerIOS*
BrowserAccessibilityManager::ToBrowserAccessibilityManagerIOS() {
return static_cast<BrowserAccessibilityManagerIOS*>(this);
}
BrowserAccessibilityManagerIOS::BrowserAccessibilityManagerIOS(
const AXTreeUpdate& initial_tree,
AXNodeIdDelegate& node_id_delegate,
AXPlatformTreeManagerDelegate* delegate)
: BrowserAccessibilityManager(node_id_delegate, delegate) {
Initialize(initial_tree);
}
BrowserAccessibilityManagerIOS::~BrowserAccessibilityManagerIOS() = default;
// static
AXTreeUpdate BrowserAccessibilityManagerIOS::GetEmptyDocument() {
AXNodeData empty_document;
empty_document.id = kInitialEmptyDocumentRootNodeID;
empty_document.role = ax::mojom::Role::kRootWebArea;
AXTreeUpdate update;
update.root_id = empty_document.id;
update.nodes.push_back(empty_document);
return update;
}
void BrowserAccessibilityManagerIOS::OnAtomicUpdateFinished(
AXTree* tree,
bool root_changed,
const std::vector<Change>& changes) {
BrowserAccessibilityManager::OnAtomicUpdateFinished(tree, root_changed,
changes);
BrowserAccessibility* root = GetBrowserAccessibilityRoot();
if (!root) {
return;
}
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification,
root->GetNativeViewAccessible().Get());
}
gfx::Rect BrowserAccessibilityManagerIOS::GetViewBoundsInScreenCoordinates()
const {
AXPlatformTreeManagerDelegate* delegate = GetDelegateFromRootManager();
if (!delegate) {
return gfx::Rect();
}
UIView* view = base::apple::ObjCCast<UIView>(
delegate->AccessibilityGetNativeViewAccessible().Get());
if (!view) {
return gfx::Rect();
}
gfx::Rect bounds = delegate->AccessibilityGetViewBounds();
bounds = gfx::Rect(
UIAccessibilityConvertFrameToScreenCoordinates(bounds.ToCGRect(), view));
return ScaleToEnclosingRect(bounds, device_scale_factor());
}
} // namespace ui
|