@@ -166,14 +166,12 @@ @interface FlutterEngine (Test)
166
166
FlutterEngine* engine = GetFlutterEngine ();
167
167
// Capture the update callbacks before the embedder API initializes.
168
168
auto original_init = engine.embedderAPI .Initialize ;
169
- std::function<void (const FlutterSemanticsNode*, void *)> update_node_callback;
170
- std::function<void (const FlutterSemanticsCustomAction*, void *)> update_action_callback;
169
+ std::function<void (const FlutterSemanticsUpdate*, void *)> update_semantics_callback;
171
170
engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
172
- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
171
+ Initialize, ([&update_semantics_callback , &original_init](
173
172
size_t version, const FlutterRendererConfig* config,
174
173
const FlutterProjectArgs* args, void * user_data, auto engine_out) {
175
- update_node_callback = args->update_semantics_node_callback ;
176
- update_action_callback = args->update_semantics_custom_action_callback ;
174
+ update_semantics_callback = args->update_semantics_callback ;
177
175
return original_init (version, config, args, user_data, engine_out);
178
176
}));
179
177
EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -211,7 +209,6 @@ @interface FlutterEngine (Test)
211
209
int32_t children[] = {1 };
212
210
root.children_in_traversal_order = children;
213
211
root.custom_accessibility_actions_count = 0 ;
214
- update_node_callback (&root, (void *)CFBridgingRetain (engine));
215
212
216
213
FlutterSemanticsNode child1;
217
214
child1.id = 1 ;
@@ -227,15 +224,13 @@ @interface FlutterEngine (Test)
227
224
child1.tooltip = " " ;
228
225
child1.child_count = 0 ;
229
226
child1.custom_accessibility_actions_count = 0 ;
230
- update_node_callback (&child1, (void *)CFBridgingRetain (engine));
231
227
232
- FlutterSemanticsNode node_batch_end;
233
- node_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
234
- update_node_callback (&node_batch_end, (void *)CFBridgingRetain (engine));
235
-
236
- FlutterSemanticsCustomAction action_batch_end;
237
- action_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
238
- update_action_callback (&action_batch_end, (void *)CFBridgingRetain (engine));
228
+ FlutterSemanticsUpdate update;
229
+ update.nodes_count = 2 ;
230
+ FlutterSemanticsNode nodes[] = {root, child1};
231
+ update.nodes = nodes;
232
+ update.custom_actions_count = 0 ;
233
+ update_semantics_callback (&update, (void *)CFBridgingRetain (engine));
239
234
240
235
// Verify the accessibility tree is attached to the flutter view.
241
236
EXPECT_EQ ([engine.viewController.flutterView.accessibilityChildren count ], 1u );
@@ -268,14 +263,12 @@ @interface FlutterEngine (Test)
268
263
FlutterEngine* engine = GetFlutterEngine ();
269
264
// Capture the update callbacks before the embedder API initializes.
270
265
auto original_init = engine.embedderAPI .Initialize ;
271
- std::function<void (const FlutterSemanticsNode*, void *)> update_node_callback;
272
- std::function<void (const FlutterSemanticsCustomAction*, void *)> update_action_callback;
266
+ std::function<void (const FlutterSemanticsUpdate*, void *)> update_semantics_callback;
273
267
engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
274
- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
268
+ Initialize, ([&update_semantics_callback , &original_init](
275
269
size_t version, const FlutterRendererConfig* config,
276
270
const FlutterProjectArgs* args, void * user_data, auto engine_out) {
277
- update_node_callback = args->update_semantics_node_callback ;
278
- update_action_callback = args->update_semantics_custom_action_callback ;
271
+ update_semantics_callback = args->update_semantics_callback ;
279
272
return original_init (version, config, args, user_data, engine_out);
280
273
}));
281
274
EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -306,7 +299,6 @@ @interface FlutterEngine (Test)
306
299
int32_t children[] = {1 };
307
300
root.children_in_traversal_order = children;
308
301
root.custom_accessibility_actions_count = 0 ;
309
- update_node_callback (&root, (void *)CFBridgingRetain (engine));
310
302
311
303
FlutterSemanticsNode child1;
312
304
child1.id = 1 ;
@@ -322,15 +314,13 @@ @interface FlutterEngine (Test)
322
314
child1.tooltip = " " ;
323
315
child1.child_count = 0 ;
324
316
child1.custom_accessibility_actions_count = 0 ;
325
- update_node_callback (&child1, (void *)CFBridgingRetain (engine));
326
-
327
- FlutterSemanticsNode node_batch_end;
328
- node_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
329
- update_node_callback (&node_batch_end, (void *)CFBridgingRetain (engine));
330
317
331
- FlutterSemanticsCustomAction action_batch_end;
332
- action_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
333
- update_action_callback (&action_batch_end, (void *)CFBridgingRetain (engine));
318
+ FlutterSemanticsUpdate update;
319
+ update.nodes_count = 2 ;
320
+ FlutterSemanticsNode nodes[] = {root, child1};
321
+ update.nodes = nodes;
322
+ update.custom_actions_count = 0 ;
323
+ update_semantics_callback (&update, (void *)CFBridgingRetain (engine));
334
324
335
325
// No crashes.
336
326
EXPECT_EQ (engine.viewController , nil );
@@ -352,14 +342,12 @@ @interface FlutterEngine (Test)
352
342
FlutterEngine* engine = GetFlutterEngine ();
353
343
// Capture the update callbacks before the embedder API initializes.
354
344
auto original_init = engine.embedderAPI .Initialize ;
355
- std::function<void (const FlutterSemanticsNode*, void *)> update_node_callback;
356
- std::function<void (const FlutterSemanticsCustomAction*, void *)> update_action_callback;
345
+ std::function<void (const FlutterSemanticsUpdate*, void *)> update_semantics_callback;
357
346
engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
358
- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
347
+ Initialize, ([&update_semantics_callback , &original_init](
359
348
size_t version, const FlutterRendererConfig* config,
360
349
const FlutterProjectArgs* args, void * user_data, auto engine_out) {
361
- update_node_callback = args->update_semantics_node_callback ;
362
- update_action_callback = args->update_semantics_custom_action_callback ;
350
+ update_semantics_callback = args->update_semantics_callback ;
363
351
return original_init (version, config, args, user_data, engine_out);
364
352
}));
365
353
EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -397,7 +385,6 @@ @interface FlutterEngine (Test)
397
385
int32_t children[] = {1 };
398
386
root.children_in_traversal_order = children;
399
387
root.custom_accessibility_actions_count = 0 ;
400
- update_node_callback (&root, (void *)CFBridgingRetain (engine));
401
388
402
389
FlutterSemanticsNode child1;
403
390
child1.id = 1 ;
@@ -413,15 +400,13 @@ @interface FlutterEngine (Test)
413
400
child1.tooltip = " " ;
414
401
child1.child_count = 0 ;
415
402
child1.custom_accessibility_actions_count = 0 ;
416
- update_node_callback (&child1, (void *)CFBridgingRetain (engine));
417
-
418
- FlutterSemanticsNode node_batch_end;
419
- node_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
420
- update_node_callback (&node_batch_end, (void *)CFBridgingRetain (engine));
421
403
422
- FlutterSemanticsCustomAction action_batch_end;
423
- action_batch_end.id = kFlutterSemanticsNodeIdBatchEnd ;
424
- update_action_callback (&action_batch_end, (void *)CFBridgingRetain (engine));
404
+ FlutterSemanticsUpdate update;
405
+ update.nodes_count = 2 ;
406
+ FlutterSemanticsNode nodes[] = {root, child1};
407
+ update.nodes = nodes;
408
+ update.custom_actions_count = 0 ;
409
+ update_semantics_callback (&update, (void *)CFBridgingRetain (engine));
425
410
426
411
auto native_root = engine.accessibilityBridge .lock ()->GetFlutterPlatformNodeDelegateFromID (0 );
427
412
EXPECT_FALSE (native_root.expired ());
0 commit comments