Chromium Code Reviews| Index: ui/views/widget/widget_unittest.cc |
| diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc |
| index 0b11a970a5a4b620474311576caaebdf62fce94e..8635f48ef5c154164bba66f03fbd2b7aa4eac42b 100644 |
| --- a/ui/views/widget/widget_unittest.cc |
| +++ b/ui/views/widget/widget_unittest.cc |
| @@ -3621,5 +3621,96 @@ TEST_F(WidgetTest, WidgetRemovalsObserverCalledWhenMovingBetweenWidgets) { |
| widget->RemoveRemovalsObserver(&removals_observer); |
| } |
| +#if defined(OS_WIN) |
| + |
| +// Provides functionality to create a window modal dialog. |
| +class ModalDialogDelegate : public DialogDelegateView { |
| +public: |
| + explicit ModalDialogDelegate(ui::ModalType type) : type_(type) {} |
| + ~ModalDialogDelegate() override {} |
| + |
| + // WidgetDelegate overrides. |
| + ui::ModalType GetModalType() const override { return type_; } |
| + |
| +private: |
| + ui::ModalType type_; |
|
sky
2016/05/19 16:20:16
nit: const
kylix_rd
2016/05/19 16:43:10
Done.
|
| + |
| + DISALLOW_COPY_AND_ASSIGN(ModalDialogDelegate); |
| +}; |
| + |
| +// Tests the case where an intervening owner popup window is destroyed out from |
| +// under the currently active modal top-level window. In this instance, the |
| +// remaining top-level windows should be re-enabled |
|
sky
2016/05/19 16:20:16
nit: end with '.'.
kylix_rd
2016/05/19 16:43:10
Done.
|
| +TEST_F(WidgetTest, WindowModalOwnerDestroyedEnabledTest) { |
| + // Create a top level widget. |
| + Widget top_level_widget; |
| + Widget::InitParams init_params = |
| + CreateParams(Widget::InitParams::TYPE_WINDOW); |
| + init_params.show_state = ui::SHOW_STATE_NORMAL; |
| + gfx::Rect initial_bounds(0, 0, 500, 500); |
| + init_params.bounds = initial_bounds; |
| + init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| + init_params.native_widget = CreatePlatformDesktopNativeWidgetImpl( |
| + init_params, &top_level_widget, nullptr); |
| + top_level_widget.Init(init_params); |
| + top_level_widget.Show(); |
| + |
| + // Create a modal dialog. |
| + // This instance will be destroyed when the dialog is destroyed. |
|
sky
2016/05/19 16:20:16
'this' is confusing here. As the comment is right
kylix_rd
2016/05/19 16:43:10
Done.
|
| + Widget owner_dialog_widget; |
| + ModalDialogDelegate* dialog_delegate = |
| + new ModalDialogDelegate(ui::MODAL_TYPE_WINDOW); |
| + |
| + init_params = CreateParams(Widget::InitParams::TYPE_WINDOW); |
| + init_params.show_state = ui::SHOW_STATE_NORMAL; |
| + init_params.bounds = gfx::Rect(100, 100, 200, 200); |
| + init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| + init_params.delegate = dialog_delegate; |
| + init_params.parent = top_level_widget.GetNativeView(); |
| + init_params.native_widget = CreatePlatformDesktopNativeWidgetImpl( |
| + init_params, &owner_dialog_widget, nullptr); |
| + owner_dialog_widget.Init(init_params); |
| + |
| + HWND owner_hwnd = HWNDForWidget(&owner_dialog_widget); |
| + |
| + owner_dialog_widget.Show(); |
| + |
| + // Now Create an owned modal dialog |
|
sky
2016/05/19 16:20:16
nit: end with '.'
kylix_rd
2016/05/19 16:43:10
Done.
|
| + // Like above, this instance will be destroyed when the dialog is destroyed. |
|
sky
2016/05/19 16:20:16
Similar comment. Also, it would more clear if you
kylix_rd
2016/05/19 16:43:10
Done.
|
| + Widget owned_dialog_widget; |
| + dialog_delegate = |
| + new ModalDialogDelegate(ui::MODAL_TYPE_WINDOW); |
| + |
| + init_params = CreateParams(Widget::InitParams::TYPE_WINDOW); |
| + init_params.show_state = ui::SHOW_STATE_NORMAL; |
| + init_params.bounds = gfx::Rect(150, 150, 250, 250); |
| + init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| + init_params.delegate = dialog_delegate; |
| + init_params.parent = owner_dialog_widget.GetNativeView(); |
| + init_params.native_widget = CreatePlatformDesktopNativeWidgetImpl( |
| + init_params, &owned_dialog_widget, nullptr); |
| + owned_dialog_widget.Init(init_params); |
| + |
| + HWND owned_hwnd = HWNDForWidget(&owned_dialog_widget); |
| + |
| + owned_dialog_widget.Show(); |
| + |
| + HWND top_hwnd = HWNDForWidget(&top_level_widget); |
| + |
| + EXPECT_FALSE(!!IsWindowEnabled(owner_hwnd)); |
| + EXPECT_FALSE(!!IsWindowEnabled(top_hwnd)); |
| + EXPECT_TRUE(!!IsWindowEnabled(owned_hwnd)); |
| + |
| + owner_dialog_widget.CloseNow(); |
| + |
| + EXPECT_FALSE(!!IsWindow(owner_hwnd)); |
| + EXPECT_FALSE(!!IsWindow(owned_hwnd)); |
| + EXPECT_TRUE(!!IsWindowEnabled(top_hwnd)); |
| + |
| + top_level_widget.CloseNow(); |
| +} |
| + |
| +#endif |
| + |
| } // namespace test |
| } // namespace views |