diff --git a/display_list/effects/dl_image_filter.h b/display_list/effects/dl_image_filter.h index 6e6c68f196ec8..f7350e8bd767d 100644 --- a/display_list/effects/dl_image_filter.h +++ b/display_list/effects/dl_image_filter.h @@ -229,11 +229,15 @@ class DlBlurImageFilter final : public DlImageFilter { static std::shared_ptr Make(SkScalar sigma_x, SkScalar sigma_y, DlTileMode tile_mode) { - if (SkScalarIsFinite(sigma_x) && sigma_x > SK_ScalarNearlyZero && - SkScalarIsFinite(sigma_y) && sigma_y > SK_ScalarNearlyZero) { - return std::make_shared(sigma_x, sigma_y, tile_mode); + if (!SkScalarIsFinite(sigma_x) || !SkScalarIsFinite(sigma_y)) { + return nullptr; } - return nullptr; + if (sigma_x < SK_ScalarNearlyZero && sigma_y < SK_ScalarNearlyZero) { + return nullptr; + } + sigma_x = (sigma_x < SK_ScalarNearlyZero) ? 0 : sigma_x; + sigma_y = (sigma_y < SK_ScalarNearlyZero) ? 0 : sigma_y; + return std::make_shared(sigma_x, sigma_y, tile_mode); } std::shared_ptr shared() const override { diff --git a/display_list/effects/dl_image_filter_unittests.cc b/display_list/effects/dl_image_filter_unittests.cc index 422cb28dbb454..20aa47fc2fd10 100644 --- a/display_list/effects/dl_image_filter_unittests.cc +++ b/display_list/effects/dl_image_filter_unittests.cc @@ -209,6 +209,23 @@ TEST(DisplayListImageFilter, BlurBounds) { TestBounds(filter, input_bounds, expected_output_bounds); } +TEST(DisplayListImageFilter, BlurZeroSigma) { + std::shared_ptr filter = + DlBlurImageFilter::Make(0, 0, DlTileMode::kMirror); + ASSERT_EQ(filter, nullptr); + filter = DlBlurImageFilter::Make(3, SK_ScalarNaN, DlTileMode::kMirror); + ASSERT_EQ(filter, nullptr); + filter = DlBlurImageFilter::Make(SK_ScalarNaN, 3, DlTileMode::kMirror); + ASSERT_EQ(filter, nullptr); + filter = + DlBlurImageFilter::Make(SK_ScalarNaN, SK_ScalarNaN, DlTileMode::kMirror); + ASSERT_EQ(filter, nullptr); + filter = DlBlurImageFilter::Make(3, 0, DlTileMode::kMirror); + ASSERT_NE(filter, nullptr); + filter = DlBlurImageFilter::Make(0, 3, DlTileMode::kMirror); + ASSERT_NE(filter, nullptr); +} + TEST(DisplayListImageFilter, DilateConstructor) { DlDilateImageFilter filter(5.0, 6.0); } diff --git a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_with_negative_backdrop_filter_iPhone SE (3rd generation)_16.2_simulator.png b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_with_negative_backdrop_filter_iPhone SE (3rd generation)_16.2_simulator.png index bc5162bebdae3..769f186b1ca4c 100644 Binary files a/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_with_negative_backdrop_filter_iPhone SE (3rd generation)_16.2_simulator.png and b/testing/scenario_app/ios/Scenarios/ScenariosUITests/golden_platform_view_with_negative_backdrop_filter_iPhone SE (3rd generation)_16.2_simulator.png differ