@@ -165,14 +165,12 @@ @interface FlutterEngine (Test)
165
165
FlutterEngine* engine = GetFlutterEngine ();
166
166
// Capture the update callbacks before the embedder API initializes.
167
167
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;
170
169
engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
171
- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
170
+ Initialize, ([&update_semantics_callback , &original_init](
172
171
size_t version, const FlutterRendererConfig* config,
173
172
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 ;
176
174
return original_init (version, config, args, user_data, engine_out);
177
175
}));
178
176
EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -210,7 +208,6 @@ @interface FlutterEngine (Test)
210
208
int32_t children[] = {1 };
211
209
root.children_in_traversal_order = children;
212
210
root.custom_accessibility_actions_count = 0 ;
213
- update_node_callback (&root, (void *)CFBridgingRetain (engine));
214
211
215
212
FlutterSemanticsNode child1;
216
213
child1.id = 1 ;
@@ -226,15 +223,13 @@ @interface FlutterEngine (Test)
226
223
child1.tooltip = " " ;
227
224
child1.child_count = 0 ;
228
225
child1.custom_accessibility_actions_count = 0 ;
229
- update_node_callback (&child1, (void *)CFBridgingRetain (engine));
230
226
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);
238
233
239
234
// Verify the accessibility tree is attached to the flutter view.
240
235
EXPECT_EQ ([engine.viewController.flutterView.accessibilityChildren count ], 1u );
@@ -267,14 +262,12 @@ @interface FlutterEngine (Test)
267
262
FlutterEngine* engine = GetFlutterEngine ();
268
263
// Capture the update callbacks before the embedder API initializes.
269
264
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;
272
266
engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
273
- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
267
+ Initialize, ([&update_semantics_callback , &original_init](
274
268
size_t version, const FlutterRendererConfig* config,
275
269
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 ;
278
271
return original_init (version, config, args, user_data, engine_out);
279
272
}));
280
273
EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -305,7 +298,6 @@ @interface FlutterEngine (Test)
305
298
int32_t children[] = {1 };
306
299
root.children_in_traversal_order = children;
307
300
root.custom_accessibility_actions_count = 0 ;
308
- update_node_callback (&root, (void *)CFBridgingRetain (engine));
309
301
310
302
FlutterSemanticsNode child1;
311
303
child1.id = 1 ;
@@ -321,15 +313,13 @@ @interface FlutterEngine (Test)
321
313
child1.tooltip = " " ;
322
314
child1.child_count = 0 ;
323
315
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));
329
316
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);
333
323
334
324
// No crashes.
335
325
EXPECT_EQ (engine.viewController , nil );
@@ -351,14 +341,12 @@ @interface FlutterEngine (Test)
351
341
FlutterEngine* engine = GetFlutterEngine ();
352
342
// Capture the update callbacks before the embedder API initializes.
353
343
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;
356
345
engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
357
- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
346
+ Initialize, ([&update_semantics_callback , &original_init](
358
347
size_t version, const FlutterRendererConfig* config,
359
348
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 ;
362
350
return original_init (version, config, args, user_data, engine_out);
363
351
}));
364
352
EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -396,7 +384,6 @@ @interface FlutterEngine (Test)
396
384
int32_t children[] = {1 };
397
385
root.children_in_traversal_order = children;
398
386
root.custom_accessibility_actions_count = 0 ;
399
- update_node_callback (&root, (void *)CFBridgingRetain (engine));
400
387
401
388
FlutterSemanticsNode child1;
402
389
child1.id = 1 ;
@@ -412,15 +399,13 @@ @interface FlutterEngine (Test)
412
399
child1.tooltip = " " ;
413
400
child1.child_count = 0 ;
414
401
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));
420
402
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);
424
409
425
410
auto native_root = engine.accessibilityBridge .lock ()->GetFlutterPlatformNodeDelegateFromID (0 );
426
411
EXPECT_FALSE (native_root.expired ());
0 commit comments