Skip to content

Commit 71fdb89

Browse files
authored
Override FlutterPlatformNodeDelegate::GetUniqueId (#30261)
The default implementation of GetUniqueId on ui::AXPlatformNodeDelegate always returns ID 1. We had previously implemented this on the windows platform node delegate, but for consistency's sake, and because the default implementation is surprising, we're promoting this to the FlutterPlatformNodeDelegate base class. Issue: #77838
1 parent 1ed10bb commit 71fdb89

File tree

4 files changed

+32
-18
lines changed

4 files changed

+32
-18
lines changed

shell/platform/common/flutter_platform_node_delegate.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ class FlutterPlatformNodeDelegate : public ui::AXPlatformNodeDelegateBase {
9898
// |ui::AXPlatformNodeDelegateBase|
9999
virtual ~FlutterPlatformNodeDelegate() override;
100100

101+
// |ui::AXPlatformNodeDelegateBase|
102+
const ui::AXUniqueId& GetUniqueId() const override { return unique_id_; }
103+
101104
// |ui::AXPlatformNodeDelegateBase|
102105
const ui::AXNodeData& GetData() const override;
103106

@@ -144,6 +147,7 @@ class FlutterPlatformNodeDelegate : public ui::AXPlatformNodeDelegateBase {
144147
private:
145148
ui::AXNode* ax_node_;
146149
std::weak_ptr<OwnerBridge> bridge_;
150+
ui::AXUniqueId unique_id_;
147151
};
148152

149153
} // namespace flutter

shell/platform/common/flutter_platform_node_delegate_unittests.cc

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,34 @@
1212
namespace flutter {
1313
namespace testing {
1414

15+
TEST(FlutterPlatformNodeDelegateTest, NodeDelegateHasUniqueId) {
16+
TestAccessibilityBridgeDelegate* delegate =
17+
new TestAccessibilityBridgeDelegate();
18+
std::unique_ptr<TestAccessibilityBridgeDelegate> ptr(delegate);
19+
std::shared_ptr<AccessibilityBridge> bridge =
20+
std::make_shared<AccessibilityBridge>(std::move(ptr));
21+
22+
// Add node 0: root.
23+
FlutterSemanticsNode node0{sizeof(FlutterSemanticsNode), 0};
24+
std::vector<int32_t> node0_children{1};
25+
node0.child_count = node0_children.size();
26+
node0.children_in_traversal_order = node0_children.data();
27+
node0.children_in_hit_test_order = node0_children.data();
28+
29+
// Add node 1: text child of node 0.
30+
FlutterSemanticsNode node1{sizeof(FlutterSemanticsNode), 1};
31+
node1.label = "prefecture";
32+
node1.value = "Kyoto";
33+
34+
bridge->AddFlutterSemanticsNodeUpdate(&node0);
35+
bridge->AddFlutterSemanticsNodeUpdate(&node1);
36+
bridge->CommitUpdates();
37+
38+
auto node0_delegate = bridge->GetFlutterPlatformNodeDelegateFromID(0).lock();
39+
auto node1_delegate = bridge->GetFlutterPlatformNodeDelegateFromID(1).lock();
40+
EXPECT_TRUE(node0_delegate->GetUniqueId() != node1_delegate->GetUniqueId());
41+
}
42+
1543
TEST(FlutterPlatformNodeDelegateTest, canPerfomActions) {
1644
TestAccessibilityBridgeDelegate* delegate =
1745
new TestAccessibilityBridgeDelegate();

shell/platform/windows/accessibility_bridge_delegate_win32_unittests.cc

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -193,21 +193,6 @@ TEST(AccessibilityBridgeDelegateWin32, GetParentOnRootRetunsNullptr) {
193193
ASSERT_TRUE(node0_delegate->GetParent() == nullptr);
194194
}
195195

196-
TEST(AccessibilityBridgeDelegateWin32, NodeDelegateHasUniqueId) {
197-
auto window_binding_handler =
198-
std::make_unique<::testing::NiceMock<MockWindowBindingHandler>>();
199-
FlutterWindowsView view(std::move(window_binding_handler));
200-
view.SetEngine(GetTestEngine());
201-
view.OnUpdateSemanticsEnabled(true);
202-
203-
auto bridge = view.GetEngine()->accessibility_bridge().lock();
204-
PopulateAXTree(bridge);
205-
206-
auto node0_delegate = bridge->GetFlutterPlatformNodeDelegateFromID(0).lock();
207-
auto node1_delegate = bridge->GetFlutterPlatformNodeDelegateFromID(1).lock();
208-
EXPECT_TRUE(node0_delegate->GetUniqueId() != node1_delegate->GetUniqueId());
209-
}
210-
211196
TEST(AccessibilityBridgeDelegateWin32, DispatchAccessibilityAction) {
212197
auto window_binding_handler =
213198
std::make_unique<::testing::NiceMock<MockWindowBindingHandler>>();

shell/platform/windows/flutter_platform_node_delegate_win32.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@ class FlutterPlatformNodeDelegateWin32 : public FlutterPlatformNodeDelegate {
3535
const ui::AXClippingBehavior clipping_behavior,
3636
ui::AXOffscreenResult* offscreen_result) const override;
3737

38-
const ui::AXUniqueId& GetUniqueId() const override { return unique_id_; }
39-
4038
// Dispatches a Windows accessibility event of the specified type, generated
4139
// by the accessibility node associated with this object. This is a
4240
// convenience wrapper around |NotifyWinEvent|.
@@ -49,7 +47,6 @@ class FlutterPlatformNodeDelegateWin32 : public FlutterPlatformNodeDelegate {
4947
private:
5048
ui::AXPlatformNode* ax_platform_node_;
5149
FlutterWindowsEngine* engine_;
52-
ui::AXUniqueId unique_id_;
5350
};
5451

5552
} // namespace flutter

0 commit comments

Comments
 (0)