Index: ui/views/widget/widget_unittest.cc |
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc |
index 5bb82e6943d7910cdb4259df78913c24d080e51e..db8b112fd28889bade347cfc1a00ae74e7b2ed6f 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; |
sadrul
2015/12/22 08:13:34
How is this different from 'ScaleFactorView() {}'?
Andrey Kraynov
2015/12/22 08:38:57
Both forms of ctor will behave the same here.
But
|
+ |
+ // 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(); } |
+}; |
sadrul
2015/12/22 08:13:34
Hm, we should be using this in more tests above.
Andrey Kraynov
2015/12/22 08:38:57
Don't you mind if I will create a CL to use this p
|
+ |
+} |
+ |
+// 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 |