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..7a20df46c23b253f4dfd25094166fac6739b22a9 100644 |
| --- a/ui/views/widget/widget_unittest.cc |
| +++ b/ui/views/widget/widget_unittest.cc |
| @@ -3621,5 +3621,99 @@ 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: |
| + const ui::ModalType type_; |
| + |
| + 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. |
| +TEST_F(WidgetTest, WindowModalOwnerDestroyedEnabledTest) { |
| + // top_level_widget owns owner_dialog_widget which owns owned_dialog_widget. |
| + Widget top_level_widget; |
| + Widget owner_dialog_widget; |
| + Widget owned_dialog_widget; |
| + // Create the 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 the owner modal dialog. |
| + // owner_dialog_delegate instance will be destroyed when the dialog |
| + // is destroyed. |
| + ModalDialogDelegate* owner_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 = owner_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(); |
| + |
| + // Create the owned modal dialog. |
| + // As above, the owned_dialog_instance instance will be destroyed |
| + // when the dialog is destroyed. |
| + ModalDialogDelegate* owned_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 = owned_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 |
|
sadrul
2016/05/19 19:43:57
#endif // defined(OS_WIN)
kylix_rd
2016/05/19 19:48:55
Done.
|
| + |
| } // namespace test |
| } // namespace views |