[Windows] Remove accessibility bridge helpers from the engine (flutter/engine#43710)

The ownership of the accessibility bridge was moved from `FlutterWindowsEngine` to `FlutterWindowsView`. This change moves leftover accessibility bridge helpers/logic from the engine to the view.

Addresses: https://github.com/flutter/flutter/issues/124995
Follow-up to: https://github.com/flutter/engine/pull/41308

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
This commit is contained in:
Loïc Sharma
2023-07-17 14:06:15 -07:00
committed by GitHub
parent 5c61353b89
commit 127e10cfcf
5 changed files with 27 additions and 39 deletions

View File

@@ -178,9 +178,9 @@ ui::AXNode* AXNodeFromID(std::shared_ptr<AccessibilityBridge> bridge,
}
std::shared_ptr<AccessibilityBridgeWindowsSpy> GetAccessibilityBridgeSpy(
FlutterWindowsEngine* engine) {
FlutterWindowsView& view) {
return std::static_pointer_cast<AccessibilityBridgeWindowsSpy>(
engine->accessibility_bridge().lock());
view.accessibility_bridge().lock());
}
void ExpectWinEventFromAXEvent(int32_t node_id,
@@ -192,7 +192,7 @@ void ExpectWinEventFromAXEvent(int32_t node_id,
view.SetEngine(GetTestEngine());
view.OnUpdateSemanticsEnabled(true);
auto bridge = GetAccessibilityBridgeSpy(view.GetEngine());
auto bridge = GetAccessibilityBridgeSpy(view);
PopulateAXTree(bridge);
bridge->ResetRecords();
@@ -212,7 +212,7 @@ void ExpectWinEventFromAXEventOnFocusNode(int32_t node_id,
view.SetEngine(GetTestEngine());
view.OnUpdateSemanticsEnabled(true);
auto bridge = GetAccessibilityBridgeSpy(view.GetEngine());
auto bridge = GetAccessibilityBridgeSpy(view);
PopulateAXTree(bridge);
bridge->ResetRecords();
@@ -237,7 +237,7 @@ TEST(AccessibilityBridgeWindows, GetParent) {
view.SetEngine(GetTestEngine());
view.OnUpdateSemanticsEnabled(true);
auto bridge = view.GetEngine()->accessibility_bridge().lock();
auto bridge = view.accessibility_bridge().lock();
PopulateAXTree(bridge);
auto node0_delegate = bridge->GetFlutterPlatformNodeDelegateFromID(0).lock();
@@ -253,7 +253,7 @@ TEST(AccessibilityBridgeWindows, GetParentOnRootRetunsNullptr) {
view.SetEngine(GetTestEngine());
view.OnUpdateSemanticsEnabled(true);
auto bridge = view.GetEngine()->accessibility_bridge().lock();
auto bridge = view.accessibility_bridge().lock();
PopulateAXTree(bridge);
auto node0_delegate = bridge->GetFlutterPlatformNodeDelegateFromID(0).lock();
@@ -267,7 +267,7 @@ TEST(AccessibilityBridgeWindows, DispatchAccessibilityAction) {
view.SetEngine(GetTestEngine());
view.OnUpdateSemanticsEnabled(true);
auto bridge = view.GetEngine()->accessibility_bridge().lock();
auto bridge = view.accessibility_bridge().lock();
PopulateAXTree(bridge);
FlutterSemanticsAction actual_action = kFlutterSemanticsActionTap;
@@ -303,7 +303,7 @@ TEST(AccessibilityBridgeWindows, OnAccessibilityEventFocusChanged) {
view.SetEngine(GetTestEngine());
view.OnUpdateSemanticsEnabled(true);
auto bridge = GetAccessibilityBridgeSpy(view.GetEngine());
auto bridge = GetAccessibilityBridgeSpy(view);
PopulateAXTree(bridge);
bridge->ResetRecords();

View File

@@ -345,7 +345,12 @@ bool FlutterWindowsEngine::Run(std::string_view entrypoint) {
args.update_semantics_callback2 = [](const FlutterSemanticsUpdate2* update,
void* user_data) {
auto host = static_cast<FlutterWindowsEngine*>(user_data);
auto accessibility_bridge = host->accessibility_bridge().lock();
auto view = host->view();
if (!view) {
return;
}
auto accessibility_bridge = view->accessibility_bridge().lock();
if (!accessibility_bridge) {
return;
}
@@ -704,15 +709,6 @@ void FlutterWindowsEngine::OnPreEngineRestart() {
}
}
gfx::NativeViewAccessible FlutterWindowsEngine::GetNativeViewAccessible() {
auto bridge = accessibility_bridge().lock();
if (!bridge) {
return nullptr;
}
return bridge->GetChildOfAXFragmentRoot();
}
std::string FlutterWindowsEngine::GetExecutableName() const {
std::pair<bool, std::string> result = fml::paths::GetExecutablePath();
if (result.first) {
@@ -792,11 +788,6 @@ void FlutterWindowsEngine::OnQuit(std::optional<HWND> hwnd,
lifecycle_manager_->Quit(hwnd, wparam, lparam, exit_code);
}
std::weak_ptr<AccessibilityBridgeWindows>
FlutterWindowsEngine::accessibility_bridge() {
return view_->accessibility_bridge();
}
void FlutterWindowsEngine::OnDwmCompositionChanged() {
view_->OnDwmCompositionChanged();
}

View File

@@ -141,9 +141,6 @@ class FlutterWindowsEngine {
// rendering using software instead of OpenGL.
AngleSurfaceManager* surface_manager() { return surface_manager_.get(); }
// Return the AccessibilityBridgeWindows for this engine's view.
std::weak_ptr<AccessibilityBridgeWindows> accessibility_bridge();
WindowProcDelegateManager* window_proc_delegate_manager() {
return window_proc_delegate_manager_.get();
}
@@ -227,10 +224,6 @@ class FlutterWindowsEngine {
// Returns true if the high contrast feature is enabled.
bool high_contrast_enabled() const { return high_contrast_enabled_; }
// Returns the native accessibility root node, or nullptr if one does not
// exist.
gfx::NativeViewAccessible GetNativeViewAccessible();
// Register a root isolate create callback.
//
// The root isolate create callback is invoked at creation of the root Dart

View File

@@ -253,7 +253,11 @@ void FlutterWindowsView::OnUpdateSemanticsEnabled(bool enabled) {
}
gfx::NativeViewAccessible FlutterWindowsView::GetNativeViewAccessible() {
return engine_->GetNativeViewAccessible();
if (!accessibility_bridge_) {
return nullptr;
}
return accessibility_bridge_->GetChildOfAXFragmentRoot();
}
void FlutterWindowsView::OnCursorRectUpdated(const Rect& rect) {
@@ -639,7 +643,7 @@ void FlutterWindowsView::NotifyWinEventWrapper(ui::AXPlatformNodeWin* node,
}
ui::AXFragmentRootDelegateWin* FlutterWindowsView::GetAxFragmentRootDelegate() {
return engine_->accessibility_bridge().lock().get();
return accessibility_bridge_.get();
}
ui::AXPlatformNodeWin* FlutterWindowsView::AlertNode() const {

View File

@@ -212,7 +212,7 @@ TEST(FlutterWindowsViewTest, AddSemanticsNodeUpdate) {
// Enable semantics to instantiate accessibility bridge.
view.OnUpdateSemanticsEnabled(true);
auto bridge = view.GetEngine()->accessibility_bridge().lock();
auto bridge = view.accessibility_bridge().lock();
ASSERT_TRUE(bridge);
// Add root node.
@@ -311,7 +311,7 @@ TEST(FlutterWindowsViewTest, AddSemanticsNodeUpdateWithChildren) {
// Enable semantics to instantiate accessibility bridge.
view.OnUpdateSemanticsEnabled(true);
auto bridge = view.GetEngine()->accessibility_bridge().lock();
auto bridge = view.accessibility_bridge().lock();
ASSERT_TRUE(bridge);
// Add root node.
@@ -509,7 +509,7 @@ TEST(FlutterWindowsViewTest, NonZeroSemanticsRoot) {
// Enable semantics to instantiate accessibility bridge.
view.OnUpdateSemanticsEnabled(true);
auto bridge = view.GetEngine()->accessibility_bridge().lock();
auto bridge = view.accessibility_bridge().lock();
ASSERT_TRUE(bridge);
// Add root node.
@@ -641,7 +641,7 @@ TEST(FlutterWindowsViewTest, AccessibilityHitTesting) {
// Enable semantics to instantiate accessibility bridge.
view.OnUpdateSemanticsEnabled(true);
auto bridge = view.GetEngine()->accessibility_bridge().lock();
auto bridge = view.accessibility_bridge().lock();
ASSERT_TRUE(bridge);
// Add root node at origin. Size 500x500.
@@ -802,7 +802,7 @@ TEST(FlutterWindowsViewTest, CheckboxNativeState) {
// Enable semantics to instantiate accessibility bridge.
view.OnUpdateSemanticsEnabled(true);
auto bridge = view.GetEngine()->accessibility_bridge().lock();
auto bridge = view.accessibility_bridge().lock();
ASSERT_TRUE(bridge);
FlutterSemanticsNode2 root{sizeof(FlutterSemanticsNode2), 0};
@@ -948,7 +948,7 @@ TEST(FlutterWindowsViewTest, SwitchNativeState) {
// Enable semantics to instantiate accessibility bridge.
view.OnUpdateSemanticsEnabled(true);
auto bridge = view.GetEngine()->accessibility_bridge().lock();
auto bridge = view.accessibility_bridge().lock();
ASSERT_TRUE(bridge);
FlutterSemanticsNode2 root{sizeof(FlutterSemanticsNode2), 0};
@@ -1065,7 +1065,7 @@ TEST(FlutterWindowsViewTest, TooltipNodeData) {
// Enable semantics to instantiate accessibility bridge.
view.OnUpdateSemanticsEnabled(true);
auto bridge = view.GetEngine()->accessibility_bridge().lock();
auto bridge = view.accessibility_bridge().lock();
ASSERT_TRUE(bridge);
FlutterSemanticsNode2 root{sizeof(FlutterSemanticsNode2), 0};