Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 09689d3

Browse files
authored
[Windows] Remove accessibility bridge helpers from the 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: flutter/flutter#124995 Follow-up to: #41308 [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
1 parent 5efbd0b commit 09689d3

File tree

5 files changed

+27
-39
lines changed

5 files changed

+27
-39
lines changed

shell/platform/windows/accessibility_bridge_windows_unittests.cc

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,9 @@ ui::AXNode* AXNodeFromID(std::shared_ptr<AccessibilityBridge> bridge,
178178
}
179179

180180
std::shared_ptr<AccessibilityBridgeWindowsSpy> GetAccessibilityBridgeSpy(
181-
FlutterWindowsEngine* engine) {
181+
FlutterWindowsView& view) {
182182
return std::static_pointer_cast<AccessibilityBridgeWindowsSpy>(
183-
engine->accessibility_bridge().lock());
183+
view.accessibility_bridge().lock());
184184
}
185185

186186
void ExpectWinEventFromAXEvent(int32_t node_id,
@@ -192,7 +192,7 @@ void ExpectWinEventFromAXEvent(int32_t node_id,
192192
view.SetEngine(GetTestEngine());
193193
view.OnUpdateSemanticsEnabled(true);
194194

195-
auto bridge = GetAccessibilityBridgeSpy(view.GetEngine());
195+
auto bridge = GetAccessibilityBridgeSpy(view);
196196
PopulateAXTree(bridge);
197197

198198
bridge->ResetRecords();
@@ -212,7 +212,7 @@ void ExpectWinEventFromAXEventOnFocusNode(int32_t node_id,
212212
view.SetEngine(GetTestEngine());
213213
view.OnUpdateSemanticsEnabled(true);
214214

215-
auto bridge = GetAccessibilityBridgeSpy(view.GetEngine());
215+
auto bridge = GetAccessibilityBridgeSpy(view);
216216
PopulateAXTree(bridge);
217217

218218
bridge->ResetRecords();
@@ -237,7 +237,7 @@ TEST(AccessibilityBridgeWindows, GetParent) {
237237
view.SetEngine(GetTestEngine());
238238
view.OnUpdateSemanticsEnabled(true);
239239

240-
auto bridge = view.GetEngine()->accessibility_bridge().lock();
240+
auto bridge = view.accessibility_bridge().lock();
241241
PopulateAXTree(bridge);
242242

243243
auto node0_delegate = bridge->GetFlutterPlatformNodeDelegateFromID(0).lock();
@@ -253,7 +253,7 @@ TEST(AccessibilityBridgeWindows, GetParentOnRootRetunsNullptr) {
253253
view.SetEngine(GetTestEngine());
254254
view.OnUpdateSemanticsEnabled(true);
255255

256-
auto bridge = view.GetEngine()->accessibility_bridge().lock();
256+
auto bridge = view.accessibility_bridge().lock();
257257
PopulateAXTree(bridge);
258258

259259
auto node0_delegate = bridge->GetFlutterPlatformNodeDelegateFromID(0).lock();
@@ -267,7 +267,7 @@ TEST(AccessibilityBridgeWindows, DispatchAccessibilityAction) {
267267
view.SetEngine(GetTestEngine());
268268
view.OnUpdateSemanticsEnabled(true);
269269

270-
auto bridge = view.GetEngine()->accessibility_bridge().lock();
270+
auto bridge = view.accessibility_bridge().lock();
271271
PopulateAXTree(bridge);
272272

273273
FlutterSemanticsAction actual_action = kFlutterSemanticsActionTap;
@@ -303,7 +303,7 @@ TEST(AccessibilityBridgeWindows, OnAccessibilityEventFocusChanged) {
303303
view.SetEngine(GetTestEngine());
304304
view.OnUpdateSemanticsEnabled(true);
305305

306-
auto bridge = GetAccessibilityBridgeSpy(view.GetEngine());
306+
auto bridge = GetAccessibilityBridgeSpy(view);
307307
PopulateAXTree(bridge);
308308

309309
bridge->ResetRecords();

shell/platform/windows/flutter_windows_engine.cc

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,12 @@ bool FlutterWindowsEngine::Run(std::string_view entrypoint) {
345345
args.update_semantics_callback2 = [](const FlutterSemanticsUpdate2* update,
346346
void* user_data) {
347347
auto host = static_cast<FlutterWindowsEngine*>(user_data);
348-
auto accessibility_bridge = host->accessibility_bridge().lock();
348+
auto view = host->view();
349+
if (!view) {
350+
return;
351+
}
352+
353+
auto accessibility_bridge = view->accessibility_bridge().lock();
349354
if (!accessibility_bridge) {
350355
return;
351356
}
@@ -704,15 +709,6 @@ void FlutterWindowsEngine::OnPreEngineRestart() {
704709
}
705710
}
706711

707-
gfx::NativeViewAccessible FlutterWindowsEngine::GetNativeViewAccessible() {
708-
auto bridge = accessibility_bridge().lock();
709-
if (!bridge) {
710-
return nullptr;
711-
}
712-
713-
return bridge->GetChildOfAXFragmentRoot();
714-
}
715-
716712
std::string FlutterWindowsEngine::GetExecutableName() const {
717713
std::pair<bool, std::string> result = fml::paths::GetExecutablePath();
718714
if (result.first) {
@@ -792,11 +788,6 @@ void FlutterWindowsEngine::OnQuit(std::optional<HWND> hwnd,
792788
lifecycle_manager_->Quit(hwnd, wparam, lparam, exit_code);
793789
}
794790

795-
std::weak_ptr<AccessibilityBridgeWindows>
796-
FlutterWindowsEngine::accessibility_bridge() {
797-
return view_->accessibility_bridge();
798-
}
799-
800791
void FlutterWindowsEngine::OnDwmCompositionChanged() {
801792
view_->OnDwmCompositionChanged();
802793
}

shell/platform/windows/flutter_windows_engine.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,6 @@ class FlutterWindowsEngine {
141141
// rendering using software instead of OpenGL.
142142
AngleSurfaceManager* surface_manager() { return surface_manager_.get(); }
143143

144-
// Return the AccessibilityBridgeWindows for this engine's view.
145-
std::weak_ptr<AccessibilityBridgeWindows> accessibility_bridge();
146-
147144
WindowProcDelegateManager* window_proc_delegate_manager() {
148145
return window_proc_delegate_manager_.get();
149146
}
@@ -227,10 +224,6 @@ class FlutterWindowsEngine {
227224
// Returns true if the high contrast feature is enabled.
228225
bool high_contrast_enabled() const { return high_contrast_enabled_; }
229226

230-
// Returns the native accessibility root node, or nullptr if one does not
231-
// exist.
232-
gfx::NativeViewAccessible GetNativeViewAccessible();
233-
234227
// Register a root isolate create callback.
235228
//
236229
// The root isolate create callback is invoked at creation of the root Dart

shell/platform/windows/flutter_windows_view.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,11 @@ void FlutterWindowsView::OnUpdateSemanticsEnabled(bool enabled) {
253253
}
254254

255255
gfx::NativeViewAccessible FlutterWindowsView::GetNativeViewAccessible() {
256-
return engine_->GetNativeViewAccessible();
256+
if (!accessibility_bridge_) {
257+
return nullptr;
258+
}
259+
260+
return accessibility_bridge_->GetChildOfAXFragmentRoot();
257261
}
258262

259263
void FlutterWindowsView::OnCursorRectUpdated(const Rect& rect) {
@@ -639,7 +643,7 @@ void FlutterWindowsView::NotifyWinEventWrapper(ui::AXPlatformNodeWin* node,
639643
}
640644

641645
ui::AXFragmentRootDelegateWin* FlutterWindowsView::GetAxFragmentRootDelegate() {
642-
return engine_->accessibility_bridge().lock().get();
646+
return accessibility_bridge_.get();
643647
}
644648

645649
ui::AXPlatformNodeWin* FlutterWindowsView::AlertNode() const {

shell/platform/windows/flutter_windows_view_unittests.cc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ TEST(FlutterWindowsViewTest, AddSemanticsNodeUpdate) {
212212
// Enable semantics to instantiate accessibility bridge.
213213
view.OnUpdateSemanticsEnabled(true);
214214

215-
auto bridge = view.GetEngine()->accessibility_bridge().lock();
215+
auto bridge = view.accessibility_bridge().lock();
216216
ASSERT_TRUE(bridge);
217217

218218
// Add root node.
@@ -311,7 +311,7 @@ TEST(FlutterWindowsViewTest, AddSemanticsNodeUpdateWithChildren) {
311311
// Enable semantics to instantiate accessibility bridge.
312312
view.OnUpdateSemanticsEnabled(true);
313313

314-
auto bridge = view.GetEngine()->accessibility_bridge().lock();
314+
auto bridge = view.accessibility_bridge().lock();
315315
ASSERT_TRUE(bridge);
316316

317317
// Add root node.
@@ -509,7 +509,7 @@ TEST(FlutterWindowsViewTest, NonZeroSemanticsRoot) {
509509
// Enable semantics to instantiate accessibility bridge.
510510
view.OnUpdateSemanticsEnabled(true);
511511

512-
auto bridge = view.GetEngine()->accessibility_bridge().lock();
512+
auto bridge = view.accessibility_bridge().lock();
513513
ASSERT_TRUE(bridge);
514514

515515
// Add root node.
@@ -641,7 +641,7 @@ TEST(FlutterWindowsViewTest, AccessibilityHitTesting) {
641641
// Enable semantics to instantiate accessibility bridge.
642642
view.OnUpdateSemanticsEnabled(true);
643643

644-
auto bridge = view.GetEngine()->accessibility_bridge().lock();
644+
auto bridge = view.accessibility_bridge().lock();
645645
ASSERT_TRUE(bridge);
646646

647647
// Add root node at origin. Size 500x500.
@@ -802,7 +802,7 @@ TEST(FlutterWindowsViewTest, CheckboxNativeState) {
802802
// Enable semantics to instantiate accessibility bridge.
803803
view.OnUpdateSemanticsEnabled(true);
804804

805-
auto bridge = view.GetEngine()->accessibility_bridge().lock();
805+
auto bridge = view.accessibility_bridge().lock();
806806
ASSERT_TRUE(bridge);
807807

808808
FlutterSemanticsNode2 root{sizeof(FlutterSemanticsNode2), 0};
@@ -948,7 +948,7 @@ TEST(FlutterWindowsViewTest, SwitchNativeState) {
948948
// Enable semantics to instantiate accessibility bridge.
949949
view.OnUpdateSemanticsEnabled(true);
950950

951-
auto bridge = view.GetEngine()->accessibility_bridge().lock();
951+
auto bridge = view.accessibility_bridge().lock();
952952
ASSERT_TRUE(bridge);
953953

954954
FlutterSemanticsNode2 root{sizeof(FlutterSemanticsNode2), 0};
@@ -1065,7 +1065,7 @@ TEST(FlutterWindowsViewTest, TooltipNodeData) {
10651065
// Enable semantics to instantiate accessibility bridge.
10661066
view.OnUpdateSemanticsEnabled(true);
10671067

1068-
auto bridge = view.GetEngine()->accessibility_bridge().lock();
1068+
auto bridge = view.accessibility_bridge().lock();
10691069
ASSERT_TRUE(bridge);
10701070

10711071
FlutterSemanticsNode2 root{sizeof(FlutterSemanticsNode2), 0};

0 commit comments

Comments
 (0)