diff --git a/engine/src/flutter/lib/ui/semantics.dart b/engine/src/flutter/lib/ui/semantics.dart index 55fb0367c5e..fe7a9ab3ce4 100644 --- a/engine/src/flutter/lib/ui/semantics.dart +++ b/engine/src/flutter/lib/ui/semantics.dart @@ -654,8 +654,11 @@ class SemanticsUpdateBuilder extends NativeFieldWrapperClass2 { Int32List childrenInHitTestOrder, Int32List additionalActions, }) { - if (transform.length != 16) - throw new ArgumentError('transform argument must have 16 entries.'); + assert(_matrix4IsValid(transform)); + assert( + scrollChildren == 0 || (scrollChildren > 0 && childrenInHitTestOrder != null), + 'If a node has scrollChildren, it must have childrenInHitTestOrder', + ); _updateNode( id, flags, diff --git a/engine/src/flutter/lib/ui/semantics/semantics_update_builder.cc b/engine/src/flutter/lib/ui/semantics/semantics_update_builder.cc index 16c4ed213a5..a5b94199c23 100644 --- a/engine/src/flutter/lib/ui/semantics/semantics_update_builder.cc +++ b/engine/src/flutter/lib/ui/semantics/semantics_update_builder.cc @@ -4,6 +4,7 @@ #include "flutter/lib/ui/semantics/semantics_update_builder.h" +#include "third_party/skia/include/core/SkScalar.h" #include "third_party/tonic/converter/dart_converter.h" #include "third_party/tonic/dart_args.h" #include "third_party/tonic/dart_binding_macros.h" @@ -63,6 +64,12 @@ void SemanticsUpdateBuilder::updateNode( const tonic::Int32List& childrenInTraversalOrder, const tonic::Int32List& childrenInHitTestOrder, const tonic::Int32List& localContextActions) { + FML_CHECK(transform.data() && SkScalarsAreFinite(*transform.data(), 9)) + << "Semantics update transform was not set or not finite."; + FML_CHECK(scrollChildren == 0 || + (scrollChildren > 0 && childrenInHitTestOrder.data())) + << "Semantics update contained scrollChildren but did not have " + "childrenInHitTestOrder"; SemanticsNode node; node.id = id; node.flags = flags;