[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:
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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};
|
||||
|
||||
Reference in New Issue
Block a user