summaryrefslogtreecommitdiff
path: root/chromium/ui/views/widget/native_widget_aura_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ui/views/widget/native_widget_aura_unittest.cc')
-rw-r--r--chromium/ui/views/widget/native_widget_aura_unittest.cc169
1 files changed, 103 insertions, 66 deletions
diff --git a/chromium/ui/views/widget/native_widget_aura_unittest.cc b/chromium/ui/views/widget/native_widget_aura_unittest.cc
index 4ddad6d7a06..5bd2526da57 100644
--- a/chromium/ui/views/widget/native_widget_aura_unittest.cc
+++ b/chromium/ui/views/widget/native_widget_aura_unittest.cc
@@ -5,6 +5,7 @@
#include "ui/views/widget/native_widget_aura.h"
#include <memory>
+#include <utility>
#include "base/command_line.h"
#include "base/macros.h"
@@ -33,7 +34,7 @@ namespace {
NativeWidgetAura* Init(aura::Window* parent, Widget* widget) {
Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
- params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.parent = parent;
widget->Init(std::move(params));
return static_cast<NativeWidgetAura*>(widget->native_widget());
@@ -97,9 +98,7 @@ TEST_F(NativeWidgetAuraTest, CenterWindowLargeParent) {
NativeWidgetAura* window = Init(parent.get(), widget.get());
window->CenterWindow(gfx::Size(100, 100));
- EXPECT_EQ(gfx::Rect((640 - 100) / 2,
- (480 - 100) / 2,
- 100, 100),
+ EXPECT_EQ(gfx::Rect((640 - 100) / 2, (480 - 100) / 2, 100, 100),
window->GetNativeWindow()->bounds());
widget->CloseNow();
}
@@ -114,9 +113,7 @@ TEST_F(NativeWidgetAuraTest, CenterWindowSmallParent) {
NativeWidgetAura* window = Init(parent.get(), widget.get());
window->CenterWindow(gfx::Size(100, 100));
- EXPECT_EQ(gfx::Rect((480 - 100) / 2,
- (320 - 100) / 2,
- 100, 100),
+ EXPECT_EQ(gfx::Rect((480 - 100) / 2, (320 - 100) / 2, 100, 100),
window->GetNativeWindow()->bounds());
widget->CloseNow();
}
@@ -158,9 +155,7 @@ class TestWindowObserver : public aura::WindowObserver {
explicit TestWindowObserver(gfx::NativeWindow window) : window_(window) {
window_->AddObserver(this);
}
- ~TestWindowObserver() override {
- window_->RemoveObserver(this);
- }
+ ~TestWindowObserver() override { window_->RemoveObserver(this); }
// aura::WindowObserver:
void OnWindowPropertyChanged(aura::Window* window,
@@ -181,7 +176,7 @@ class TestWindowObserver : public aura::WindowObserver {
int count_ = 0;
ui::WindowShowState state_ = ui::WindowShowState::SHOW_STATE_DEFAULT;
- DISALLOW_COPY_AND_ASSIGN(TestWindowObserver);
+ DISALLOW_COPY_AND_ASSIGN(TestWindowObserver);
};
// Tests that window transitions from normal to minimized and back do not
@@ -255,7 +250,7 @@ class MaximizeLayoutManager : public TestLayoutManagerBase {
// This simulates BrowserView, which creates a custom RootView so that
// OnNativeWidgetSizeChanged that is invoked during Init matters.
-class TestWidget : public views::Widget {
+class TestWidget : public Widget {
public:
TestWidget() = default;
@@ -289,7 +284,7 @@ TEST_F(NativeWidgetAuraTest, ShowMaximizedDoesntBounceAround) {
root_window()->SetLayoutManager(new MaximizeLayoutManager);
std::unique_ptr<TestWidget> widget(new TestWidget());
Widget::InitParams params(Widget::InitParams::TYPE_WINDOW);
- params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.parent = nullptr;
params.context = root_window();
params.show_state = ui::SHOW_STATE_MAXIMIZED;
@@ -321,13 +316,13 @@ class PropertyTestLayoutManager : public TestLayoutManagerBase {
DISALLOW_COPY_AND_ASSIGN(PropertyTestLayoutManager);
};
-class PropertyTestWidgetDelegate : public views::WidgetDelegate {
+class PropertyTestWidgetDelegate : public WidgetDelegate {
public:
explicit PropertyTestWidgetDelegate(Widget* widget) : widget_(widget) {}
~PropertyTestWidgetDelegate() override = default;
private:
- // views::WidgetDelegate:
+ // WidgetDelegate:
bool CanMaximize() const override { return true; }
bool CanMinimize() const override { return true; }
bool CanResize() const override { return true; }
@@ -346,7 +341,7 @@ TEST_F(NativeWidgetAuraTest, TestPropertiesWhenAddedToLayout) {
root_window()->SetLayoutManager(layout_manager);
std::unique_ptr<TestWidget> widget(new TestWidget());
Widget::InitParams params(Widget::InitParams::TYPE_WINDOW);
- params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.delegate = new PropertyTestWidgetDelegate(widget.get());
params.parent = nullptr;
params.context = root_window();
@@ -358,7 +353,7 @@ TEST_F(NativeWidgetAuraTest, TestPropertiesWhenAddedToLayout) {
TEST_F(NativeWidgetAuraTest, GetClientAreaScreenBounds) {
// Create a widget.
Widget::InitParams params(Widget::InitParams::TYPE_WINDOW);
- params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.context = root_window();
params.bounds.SetRect(10, 20, 300, 400);
std::unique_ptr<Widget> widget(new Widget());
@@ -373,20 +368,14 @@ TEST_F(NativeWidgetAuraTest, GetClientAreaScreenBounds) {
}
// View subclass that tracks whether it has gotten a gesture event.
-class GestureTrackingView : public views::View {
+class GestureTrackingView : public View {
public:
GestureTrackingView() = default;
- void set_consume_gesture_event(bool value) {
- consume_gesture_event_ = value;
- }
+ void set_consume_gesture_event(bool value) { consume_gesture_event_ = value; }
- void clear_got_gesture_event() {
- got_gesture_event_ = false;
- }
- bool got_gesture_event() const {
- return got_gesture_event_;
- }
+ void clear_got_gesture_event() { got_gesture_event_ = false; }
+ bool got_gesture_event() const { return got_gesture_event_; }
// View overrides:
void OnGestureEvent(ui::GestureEvent* event) override {
@@ -417,7 +406,7 @@ TEST_F(NativeWidgetAuraTest, DontCaptureOnGesture) {
view->AddChildView(child);
std::unique_ptr<TestWidget> widget(new TestWidget());
Widget::InitParams params(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
- params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.context = root_window();
params.bounds = gfx::Rect(0, 0, 100, 200);
widget->Init(std::move(params));
@@ -447,20 +436,15 @@ TEST_F(NativeWidgetAuraTest, DontCaptureOnGesture) {
EXPECT_TRUE(view->got_gesture_event());
EXPECT_FALSE(child->got_gesture_event());
view->clear_got_gesture_event();
-
- // Work around for bug in NativeWidgetAura.
- // TODO: fix bug and remove this.
- widget->Close();
}
// Verifies views with layers are targeted for events properly.
TEST_F(NativeWidgetAuraTest, PreferViewLayersToChildWindows) {
// Create two widgets: |parent| and |child|. |child| is a child of |parent|.
- views::View* parent_root = new views::View;
+ View* parent_root = new View;
std::unique_ptr<Widget> parent(new Widget());
Widget::InitParams parent_params(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
- parent_params.ownership =
- views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ parent_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
parent_params.context = root_window();
parent->Init(std::move(parent_params));
parent->SetContentsView(parent_root);
@@ -469,51 +453,46 @@ TEST_F(NativeWidgetAuraTest, PreferViewLayersToChildWindows) {
std::unique_ptr<Widget> child(new Widget());
Widget::InitParams child_params(Widget::InitParams::TYPE_CONTROL);
- child_params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ child_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
child_params.parent = parent->GetNativeWindow();
child->Init(std::move(child_params));
child->SetBounds(gfx::Rect(0, 0, 200, 200));
child->Show();
// Point is over |child|.
- EXPECT_EQ(child->GetNativeWindow(),
- parent->GetNativeWindow()->GetEventHandlerForPoint(
- gfx::Point(50, 50)));
+ EXPECT_EQ(
+ child->GetNativeWindow(),
+ parent->GetNativeWindow()->GetEventHandlerForPoint(gfx::Point(50, 50)));
// Create a view with a layer and stack it at the bottom (below |child|).
- views::View* view_with_layer = new views::View;
+ View* view_with_layer = new View;
parent_root->AddChildView(view_with_layer);
view_with_layer->SetBounds(0, 0, 50, 50);
view_with_layer->SetPaintToLayer();
// Make sure that |child| still gets the event.
- EXPECT_EQ(child->GetNativeWindow(),
- parent->GetNativeWindow()->GetEventHandlerForPoint(
- gfx::Point(20, 20)));
+ EXPECT_EQ(
+ child->GetNativeWindow(),
+ parent->GetNativeWindow()->GetEventHandlerForPoint(gfx::Point(20, 20)));
// Move |view_with_layer| to the top and make sure it gets the
// event when the point is within |view_with_layer|'s bounds.
- view_with_layer->layer()->parent()->StackAtTop(
- view_with_layer->layer());
- EXPECT_EQ(parent->GetNativeWindow(),
- parent->GetNativeWindow()->GetEventHandlerForPoint(
- gfx::Point(20, 20)));
+ view_with_layer->layer()->parent()->StackAtTop(view_with_layer->layer());
+ EXPECT_EQ(
+ parent->GetNativeWindow(),
+ parent->GetNativeWindow()->GetEventHandlerForPoint(gfx::Point(20, 20)));
// Point is over |child|, it should get the event.
- EXPECT_EQ(child->GetNativeWindow(),
- parent->GetNativeWindow()->GetEventHandlerForPoint(
- gfx::Point(70, 70)));
+ EXPECT_EQ(
+ child->GetNativeWindow(),
+ parent->GetNativeWindow()->GetEventHandlerForPoint(gfx::Point(70, 70)));
delete view_with_layer;
view_with_layer = nullptr;
- EXPECT_EQ(child->GetNativeWindow(),
- parent->GetNativeWindow()->GetEventHandlerForPoint(
- gfx::Point(20, 20)));
-
- // Work around for bug in NativeWidgetAura.
- // TODO: fix bug and remove this.
- parent->Close();
+ EXPECT_EQ(
+ child->GetNativeWindow(),
+ parent->GetNativeWindow()->GetEventHandlerForPoint(gfx::Point(20, 20)));
}
// Verifies views with layers are targeted for events properly.
@@ -570,7 +549,7 @@ TEST_F(NativeWidgetAuraTest, FlashFrame) {
std::unique_ptr<Widget> widget(new Widget());
Widget::InitParams params(Widget::InitParams::TYPE_WINDOW);
params.context = root_window();
- params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
widget->Init(std::move(params));
aura::Window* window = widget->GetNativeWindow();
EXPECT_FALSE(window->GetProperty(aura::client::kDrawAttentionKey));
@@ -621,14 +600,12 @@ class MoveTestWidgetDelegate : public WidgetDelegateView {
TEST_F(NativeWidgetAuraTest, OnWidgetMovedInvokedAfterAcquireLayer) {
// |delegate| deletes itself when the widget is destroyed.
MoveTestWidgetDelegate* delegate = new MoveTestWidgetDelegate;
- Widget* widget =
- Widget::CreateWindowWithContextAndBounds(delegate,
- root_window(),
- gfx::Rect(10, 10, 100, 200));
+ Widget* widget = Widget::CreateWindowWithContext(delegate, root_window(),
+ gfx::Rect(10, 10, 100, 200));
widget->Show();
delegate->ClearGotMove();
// Simulate a maximize with animation.
- delete widget->GetNativeView()->RecreateLayer().release();
+ widget->GetNativeView()->RecreateLayer();
widget->SetBounds(gfx::Rect(0, 0, 500, 500));
EXPECT_TRUE(delegate->got_move());
widget->CloseNow();
@@ -639,12 +616,12 @@ TEST_F(NativeWidgetAuraTest, OnWidgetMovedInvokedAfterAcquireLayer) {
// can not be activated.
TEST_F(NativeWidgetAuraTest, PreventFocusOnNonActivableWindow) {
test_focus_rules()->set_can_activate(false);
- views::test::TestInitialFocusWidgetDelegate delegate(root_window());
+ test::TestInitialFocusWidgetDelegate delegate(root_window());
delegate.GetWidget()->Show();
EXPECT_FALSE(delegate.view()->HasFocus());
test_focus_rules()->set_can_activate(true);
- views::test::TestInitialFocusWidgetDelegate delegate2(root_window());
+ test::TestInitialFocusWidgetDelegate delegate2(root_window());
delegate2.GetWidget()->Show();
EXPECT_TRUE(delegate2.view()->HasFocus());
}
@@ -683,5 +660,65 @@ TEST_F(NativeWidgetAuraTest, VisibilityOfChildBubbleWindow) {
EXPECT_TRUE(child.IsVisible());
}
+class ModalWidgetDelegate : public WidgetDelegate {
+ public:
+ explicit ModalWidgetDelegate(Widget* widget) : widget_(widget) {}
+ ~ModalWidgetDelegate() override = default;
+
+ // WidgetDelegate:
+ void DeleteDelegate() override { delete this; }
+ Widget* GetWidget() override { return widget_; }
+ const Widget* GetWidget() const override { return widget_; }
+ ui::ModalType GetModalType() const override {
+ return ui::ModalType::MODAL_TYPE_WINDOW;
+ }
+
+ private:
+ Widget* widget_;
+
+ DISALLOW_COPY_AND_ASSIGN(ModalWidgetDelegate);
+};
+
+// Tests that for a child transient window, if its modal type is
+// ui::MODAL_TYPE_WINDOW, then its visibility is controlled by its transient
+// parent's visibility.
+TEST_F(NativeWidgetAuraTest, TransientChildModalWindowVisibility) {
+ // Create a parent window.
+ Widget parent;
+ Widget::InitParams parent_params(Widget::InitParams::TYPE_WINDOW);
+ parent_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ parent_params.context = root_window();
+ parent.Init(std::move(parent_params));
+ parent.SetBounds(gfx::Rect(0, 0, 400, 400));
+ parent.Show();
+ EXPECT_TRUE(parent.IsVisible());
+
+ // Create a ui::MODAL_TYPE_WINDOW modal type transient child window.
+ Widget child;
+ Widget::InitParams child_params(Widget::InitParams::TYPE_WINDOW);
+ child_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ child_params.parent = parent.GetNativeWindow();
+ child_params.delegate = new ModalWidgetDelegate(&child);
+ child.Init(std::move(child_params));
+ child.SetBounds(gfx::Rect(0, 0, 200, 200));
+ child.Show();
+ EXPECT_TRUE(parent.IsVisible());
+ EXPECT_TRUE(child.IsVisible());
+
+ // Hide the parent window should also hide the child window.
+ parent.Hide();
+ EXPECT_FALSE(parent.IsVisible());
+ EXPECT_FALSE(child.IsVisible());
+
+ // The child window can't be shown if the parent window is hidden.
+ child.Show();
+ EXPECT_FALSE(parent.IsVisible());
+ EXPECT_FALSE(child.IsVisible());
+
+ parent.Show();
+ EXPECT_TRUE(parent.IsVisible());
+ EXPECT_TRUE(child.IsVisible());
+}
+
} // namespace
} // namespace views