@@ -165,14 +165,12 @@ @interface FlutterEngine (Test)
165165 FlutterEngine* engine = GetFlutterEngine ();
166166 // Capture the update callbacks before the embedder API initializes.
167167 auto original_init = engine.embedderAPI .Initialize ;
168- std::function<void (const FlutterSemanticsNode*, void *)> update_node_callback;
169- std::function<void (const FlutterSemanticsCustomAction*, void *)> update_action_callback;
168+ std::function<void (const FlutterSemanticsUpdate*, void *)> update_semantics_callback;
170169 engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
171- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
170+ Initialize, ([&update_semantics_callback , &original_init](
172171 size_t version, const FlutterRendererConfig* config,
173172 const FlutterProjectArgs* args, void * user_data, auto engine_out) {
174- update_node_callback = args->update_semantics_node_callback ;
175- update_action_callback = args->update_semantics_custom_action_callback ;
173+ update_semantics_callback = args->update_semantics_callback ;
176174 return original_init (version, config, args, user_data, engine_out);
177175 }));
178176 EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -210,7 +208,6 @@ @interface FlutterEngine (Test)
210208 int32_t children[] = {1 };
211209 root.children_in_traversal_order = children;
212210 root.custom_accessibility_actions_count = 0 ;
213- update_node_callback (&root, (void *)CFBridgingRetain (engine));
214211
215212 FlutterSemanticsNode child1;
216213 child1.id = 1 ;
@@ -226,15 +223,13 @@ @interface FlutterEngine (Test)
226223 child1.tooltip = " " ;
227224 child1.child_count = 0 ;
228225 child1.custom_accessibility_actions_count = 0 ;
229- update_node_callback (&child1, (void *)CFBridgingRetain (engine));
230226
231- FlutterSemanticsNode node_batch_end;
232- node_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
233- update_node_callback (&node_batch_end, (void *)CFBridgingRetain (engine));
234-
235- FlutterSemanticsCustomAction action_batch_end;
236- action_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
237- update_action_callback (&action_batch_end, (void *)CFBridgingRetain (engine));
227+ FlutterSemanticsUpdate update;
228+ update.nodes_count = 2 ;
229+ FlutterSemanticsNode nodes[] = {root, child1};
230+ update.nodes = nodes;
231+ update.custom_actions_count = 0 ;
232+ update_semantics_callback (&update, (__bridge void *)engine);
238233
239234 // Verify the accessibility tree is attached to the flutter view.
240235 EXPECT_EQ ([engine.viewController.flutterView.accessibilityChildren count ], 1u );
@@ -267,14 +262,12 @@ @interface FlutterEngine (Test)
267262 FlutterEngine* engine = GetFlutterEngine ();
268263 // Capture the update callbacks before the embedder API initializes.
269264 auto original_init = engine.embedderAPI .Initialize ;
270- std::function<void (const FlutterSemanticsNode*, void *)> update_node_callback;
271- std::function<void (const FlutterSemanticsCustomAction*, void *)> update_action_callback;
265+ std::function<void (const FlutterSemanticsUpdate*, void *)> update_semantics_callback;
272266 engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
273- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
267+ Initialize, ([&update_semantics_callback , &original_init](
274268 size_t version, const FlutterRendererConfig* config,
275269 const FlutterProjectArgs* args, void * user_data, auto engine_out) {
276- update_node_callback = args->update_semantics_node_callback ;
277- update_action_callback = args->update_semantics_custom_action_callback ;
270+ update_semantics_callback = args->update_semantics_callback ;
278271 return original_init (version, config, args, user_data, engine_out);
279272 }));
280273 EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -305,7 +298,6 @@ @interface FlutterEngine (Test)
305298 int32_t children[] = {1 };
306299 root.children_in_traversal_order = children;
307300 root.custom_accessibility_actions_count = 0 ;
308- update_node_callback (&root, (void *)CFBridgingRetain (engine));
309301
310302 FlutterSemanticsNode child1;
311303 child1.id = 1 ;
@@ -321,15 +313,13 @@ @interface FlutterEngine (Test)
321313 child1.tooltip = " " ;
322314 child1.child_count = 0 ;
323315 child1.custom_accessibility_actions_count = 0 ;
324- update_node_callback (&child1, (void *)CFBridgingRetain (engine));
325-
326- FlutterSemanticsNode node_batch_end;
327- node_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
328- update_node_callback (&node_batch_end, (void *)CFBridgingRetain (engine));
329316
330- FlutterSemanticsCustomAction action_batch_end;
331- action_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
332- update_action_callback (&action_batch_end, (void *)CFBridgingRetain (engine));
317+ FlutterSemanticsUpdate update;
318+ update.nodes_count = 2 ;
319+ FlutterSemanticsNode nodes[] = {root, child1};
320+ update.nodes = nodes;
321+ update.custom_actions_count = 0 ;
322+ update_semantics_callback (&update, (__bridge void *)engine);
333323
334324 // No crashes.
335325 EXPECT_EQ (engine.viewController , nil );
@@ -351,14 +341,12 @@ @interface FlutterEngine (Test)
351341 FlutterEngine* engine = GetFlutterEngine ();
352342 // Capture the update callbacks before the embedder API initializes.
353343 auto original_init = engine.embedderAPI .Initialize ;
354- std::function<void (const FlutterSemanticsNode*, void *)> update_node_callback;
355- std::function<void (const FlutterSemanticsCustomAction*, void *)> update_action_callback;
344+ std::function<void (const FlutterSemanticsUpdate*, void *)> update_semantics_callback;
356345 engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
357- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
346+ Initialize, ([&update_semantics_callback , &original_init](
358347 size_t version, const FlutterRendererConfig* config,
359348 const FlutterProjectArgs* args, void * user_data, auto engine_out) {
360- update_node_callback = args->update_semantics_node_callback ;
361- update_action_callback = args->update_semantics_custom_action_callback ;
349+ update_semantics_callback = args->update_semantics_callback ;
362350 return original_init (version, config, args, user_data, engine_out);
363351 }));
364352 EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -396,7 +384,6 @@ @interface FlutterEngine (Test)
396384 int32_t children[] = {1 };
397385 root.children_in_traversal_order = children;
398386 root.custom_accessibility_actions_count = 0 ;
399- update_node_callback (&root, (void *)CFBridgingRetain (engine));
400387
401388 FlutterSemanticsNode child1;
402389 child1.id = 1 ;
@@ -412,15 +399,13 @@ @interface FlutterEngine (Test)
412399 child1.tooltip = " " ;
413400 child1.child_count = 0 ;
414401 child1.custom_accessibility_actions_count = 0 ;
415- update_node_callback (&child1, (void *)CFBridgingRetain (engine));
416-
417- FlutterSemanticsNode node_batch_end;
418- node_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
419- update_node_callback (&node_batch_end, (void *)CFBridgingRetain (engine));
420402
421- FlutterSemanticsCustomAction action_batch_end;
422- action_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
423- update_action_callback (&action_batch_end, (void *)CFBridgingRetain (engine));
403+ FlutterSemanticsUpdate update;
404+ update.nodes_count = 2 ;
405+ FlutterSemanticsNode nodes[] = {root, child1};
406+ update.nodes = nodes;
407+ update.custom_actions_count = 0 ;
408+ update_semantics_callback (&update, (__bridge void *)engine);
424409
425410 auto native_root = engine.accessibilityBridge .lock ()->GetFlutterPlatformNodeDelegateFromID (0 );
426411 EXPECT_FALSE (native_root.expired ());
0 commit comments