diff options
Diffstat (limited to 'ui/views/widget/widget_unittest.cc')
-rw-r--r-- | ui/views/widget/widget_unittest.cc | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc index 5bb82e6..db8b112 100644 --- a/ui/views/widget/widget_unittest.cc +++ b/ui/views/widget/widget_unittest.cc @@ -3398,5 +3398,51 @@ TEST_F(WidgetTest, AlwaysOnTop) { widget->CloseNow(); } +namespace { + +class ScaleFactorView : public View { + public: + ScaleFactorView() = default; + + // Overridden from ui::LayerDelegate: + void OnDeviceScaleFactorChanged(float device_scale_factor) override { + last_scale_factor_ = device_scale_factor; + View::OnDeviceScaleFactorChanged(device_scale_factor); + } + + float last_scale_factor() const { return last_scale_factor_; }; + + private: + float last_scale_factor_ = 0.f; + + DISALLOW_COPY_AND_ASSIGN(ScaleFactorView); +}; + +struct WidgetCloser { + inline void operator()(Widget* widget) const { widget->CloseNow(); } +}; + +} + +// Ensure scale factor changes are propagated from the native Widget. +TEST_F(WidgetTest, OnDeviceScaleFactorChanged) { + // Automatically close the widget, but not delete it. + scoped_ptr<Widget, WidgetCloser> widget(CreateTopLevelPlatformWidget()); + ScaleFactorView* view = new ScaleFactorView; + widget->GetRootView()->AddChildView(view); + float scale_factor = widget->GetLayer()->device_scale_factor(); + EXPECT_NE(scale_factor, 0.f); + + // For views that are not layer-backed, adding the view won't notify the view + // about the initial scale factor. Fake it. + view->OnDeviceScaleFactorChanged(scale_factor); + EXPECT_EQ(scale_factor, view->last_scale_factor()); + + // Changes should be propagated. + scale_factor *= 2.0f; + widget->GetLayer()->OnDeviceScaleFactorChanged(scale_factor); + EXPECT_EQ(scale_factor, view->last_scale_factor()); +} + } // namespace test } // namespace views |