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 "base/run_loop.h" | 5 #include "base/run_loop.h" |
| 6 #include "ui/aura/env.h" |
6 #include "ui/base/hit_test.h" | 7 #include "ui/base/hit_test.h" |
7 #include "ui/views/bubble/bubble_delegate.h" | 8 #include "ui/views/bubble/bubble_delegate.h" |
8 #include "ui/views/bubble/bubble_frame_view.h" | 9 #include "ui/views/bubble/bubble_frame_view.h" |
9 #include "ui/views/test/test_widget_observer.h" | 10 #include "ui/views/test/test_widget_observer.h" |
10 #include "ui/views/test/views_test_base.h" | 11 #include "ui/views/test/views_test_base.h" |
11 #include "ui/views/widget/widget.h" | 12 #include "ui/views/widget/widget.h" |
12 #include "ui/views/widget/widget_observer.h" | 13 #include "ui/views/widget/widget_observer.h" |
13 | 14 |
14 #if defined(USE_AURA) | |
15 #include "ui/aura/env.h" | |
16 #endif | |
17 | |
18 namespace views { | 15 namespace views { |
19 | 16 |
20 namespace { | 17 namespace { |
21 | 18 |
22 class TestBubbleDelegateView : public BubbleDelegateView { | 19 class TestBubbleDelegateView : public BubbleDelegateView { |
23 public: | 20 public: |
24 TestBubbleDelegateView(View* anchor_view) | 21 TestBubbleDelegateView(View* anchor_view) |
25 : BubbleDelegateView(anchor_view, BubbleBorder::TOP_LEFT), | 22 : BubbleDelegateView(anchor_view, BubbleBorder::TOP_LEFT), |
26 view_(new View()) { | 23 view_(new View()) { |
27 view_->SetFocusable(true); | 24 view_->SetFocusable(true); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate()); | 95 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate()); |
99 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget()); | 96 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget()); |
100 EXPECT_EQ(anchor_widget, bubble_delegate->anchor_widget()); | 97 EXPECT_EQ(anchor_widget, bubble_delegate->anchor_widget()); |
101 test::TestWidgetObserver bubble_observer(bubble_widget); | 98 test::TestWidgetObserver bubble_observer(bubble_widget); |
102 EXPECT_FALSE(bubble_observer.widget_closed()); | 99 EXPECT_FALSE(bubble_observer.widget_closed()); |
103 | 100 |
104 bubble_widget->Show(); | 101 bubble_widget->Show(); |
105 EXPECT_EQ(anchor_widget, bubble_delegate->anchor_widget()); | 102 EXPECT_EQ(anchor_widget, bubble_delegate->anchor_widget()); |
106 EXPECT_FALSE(bubble_observer.widget_closed()); | 103 EXPECT_FALSE(bubble_observer.widget_closed()); |
107 | 104 |
108 #if defined(USE_AURA) | |
109 // TODO(msw): Remove activation hack to prevent bookkeeping errors in: | 105 // TODO(msw): Remove activation hack to prevent bookkeeping errors in: |
110 // aura::test::TestActivationClient::OnWindowDestroyed(). | 106 // aura::test::TestActivationClient::OnWindowDestroyed(). |
111 scoped_ptr<Widget> smoke_and_mirrors_widget(CreateTestWidget()); | 107 scoped_ptr<Widget> smoke_and_mirrors_widget(CreateTestWidget()); |
112 EXPECT_FALSE(bubble_observer.widget_closed()); | 108 EXPECT_FALSE(bubble_observer.widget_closed()); |
113 #endif | |
114 | 109 |
115 // Ensure that closing the anchor widget also closes the bubble itself. | 110 // Ensure that closing the anchor widget also closes the bubble itself. |
116 anchor_widget->CloseNow(); | 111 anchor_widget->CloseNow(); |
117 EXPECT_TRUE(bubble_observer.widget_closed()); | 112 EXPECT_TRUE(bubble_observer.widget_closed()); |
118 } | 113 } |
119 | 114 |
120 // This test checks that the bubble delegate is capable to handle an early | 115 // This test checks that the bubble delegate is capable to handle an early |
121 // destruction of the used anchor view. (Animations and delayed closure of the | 116 // destruction of the used anchor view. (Animations and delayed closure of the |
122 // bubble will call upon the anchor view to get its location). | 117 // bubble will call upon the anchor view to get its location). |
123 TEST_F(BubbleDelegateTest, CloseAnchorViewTest) { | 118 TEST_F(BubbleDelegateTest, CloseAnchorViewTest) { |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 EXPECT_EQ(anchor_widget, bubble_delegate->anchor_widget()); | 186 EXPECT_EQ(anchor_widget, bubble_delegate->anchor_widget()); |
192 bubble_widget->Hide(); | 187 bubble_widget->Hide(); |
193 EXPECT_EQ(anchor_widget, bubble_delegate->anchor_widget()); | 188 EXPECT_EQ(anchor_widget, bubble_delegate->anchor_widget()); |
194 | 189 |
195 // Ensure that closing the anchor widget clears the bubble's reference to that | 190 // Ensure that closing the anchor widget clears the bubble's reference to that |
196 // anchor widget, but the bubble itself does not close. | 191 // anchor widget, but the bubble itself does not close. |
197 anchor_widget->CloseNow(); | 192 anchor_widget->CloseNow(); |
198 EXPECT_NE(anchor_widget, bubble_delegate->anchor_widget()); | 193 EXPECT_NE(anchor_widget, bubble_delegate->anchor_widget()); |
199 EXPECT_FALSE(bubble_observer.widget_closed()); | 194 EXPECT_FALSE(bubble_observer.widget_closed()); |
200 | 195 |
201 #if defined(USE_AURA) | |
202 // TODO(msw): Remove activation hack to prevent bookkeeping errors in: | 196 // TODO(msw): Remove activation hack to prevent bookkeeping errors in: |
203 // aura::test::TestActivationClient::OnWindowDestroyed(). | 197 // aura::test::TestActivationClient::OnWindowDestroyed(). |
204 scoped_ptr<Widget> smoke_and_mirrors_widget(CreateTestWidget()); | 198 scoped_ptr<Widget> smoke_and_mirrors_widget(CreateTestWidget()); |
205 EXPECT_FALSE(bubble_observer.widget_closed()); | 199 EXPECT_FALSE(bubble_observer.widget_closed()); |
206 #endif | |
207 | 200 |
208 // Ensure that closing the parent widget also closes the bubble itself. | 201 // Ensure that closing the parent widget also closes the bubble itself. |
209 parent_widget->CloseNow(); | 202 parent_widget->CloseNow(); |
210 EXPECT_TRUE(bubble_observer.widget_closed()); | 203 EXPECT_TRUE(bubble_observer.widget_closed()); |
211 } | 204 } |
212 | 205 |
213 TEST_F(BubbleDelegateTest, InitiallyFocusedView) { | 206 TEST_F(BubbleDelegateTest, InitiallyFocusedView) { |
214 scoped_ptr<Widget> anchor_widget(CreateTestWidget()); | 207 scoped_ptr<Widget> anchor_widget(CreateTestWidget()); |
215 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( | 208 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( |
216 anchor_widget->GetContentsView(), BubbleBorder::NONE); | 209 anchor_widget->GetContentsView(), BubbleBorder::NONE); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 EXPECT_FALSE(bubble_widget->IsVisible()); | 251 EXPECT_FALSE(bubble_widget->IsVisible()); |
259 } | 252 } |
260 | 253 |
261 // This class provides functionality to verify that the BubbleView shows up | 254 // This class provides functionality to verify that the BubbleView shows up |
262 // when we call BubbleDelegateView::StartFade(true) and is destroyed when we | 255 // when we call BubbleDelegateView::StartFade(true) and is destroyed when we |
263 // call BubbleDelegateView::StartFade(false). | 256 // call BubbleDelegateView::StartFade(false). |
264 class BubbleWidgetClosingTest : public BubbleDelegateTest, | 257 class BubbleWidgetClosingTest : public BubbleDelegateTest, |
265 public views::WidgetObserver { | 258 public views::WidgetObserver { |
266 public: | 259 public: |
267 BubbleWidgetClosingTest() : bubble_destroyed_(false) { | 260 BubbleWidgetClosingTest() : bubble_destroyed_(false) { |
268 #if defined(USE_AURA) | |
269 aura::Env::CreateInstance(); | 261 aura::Env::CreateInstance(); |
270 loop_.set_dispatcher(aura::Env::GetInstance()->GetDispatcher()); | |
271 #endif | |
272 } | 262 } |
273 | 263 |
274 virtual ~BubbleWidgetClosingTest() {} | 264 virtual ~BubbleWidgetClosingTest() {} |
275 | 265 |
276 void Observe(views::Widget* widget) { | 266 void Observe(views::Widget* widget) { |
277 widget->AddObserver(this); | 267 widget->AddObserver(this); |
278 } | 268 } |
279 | 269 |
280 // views::WidgetObserver overrides. | 270 // views::WidgetObserver overrides. |
281 virtual void OnWidgetDestroyed(Widget* widget) OVERRIDE { | 271 virtual void OnWidgetDestroyed(Widget* widget) OVERRIDE { |
(...skipping 29 matching lines...) Expand all Loading... |
311 bubble_widget->GetFocusManager()->GetFocusedView()); | 301 bubble_widget->GetFocusManager()->GetFocusedView()); |
312 | 302 |
313 Observe(bubble_widget); | 303 Observe(bubble_widget); |
314 | 304 |
315 bubble_delegate->StartFade(false); | 305 bubble_delegate->StartFade(false); |
316 RunNestedLoop(); | 306 RunNestedLoop(); |
317 EXPECT_TRUE(bubble_destroyed()); | 307 EXPECT_TRUE(bubble_destroyed()); |
318 } | 308 } |
319 | 309 |
320 } // namespace views | 310 } // namespace views |
OLD | NEW |