diff --git a/lib/ui/hooks.dart b/lib/ui/hooks.dart index 923662dc41c..54c5033b40c 100644 --- a/lib/ui/hooks.dart +++ b/lib/ui/hooks.dart @@ -68,6 +68,9 @@ void _updateLocales(List locales) { @pragma('vm:entry-point') void _updateUserSettingsData(String jsonData) { final Map data = json.decode(jsonData); + if (data.isEmpty) { + return; + } _updateTextScaleFactor(data['textScaleFactor'].toDouble()); _updateAlwaysUse24HourFormat(data['alwaysUse24HourFormat']); } diff --git a/runtime/runtime_controller.cc b/runtime/runtime_controller.cc index 0beacff828f..e5b765a35f9 100644 --- a/runtime/runtime_controller.cc +++ b/runtime/runtime_controller.cc @@ -128,7 +128,8 @@ bool RuntimeController::FlushRuntimeStateToIsolate() { return SetViewportMetrics(window_data_.viewport_metrics) && SetLocales(window_data_.locale_data) && SetSemanticsEnabled(window_data_.semantics_enabled) && - SetAccessibilityFeatures(window_data_.accessibility_feature_flags_); + SetAccessibilityFeatures(window_data_.accessibility_feature_flags_) && + SetUserSettingsData(window_data_.user_settings_data); } bool RuntimeController::SetViewportMetrics(const ViewportMetrics& metrics) { diff --git a/testing/dart/window_hooks_integration_test.dart b/testing/dart/window_hooks_integration_test.dart index d6df903eb70..446f5ac8ab6 100644 --- a/testing/dart/window_hooks_integration_test.dart +++ b/testing/dart/window_hooks_integration_test.dart @@ -67,6 +67,12 @@ void main() { window.onTextScaleFactorChanged = originalOnTextScaleFactorChanged; }); + test('updateUserSettings can handle an empty object', () { + // this should now throw. + _updateUserSettingsData('{}'); + expect(true, equals(true)); + }); + test('onMetricsChanged preserves callback zone', () { Zone innerZone; Zone runZone;