@@ -105,14 +105,12 @@ @interface FlutterEngine (Test)
105105 FlutterEngine* engine = GetFlutterEngine ();
106106 // Capture the update callbacks before the embedder API initializes.
107107 auto original_init = engine.embedderAPI .Initialize ;
108- std::function<void (const FlutterSemanticsNode*, void *)> update_node_callback;
109- std::function<void (const FlutterSemanticsCustomAction*, void *)> update_action_callback;
108+ std::function<void (const FlutterSemanticsUpdate*, void *)> update_semantics_callback;
110109 engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
111- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
110+ Initialize, ([&update_semantics_callback , &original_init](
112111 size_t version, const FlutterRendererConfig* config,
113112 const FlutterProjectArgs* args, void * user_data, auto engine_out) {
114- update_node_callback = args->update_semantics_node_callback ;
115- update_action_callback = args->update_semantics_custom_action_callback ;
113+ update_semantics_callback = args->update_semantics_callback ;
116114 return original_init (version, config, args, user_data, engine_out);
117115 }));
118116 EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -150,7 +148,6 @@ @interface FlutterEngine (Test)
150148 int32_t children[] = {1 };
151149 root.children_in_traversal_order = children;
152150 root.custom_accessibility_actions_count = 0 ;
153- update_node_callback (&root, (void *)CFBridgingRetain (engine));
154151
155152 FlutterSemanticsNode child1;
156153 child1.id = 1 ;
@@ -166,15 +163,13 @@ @interface FlutterEngine (Test)
166163 child1.tooltip = " " ;
167164 child1.child_count = 0 ;
168165 child1.custom_accessibility_actions_count = 0 ;
169- update_node_callback (&child1, (void *)CFBridgingRetain (engine));
170166
171- FlutterSemanticsNode node_batch_end;
172- node_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
173- update_node_callback (&node_batch_end, (void *)CFBridgingRetain (engine));
174-
175- FlutterSemanticsCustomAction action_batch_end;
176- action_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
177- update_action_callback (&action_batch_end, (void *)CFBridgingRetain (engine));
167+ FlutterSemanticsUpdate update;
168+ update.nodes_count = 2 ;
169+ FlutterSemanticsNode nodes[] = {root, child1};
170+ update.nodes = nodes;
171+ update.custom_actions_count = 0 ;
172+ update_semantics_callback (&update, (void *)CFBridgingRetain (engine));
178173
179174 // Verify the accessibility tree is attached to the flutter view.
180175 EXPECT_EQ ([engine.viewController.flutterView.accessibilityChildren count ], 1u );
@@ -207,14 +202,12 @@ @interface FlutterEngine (Test)
207202 FlutterEngine* engine = GetFlutterEngine ();
208203 // Capture the update callbacks before the embedder API initializes.
209204 auto original_init = engine.embedderAPI .Initialize ;
210- std::function<void (const FlutterSemanticsNode*, void *)> update_node_callback;
211- std::function<void (const FlutterSemanticsCustomAction*, void *)> update_action_callback;
205+ std::function<void (const FlutterSemanticsUpdate*, void *)> update_semantics_callback;
212206 engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
213- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
207+ Initialize, ([&update_semantics_callback , &original_init](
214208 size_t version, const FlutterRendererConfig* config,
215209 const FlutterProjectArgs* args, void * user_data, auto engine_out) {
216- update_node_callback = args->update_semantics_node_callback ;
217- update_action_callback = args->update_semantics_custom_action_callback ;
210+ update_semantics_callback = args->update_semantics_callback ;
218211 return original_init (version, config, args, user_data, engine_out);
219212 }));
220213 EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -245,7 +238,6 @@ @interface FlutterEngine (Test)
245238 int32_t children[] = {1 };
246239 root.children_in_traversal_order = children;
247240 root.custom_accessibility_actions_count = 0 ;
248- update_node_callback (&root, (void *)CFBridgingRetain (engine));
249241
250242 FlutterSemanticsNode child1;
251243 child1.id = 1 ;
@@ -261,15 +253,13 @@ @interface FlutterEngine (Test)
261253 child1.tooltip = " " ;
262254 child1.child_count = 0 ;
263255 child1.custom_accessibility_actions_count = 0 ;
264- update_node_callback (&child1, (void *)CFBridgingRetain (engine));
265-
266- FlutterSemanticsNode node_batch_end;
267- node_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
268- update_node_callback (&node_batch_end, (void *)CFBridgingRetain (engine));
269256
270- FlutterSemanticsCustomAction action_batch_end;
271- action_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
272- update_action_callback (&action_batch_end, (void *)CFBridgingRetain (engine));
257+ FlutterSemanticsUpdate update;
258+ update.nodes_count = 2 ;
259+ FlutterSemanticsNode nodes[] = {root, child1};
260+ update.nodes = nodes;
261+ update.custom_actions_count = 0 ;
262+ update_semantics_callback (&update, (void *)CFBridgingRetain (engine));
273263
274264 // No crashes.
275265 EXPECT_EQ (engine.viewController , nil );
@@ -291,14 +281,12 @@ @interface FlutterEngine (Test)
291281 FlutterEngine* engine = GetFlutterEngine ();
292282 // Capture the update callbacks before the embedder API initializes.
293283 auto original_init = engine.embedderAPI .Initialize ;
294- std::function<void (const FlutterSemanticsNode*, void *)> update_node_callback;
295- std::function<void (const FlutterSemanticsCustomAction*, void *)> update_action_callback;
284+ std::function<void (const FlutterSemanticsUpdate*, void *)> update_semantics_callback;
296285 engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
297- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
286+ Initialize, ([&update_semantics_callback , &original_init](
298287 size_t version, const FlutterRendererConfig* config,
299288 const FlutterProjectArgs* args, void * user_data, auto engine_out) {
300- update_node_callback = args->update_semantics_node_callback ;
301- update_action_callback = args->update_semantics_custom_action_callback ;
289+ update_semantics_callback = args->update_semantics_callback ;
302290 return original_init (version, config, args, user_data, engine_out);
303291 }));
304292 EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -336,7 +324,6 @@ @interface FlutterEngine (Test)
336324 int32_t children[] = {1 };
337325 root.children_in_traversal_order = children;
338326 root.custom_accessibility_actions_count = 0 ;
339- update_node_callback (&root, (void *)CFBridgingRetain (engine));
340327
341328 FlutterSemanticsNode child1;
342329 child1.id = 1 ;
@@ -352,15 +339,13 @@ @interface FlutterEngine (Test)
352339 child1.tooltip = " " ;
353340 child1.child_count = 0 ;
354341 child1.custom_accessibility_actions_count = 0 ;
355- update_node_callback (&child1, (void *)CFBridgingRetain (engine));
356-
357- FlutterSemanticsNode node_batch_end;
358- node_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
359- update_node_callback (&node_batch_end, (void *)CFBridgingRetain (engine));
360342
361- FlutterSemanticsCustomAction action_batch_end;
362- action_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
363- update_action_callback (&action_batch_end, (void *)CFBridgingRetain (engine));
343+ FlutterSemanticsUpdate update;
344+ update.nodes_count = 2 ;
345+ FlutterSemanticsNode nodes[] = {root, child1};
346+ update.nodes = nodes;
347+ update.custom_actions_count = 0 ;
348+ update_semantics_callback (&update, (void *)CFBridgingRetain (engine));
364349
365350 auto native_root = engine.accessibilityBridge .lock ()->GetFlutterPlatformNodeDelegateFromID (0 );
366351 EXPECT_FALSE (native_root.expired ());
0 commit comments