| OLD | NEW |
| 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 "ui/views/bubble/bubble_delegate.h" | 5 #include "ui/views/bubble/bubble_delegate.h" |
| 6 #include "ui/views/bubble/bubble_frame_view.h" | 6 #include "ui/views/bubble/bubble_frame_view.h" |
| 7 #include "ui/views/test/views_test_base.h" | 7 #include "ui/views/test/views_test_base.h" |
| 8 #include "ui/views/widget/widget.h" | 8 #include "ui/views/widget/widget.h" |
| 9 | 9 |
| 10 namespace views { | 10 namespace views { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 widget_->RemoveObserver(this); | 36 widget_->RemoveObserver(this); |
| 37 } | 37 } |
| 38 | 38 |
| 39 void TestWidgetObserver::OnWidgetClosing(Widget* widget) { | 39 void TestWidgetObserver::OnWidgetClosing(Widget* widget) { |
| 40 DCHECK_EQ(widget_, widget); | 40 DCHECK_EQ(widget_, widget); |
| 41 widget_ = NULL; | 41 widget_ = NULL; |
| 42 } | 42 } |
| 43 | 43 |
| 44 class TestBubbleDelegateView : public BubbleDelegateView { | 44 class TestBubbleDelegateView : public BubbleDelegateView { |
| 45 public: | 45 public: |
| 46 TestBubbleDelegateView(); | 46 TestBubbleDelegateView(View* anchor_view); |
| 47 virtual ~TestBubbleDelegateView(); | 47 virtual ~TestBubbleDelegateView(); |
| 48 | 48 |
| 49 virtual View* GetInitiallyFocusedView() OVERRIDE; | 49 virtual View* GetInitiallyFocusedView() OVERRIDE; |
| 50 | 50 |
| 51 private: | 51 private: |
| 52 View* view_; | 52 View* view_; |
| 53 }; | 53 }; |
| 54 | 54 |
| 55 TestBubbleDelegateView::TestBubbleDelegateView() : view_(new View()) { | 55 TestBubbleDelegateView::TestBubbleDelegateView(View* anchor_view) |
| 56 : BubbleDelegateView(anchor_view, BubbleBorder::TOP_LEFT), |
| 57 view_(new View()) { |
| 56 view_->set_focusable(true); | 58 view_->set_focusable(true); |
| 57 AddChildView(view_); | 59 AddChildView(view_); |
| 58 } | 60 } |
| 59 | 61 |
| 60 TestBubbleDelegateView::~TestBubbleDelegateView() {} | 62 TestBubbleDelegateView::~TestBubbleDelegateView() {} |
| 61 | 63 |
| 62 View* TestBubbleDelegateView::GetInitiallyFocusedView() { | 64 View* TestBubbleDelegateView::GetInitiallyFocusedView() { |
| 63 return view_; | 65 return view_; |
| 64 } | 66 } |
| 65 | 67 |
| 66 } // namespace | 68 } // namespace |
| 67 | 69 |
| 68 typedef ViewsTestBase BubbleDelegateTest; | 70 typedef ViewsTestBase BubbleDelegateTest; |
| 69 | 71 |
| 70 TEST_F(BubbleDelegateTest, CreateDelegate) { | 72 TEST_F(BubbleDelegateTest, CreateDelegate) { |
| 73 // Create the anchor and parent widgets. |
| 74 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW); |
| 75 scoped_ptr<Widget> anchor_widget(new Widget); |
| 76 anchor_widget->Init(params); |
| 77 anchor_widget->Show(); |
| 78 |
| 71 BubbleDelegateView* bubble_delegate = | 79 BubbleDelegateView* bubble_delegate = |
| 72 new BubbleDelegateView(NULL, BubbleBorder::NONE); | 80 new BubbleDelegateView(anchor_widget->GetContentsView(), |
| 81 BubbleBorder::NONE); |
| 73 bubble_delegate->set_color(SK_ColorGREEN); | 82 bubble_delegate->set_color(SK_ColorGREEN); |
| 74 Widget* bubble_widget( | 83 Widget* bubble_widget( |
| 75 BubbleDelegateView::CreateBubble(bubble_delegate)); | 84 BubbleDelegateView::CreateBubble(bubble_delegate)); |
| 76 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate()); | 85 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate()); |
| 77 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget()); | 86 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget()); |
| 78 TestWidgetObserver bubble_observer(bubble_widget); | 87 TestWidgetObserver bubble_observer(bubble_widget); |
| 79 EXPECT_FALSE(bubble_observer.widget_closed()); | 88 EXPECT_FALSE(bubble_observer.widget_closed()); |
| 80 | 89 |
| 81 BubbleBorder* border = | 90 BubbleBorder* border = |
| 82 bubble_delegate->GetBubbleFrameView()->bubble_border(); | 91 bubble_delegate->GetBubbleFrameView()->bubble_border(); |
| 83 EXPECT_EQ(bubble_delegate->arrow_location(), border->arrow_location()); | 92 EXPECT_EQ(bubble_delegate->arrow_location(), border->arrow_location()); |
| 84 EXPECT_EQ(bubble_delegate->color(), border->background_color()); | 93 EXPECT_EQ(bubble_delegate->color(), border->background_color()); |
| 85 | 94 |
| 86 bubble_widget->CloseNow(); | 95 bubble_widget->CloseNow(); |
| 87 RunPendingMessages(); | 96 RunPendingMessages(); |
| 88 EXPECT_TRUE(bubble_observer.widget_closed()); | 97 EXPECT_TRUE(bubble_observer.widget_closed()); |
| 89 } | 98 } |
| 90 | 99 |
| 91 TEST_F(BubbleDelegateTest, CloseAnchorWidget) { | 100 TEST_F(BubbleDelegateTest, CloseAnchorWidget) { |
| 92 // Create the anchor widget. | 101 // Create the anchor widget. |
| 93 Widget::InitParams params(Widget::InitParams::TYPE_WINDOW); | 102 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW); |
| 94 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | |
| 95 scoped_ptr<Widget> anchor_widget(new Widget); | 103 scoped_ptr<Widget> anchor_widget(new Widget); |
| 96 anchor_widget->Init(params); | 104 anchor_widget->Init(params); |
| 97 anchor_widget->Show(); | 105 anchor_widget->Show(); |
| 98 | 106 |
| 99 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( | 107 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( |
| 100 anchor_widget->GetContentsView(), BubbleBorder::NONE); | 108 anchor_widget->GetContentsView(), BubbleBorder::NONE); |
| 101 // Preventing close on deactivate should not prevent closing with the anchor. | 109 // Preventing close on deactivate should not prevent closing with the anchor. |
| 102 bubble_delegate->set_close_on_deactivate(false); | 110 bubble_delegate->set_close_on_deactivate(false); |
| 103 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); | 111 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); |
| 104 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate()); | 112 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 122 #endif | 130 #endif |
| 123 | 131 |
| 124 // Ensure that closing the anchor widget also closes the bubble itself. | 132 // Ensure that closing the anchor widget also closes the bubble itself. |
| 125 anchor_widget->CloseNow(); | 133 anchor_widget->CloseNow(); |
| 126 RunPendingMessages(); | 134 RunPendingMessages(); |
| 127 EXPECT_TRUE(bubble_observer.widget_closed()); | 135 EXPECT_TRUE(bubble_observer.widget_closed()); |
| 128 } | 136 } |
| 129 | 137 |
| 130 TEST_F(BubbleDelegateTest, ResetAnchorWidget) { | 138 TEST_F(BubbleDelegateTest, ResetAnchorWidget) { |
| 131 // Create the anchor and parent widgets. | 139 // Create the anchor and parent widgets. |
| 132 Widget::InitParams params(Widget::InitParams::TYPE_WINDOW); | 140 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW); |
| 133 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | |
| 134 scoped_ptr<Widget> anchor_widget(new Widget); | 141 scoped_ptr<Widget> anchor_widget(new Widget); |
| 135 anchor_widget->Init(params); | 142 anchor_widget->Init(params); |
| 136 anchor_widget->Show(); | 143 anchor_widget->Show(); |
| 137 scoped_ptr<Widget> parent_widget(new Widget); | 144 scoped_ptr<Widget> parent_widget(new Widget); |
| 138 parent_widget->Init(params); | 145 parent_widget->Init(params); |
| 139 parent_widget->Show(); | 146 parent_widget->Show(); |
| 140 | 147 |
| 141 // Make sure the bubble widget is parented to a widget other than the anchor | 148 // Make sure the bubble widget is parented to a widget other than the anchor |
| 142 // widget so that closing the anchor widget does not close the bubble widget. | 149 // widget so that closing the anchor widget does not close the bubble widget. |
| 143 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( | 150 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 EXPECT_FALSE(bubble_observer.widget_closed()); | 183 EXPECT_FALSE(bubble_observer.widget_closed()); |
| 177 #endif | 184 #endif |
| 178 | 185 |
| 179 // Ensure that closing the parent widget also closes the bubble itself. | 186 // Ensure that closing the parent widget also closes the bubble itself. |
| 180 parent_widget->CloseNow(); | 187 parent_widget->CloseNow(); |
| 181 RunPendingMessages(); | 188 RunPendingMessages(); |
| 182 EXPECT_TRUE(bubble_observer.widget_closed()); | 189 EXPECT_TRUE(bubble_observer.widget_closed()); |
| 183 } | 190 } |
| 184 | 191 |
| 185 TEST_F(BubbleDelegateTest, InitiallyFocusedView) { | 192 TEST_F(BubbleDelegateTest, InitiallyFocusedView) { |
| 186 TestBubbleDelegateView* bubble_delegate = new TestBubbleDelegateView(); | 193 // Create the anchor and parent widgets. |
| 194 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW); |
| 195 scoped_ptr<Widget> anchor_widget(new Widget); |
| 196 anchor_widget->Init(params); |
| 197 anchor_widget->Show(); |
| 198 |
| 199 TestBubbleDelegateView* bubble_delegate = |
| 200 new TestBubbleDelegateView(anchor_widget->GetContentsView()); |
| 187 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); | 201 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); |
| 188 bubble_widget->Show(); | 202 bubble_widget->Show(); |
| 189 | 203 |
| 190 View* expected_view = bubble_delegate->GetInitiallyFocusedView(); | 204 View* expected_view = bubble_delegate->GetInitiallyFocusedView(); |
| 191 // TODO(ben|msw): The NativeWidgetWin::RestoreFocusOnActivate() workaround for | 205 // TODO(ben|msw): The NativeWidgetWin::RestoreFocusOnActivate() workaround for |
| 192 // http://crbug.com/125976 breaks this simple test by clearing proper focus. | 206 // http://crbug.com/125976 breaks this simple test by clearing proper focus. |
| 193 #if defined(OS_WIN) && !defined(USE_AURA) | 207 #if defined(OS_WIN) && !defined(USE_AURA) |
| 194 expected_view = NULL; | 208 expected_view = NULL; |
| 195 #endif | 209 #endif |
| 196 | 210 |
| 197 EXPECT_EQ(expected_view, bubble_widget->GetFocusManager()->GetFocusedView()); | 211 EXPECT_EQ(expected_view, bubble_widget->GetFocusManager()->GetFocusedView()); |
| 198 bubble_widget->CloseNow(); | 212 bubble_widget->CloseNow(); |
| 199 } | 213 } |
| 200 | 214 |
| 201 } // namespace views | 215 } // namespace views |
| OLD | NEW |