blob: d1d370b56bfea91215c261a3c5c453c0e00ec296 [file] [log] [blame]
// Copyright 2021 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 "content/browser/accessibility/browser_accessibility_manager_fuchsia.h"
#include "content/browser/accessibility/browser_accessibility_fuchsia.h"
#include "ui/accessibility/platform/fuchsia/accessibility_bridge_fuchsia_registry.h"
namespace content {
// static
BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
const ui::AXTreeUpdate& initial_tree,
BrowserAccessibilityDelegate* delegate) {
return new BrowserAccessibilityManagerFuchsia(initial_tree, delegate);
}
// static
BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
content::BrowserAccessibilityDelegate* delegate) {
return new BrowserAccessibilityManagerFuchsia(
BrowserAccessibilityManagerFuchsia::GetEmptyDocument(), delegate);
}
BrowserAccessibilityManagerFuchsia::BrowserAccessibilityManagerFuchsia(
const ui::AXTreeUpdate& initial_tree,
BrowserAccessibilityDelegate* delegate)
: BrowserAccessibilityManager(delegate) {
Initialize(initial_tree);
}
BrowserAccessibilityManagerFuchsia::~BrowserAccessibilityManagerFuchsia() =
default;
ui::AccessibilityBridgeFuchsia*
BrowserAccessibilityManagerFuchsia::GetAccessibilityBridge() const {
auto* accessibility_bridge_registry =
ui::AccessibilityBridgeFuchsiaRegistry::GetInstance();
DCHECK(accessibility_bridge_registry);
return accessibility_bridge_registry->GetAccessibilityBridge(ax_tree_id());
}
void BrowserAccessibilityManagerFuchsia::FireFocusEvent(
BrowserAccessibility* node) {
BrowserAccessibilityManager::FireFocusEvent(node);
if (!GetAccessibilityBridge())
return;
BrowserAccessibilityFuchsia* new_focus_fuchsia =
ToBrowserAccessibilityFuchsia(node);
BrowserAccessibilityFuchsia* old_focus_fuchsia =
ToBrowserAccessibilityFuchsia(GetLastFocusedNode());
if (old_focus_fuchsia) {
GetAccessibilityBridge()->UnfocusNode(
old_focus_fuchsia->GetFuchsiaNodeID());
}
if (new_focus_fuchsia) {
GetAccessibilityBridge()->FocusNode(new_focus_fuchsia->GetFuchsiaNodeID());
}
}
// static
ui::AXTreeUpdate BrowserAccessibilityManagerFuchsia::GetEmptyDocument() {
ui::AXNodeData empty_document;
empty_document.id = 1;
empty_document.role = ax::mojom::Role::kRootWebArea;
empty_document.AddBoolAttribute(ax::mojom::BoolAttribute::kBusy, true);
ui::AXTreeUpdate update;
update.root_id = empty_document.id;
update.nodes.push_back(empty_document);
return update;
}
} // namespace content