Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(294)

Side by Side Diff: ui/views/widget/widget_unittest.cc

Issue 1978163003: Restore enabled state if a "modal" window is destroyed by an owner (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added unit test to ensure windows are re-enabled after an owner dialog/popup is destroyed Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | ui/views/win/hwnd_message_handler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 #include <memory> 6 #include <memory>
7 #include <set> 7 #include <set>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 3603 matching lines...) Expand 10 before | Expand all | Expand 10 after
3614 EXPECT_FALSE(removals_observer.DidRemoveView(child)); 3614 EXPECT_FALSE(removals_observer.DidRemoveView(child));
3615 3615
3616 // Moving the child to a different widget should call the removals observer. 3616 // Moving the child to a different widget should call the removals observer.
3617 WidgetAutoclosePtr widget2(CreateTopLevelPlatformWidget()); 3617 WidgetAutoclosePtr widget2(CreateTopLevelPlatformWidget());
3618 widget2->client_view()->AddChildView(child); 3618 widget2->client_view()->AddChildView(child);
3619 EXPECT_TRUE(removals_observer.DidRemoveView(child)); 3619 EXPECT_TRUE(removals_observer.DidRemoveView(child));
3620 3620
3621 widget->RemoveRemovalsObserver(&removals_observer); 3621 widget->RemoveRemovalsObserver(&removals_observer);
3622 } 3622 }
3623 3623
3624 #if defined(OS_WIN)
3625
3626 // Provides functionality to create a window modal dialog.
3627 class ModalDialogDelegate : public DialogDelegateView {
3628 public:
3629 explicit ModalDialogDelegate(ui::ModalType type) : type_(type) {}
3630 ~ModalDialogDelegate() override {}
3631
3632 // WidgetDelegate overrides.
3633 ui::ModalType GetModalType() const override { return type_; }
3634
3635 private:
3636 ui::ModalType type_;
sky 2016/05/19 16:20:16 nit: const
kylix_rd 2016/05/19 16:43:10 Done.
3637
3638 DISALLOW_COPY_AND_ASSIGN(ModalDialogDelegate);
3639 };
3640
3641 // Tests the case where an intervening owner popup window is destroyed out from
3642 // under the currently active modal top-level window. In this instance, the
3643 // 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.
3644 TEST_F(WidgetTest, WindowModalOwnerDestroyedEnabledTest) {
3645 // Create a top level widget.
3646 Widget top_level_widget;
3647 Widget::InitParams init_params =
3648 CreateParams(Widget::InitParams::TYPE_WINDOW);
3649 init_params.show_state = ui::SHOW_STATE_NORMAL;
3650 gfx::Rect initial_bounds(0, 0, 500, 500);
3651 init_params.bounds = initial_bounds;
3652 init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
3653 init_params.native_widget = CreatePlatformDesktopNativeWidgetImpl(
3654 init_params, &top_level_widget, nullptr);
3655 top_level_widget.Init(init_params);
3656 top_level_widget.Show();
3657
3658 // Create a modal dialog.
3659 // 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.
3660 Widget owner_dialog_widget;
3661 ModalDialogDelegate* dialog_delegate =
3662 new ModalDialogDelegate(ui::MODAL_TYPE_WINDOW);
3663
3664 init_params = CreateParams(Widget::InitParams::TYPE_WINDOW);
3665 init_params.show_state = ui::SHOW_STATE_NORMAL;
3666 init_params.bounds = gfx::Rect(100, 100, 200, 200);
3667 init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
3668 init_params.delegate = dialog_delegate;
3669 init_params.parent = top_level_widget.GetNativeView();
3670 init_params.native_widget = CreatePlatformDesktopNativeWidgetImpl(
3671 init_params, &owner_dialog_widget, nullptr);
3672 owner_dialog_widget.Init(init_params);
3673
3674 HWND owner_hwnd = HWNDForWidget(&owner_dialog_widget);
3675
3676 owner_dialog_widget.Show();
3677
3678 // 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.
3679 // 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.
3680 Widget owned_dialog_widget;
3681 dialog_delegate =
3682 new ModalDialogDelegate(ui::MODAL_TYPE_WINDOW);
3683
3684 init_params = CreateParams(Widget::InitParams::TYPE_WINDOW);
3685 init_params.show_state = ui::SHOW_STATE_NORMAL;
3686 init_params.bounds = gfx::Rect(150, 150, 250, 250);
3687 init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
3688 init_params.delegate = dialog_delegate;
3689 init_params.parent = owner_dialog_widget.GetNativeView();
3690 init_params.native_widget = CreatePlatformDesktopNativeWidgetImpl(
3691 init_params, &owned_dialog_widget, nullptr);
3692 owned_dialog_widget.Init(init_params);
3693
3694 HWND owned_hwnd = HWNDForWidget(&owned_dialog_widget);
3695
3696 owned_dialog_widget.Show();
3697
3698 HWND top_hwnd = HWNDForWidget(&top_level_widget);
3699
3700 EXPECT_FALSE(!!IsWindowEnabled(owner_hwnd));
3701 EXPECT_FALSE(!!IsWindowEnabled(top_hwnd));
3702 EXPECT_TRUE(!!IsWindowEnabled(owned_hwnd));
3703
3704 owner_dialog_widget.CloseNow();
3705
3706 EXPECT_FALSE(!!IsWindow(owner_hwnd));
3707 EXPECT_FALSE(!!IsWindow(owned_hwnd));
3708 EXPECT_TRUE(!!IsWindowEnabled(top_hwnd));
3709
3710 top_level_widget.CloseNow();
3711 }
3712
3713 #endif
3714
3624 } // namespace test 3715 } // namespace test
3625 } // namespace views 3716 } // namespace views
OLDNEW
« no previous file with comments | « no previous file | ui/views/win/hwnd_message_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698