@@ -105,14 +105,12 @@ @interface FlutterEngine (Test)
105
105
FlutterEngine* engine = GetFlutterEngine ();
106
106
// Capture the update callbacks before the embedder API initializes.
107
107
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;
110
109
engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
111
- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
110
+ Initialize, ([&update_semantics_callback , &original_init](
112
111
size_t version, const FlutterRendererConfig* config,
113
112
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 ;
116
114
return original_init (version, config, args, user_data, engine_out);
117
115
}));
118
116
EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -150,7 +148,6 @@ @interface FlutterEngine (Test)
150
148
int32_t children[] = {1 };
151
149
root.children_in_traversal_order = children;
152
150
root.custom_accessibility_actions_count = 0 ;
153
- update_node_callback (&root, (void *)CFBridgingRetain (engine));
154
151
155
152
FlutterSemanticsNode child1;
156
153
child1.id = 1 ;
@@ -166,15 +163,13 @@ @interface FlutterEngine (Test)
166
163
child1.tooltip = " " ;
167
164
child1.child_count = 0 ;
168
165
child1.custom_accessibility_actions_count = 0 ;
169
- update_node_callback (&child1, (void *)CFBridgingRetain (engine));
170
166
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));
178
173
179
174
// Verify the accessibility tree is attached to the flutter view.
180
175
EXPECT_EQ ([engine.viewController.flutterView.accessibilityChildren count ], 1u );
@@ -207,14 +202,12 @@ @interface FlutterEngine (Test)
207
202
FlutterEngine* engine = GetFlutterEngine ();
208
203
// Capture the update callbacks before the embedder API initializes.
209
204
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;
212
206
engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
213
- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
207
+ Initialize, ([&update_semantics_callback , &original_init](
214
208
size_t version, const FlutterRendererConfig* config,
215
209
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 ;
218
211
return original_init (version, config, args, user_data, engine_out);
219
212
}));
220
213
EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -245,7 +238,6 @@ @interface FlutterEngine (Test)
245
238
int32_t children[] = {1 };
246
239
root.children_in_traversal_order = children;
247
240
root.custom_accessibility_actions_count = 0 ;
248
- update_node_callback (&root, (void *)CFBridgingRetain (engine));
249
241
250
242
FlutterSemanticsNode child1;
251
243
child1.id = 1 ;
@@ -261,15 +253,13 @@ @interface FlutterEngine (Test)
261
253
child1.tooltip = " " ;
262
254
child1.child_count = 0 ;
263
255
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));
269
256
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));
273
263
274
264
// No crashes.
275
265
EXPECT_EQ (engine.viewController , nil );
@@ -291,14 +281,12 @@ @interface FlutterEngine (Test)
291
281
FlutterEngine* engine = GetFlutterEngine ();
292
282
// Capture the update callbacks before the embedder API initializes.
293
283
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;
296
285
engine.embedderAPI .Initialize = MOCK_ENGINE_PROC (
297
- Initialize, ([&update_action_callback, &update_node_callback , &original_init](
286
+ Initialize, ([&update_semantics_callback , &original_init](
298
287
size_t version, const FlutterRendererConfig* config,
299
288
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 ;
302
290
return original_init (version, config, args, user_data, engine_out);
303
291
}));
304
292
EXPECT_TRUE ([engine runWithEntrypoint: @" main" ]);
@@ -336,7 +324,6 @@ @interface FlutterEngine (Test)
336
324
int32_t children[] = {1 };
337
325
root.children_in_traversal_order = children;
338
326
root.custom_accessibility_actions_count = 0 ;
339
- update_node_callback (&root, (void *)CFBridgingRetain (engine));
340
327
341
328
FlutterSemanticsNode child1;
342
329
child1.id = 1 ;
@@ -352,15 +339,13 @@ @interface FlutterEngine (Test)
352
339
child1.tooltip = " " ;
353
340
child1.child_count = 0 ;
354
341
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));
360
342
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));
364
349
365
350
auto native_root = engine.accessibilityBridge .lock ()->GetFlutterPlatformNodeDelegateFromID (0 );
366
351
EXPECT_FALSE (native_root.expired ());
0 commit comments