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 "ash/shelf/shelf_view.h" | 5 #include "ash/shelf/shelf_view.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "ash/ash_switches.h" | 10 #include "ash/ash_switches.h" |
11 #include "ash/launcher/launcher.h" | |
12 #include "ash/launcher/launcher_types.h" | 11 #include "ash/launcher/launcher_types.h" |
13 #include "ash/root_window_controller.h" | 12 #include "ash/root_window_controller.h" |
14 #include "ash/shelf/overflow_bubble.h" | 13 #include "ash/shelf/overflow_bubble.h" |
15 #include "ash/shelf/overflow_bubble_view.h" | 14 #include "ash/shelf/overflow_bubble_view.h" |
| 15 #include "ash/shelf/shelf.h" |
16 #include "ash/shelf/shelf_button.h" | 16 #include "ash/shelf/shelf_button.h" |
17 #include "ash/shelf/shelf_icon_observer.h" | 17 #include "ash/shelf/shelf_icon_observer.h" |
18 #include "ash/shelf/shelf_item_delegate_manager.h" | 18 #include "ash/shelf/shelf_item_delegate_manager.h" |
19 #include "ash/shelf/shelf_layout_manager.h" | 19 #include "ash/shelf/shelf_layout_manager.h" |
20 #include "ash/shelf/shelf_model.h" | 20 #include "ash/shelf/shelf_model.h" |
21 #include "ash/shelf/shelf_tooltip_manager.h" | 21 #include "ash/shelf/shelf_tooltip_manager.h" |
22 #include "ash/shelf/shelf_widget.h" | 22 #include "ash/shelf/shelf_widget.h" |
23 #include "ash/shell.h" | 23 #include "ash/shell.h" |
24 #include "ash/shell_window_ids.h" | 24 #include "ash/shell_window_ids.h" |
25 #include "ash/test/ash_test_base.h" | 25 #include "ash/test/ash_test_base.h" |
26 #include "ash/test/launcher_test_api.h" | |
27 #include "ash/test/overflow_bubble_view_test_api.h" | 26 #include "ash/test/overflow_bubble_view_test_api.h" |
| 27 #include "ash/test/shelf_test_api.h" |
28 #include "ash/test/shelf_view_test_api.h" | 28 #include "ash/test/shelf_view_test_api.h" |
29 #include "ash/test/shell_test_api.h" | 29 #include "ash/test/shell_test_api.h" |
30 #include "ash/test/test_shelf_delegate.h" | 30 #include "ash/test/test_shelf_delegate.h" |
31 #include "ash/test/test_shelf_item_delegate.h" | 31 #include "ash/test/test_shelf_item_delegate.h" |
32 #include "ash/wm/coordinate_conversion.h" | 32 #include "ash/wm/coordinate_conversion.h" |
33 #include "base/basictypes.h" | 33 #include "base/basictypes.h" |
34 #include "base/command_line.h" | 34 #include "base/command_line.h" |
35 #include "base/compiler_specific.h" | 35 #include "base/compiler_specific.h" |
36 #include "base/memory/scoped_ptr.h" | 36 #include "base/memory/scoped_ptr.h" |
37 #include "base/strings/string_number_conversions.h" | 37 #include "base/strings/string_number_conversions.h" |
(...skipping 11 matching lines...) Expand all Loading... |
49 #include "ui/views/widget/widget_delegate.h" | 49 #include "ui/views/widget/widget_delegate.h" |
50 | 50 |
51 namespace ash { | 51 namespace ash { |
52 namespace test { | 52 namespace test { |
53 | 53 |
54 //////////////////////////////////////////////////////////////////////////////// | 54 //////////////////////////////////////////////////////////////////////////////// |
55 // ShelfIconObserver tests. | 55 // ShelfIconObserver tests. |
56 | 56 |
57 class TestShelfIconObserver : public ShelfIconObserver { | 57 class TestShelfIconObserver : public ShelfIconObserver { |
58 public: | 58 public: |
59 explicit TestShelfIconObserver(Launcher* launcher) | 59 explicit TestShelfIconObserver(Shelf* shelf) |
60 : launcher_(launcher), | 60 : shelf_(shelf), |
61 change_notified_(false) { | 61 change_notified_(false) { |
62 if (launcher_) | 62 if (shelf_) |
63 launcher_->AddIconObserver(this); | 63 shelf_->AddIconObserver(this); |
64 } | 64 } |
65 | 65 |
66 virtual ~TestShelfIconObserver() { | 66 virtual ~TestShelfIconObserver() { |
67 if (launcher_) | 67 if (shelf_) |
68 launcher_->RemoveIconObserver(this); | 68 shelf_->RemoveIconObserver(this); |
69 } | 69 } |
70 | 70 |
71 // ShelfIconObserver implementation. | 71 // ShelfIconObserver implementation. |
72 virtual void OnShelfIconPositionsChanged() OVERRIDE { | 72 virtual void OnShelfIconPositionsChanged() OVERRIDE { |
73 change_notified_ = true; | 73 change_notified_ = true; |
74 } | 74 } |
75 | 75 |
76 int change_notified() const { return change_notified_; } | 76 int change_notified() const { return change_notified_; } |
77 void Reset() { change_notified_ = false; } | 77 void Reset() { change_notified_ = false; } |
78 | 78 |
79 private: | 79 private: |
80 Launcher* launcher_; | 80 Shelf* shelf_; |
81 bool change_notified_; | 81 bool change_notified_; |
82 | 82 |
83 DISALLOW_COPY_AND_ASSIGN(TestShelfIconObserver); | 83 DISALLOW_COPY_AND_ASSIGN(TestShelfIconObserver); |
84 }; | 84 }; |
85 | 85 |
86 class ShelfViewIconObserverTest : public AshTestBase { | 86 class ShelfViewIconObserverTest : public AshTestBase { |
87 public: | 87 public: |
88 ShelfViewIconObserverTest() {} | 88 ShelfViewIconObserverTest() {} |
89 virtual ~ShelfViewIconObserverTest() {} | 89 virtual ~ShelfViewIconObserverTest() {} |
90 | 90 |
91 virtual void SetUp() OVERRIDE { | 91 virtual void SetUp() OVERRIDE { |
92 AshTestBase::SetUp(); | 92 AshTestBase::SetUp(); |
93 Launcher* launcher = Launcher::ForPrimaryDisplay(); | 93 Shelf* shelf = Shelf::ForPrimaryDisplay(); |
94 observer_.reset(new TestShelfIconObserver(launcher)); | 94 observer_.reset(new TestShelfIconObserver(shelf)); |
95 | 95 |
96 shelf_view_test_.reset(new ShelfViewTestAPI( | 96 shelf_view_test_.reset( |
97 LauncherTestAPI(launcher).shelf_view())); | 97 new ShelfViewTestAPI(ShelfTestAPI(shelf).shelf_view())); |
98 shelf_view_test_->SetAnimationDuration(1); | 98 shelf_view_test_->SetAnimationDuration(1); |
99 } | 99 } |
100 | 100 |
101 virtual void TearDown() OVERRIDE { | 101 virtual void TearDown() OVERRIDE { |
102 observer_.reset(); | 102 observer_.reset(); |
103 AshTestBase::TearDown(); | 103 AshTestBase::TearDown(); |
104 } | 104 } |
105 | 105 |
106 TestShelfIconObserver* observer() { return observer_.get(); } | 106 TestShelfIconObserver* observer() { return observer_.get(); } |
107 | 107 |
108 ShelfViewTestAPI* shelf_view_test() { | 108 ShelfViewTestAPI* shelf_view_test() { |
109 return shelf_view_test_.get(); | 109 return shelf_view_test_.get(); |
110 } | 110 } |
111 | 111 |
112 Launcher* LauncherForSecondaryDisplay() { | 112 Shelf* ShelfForSecondaryDisplay() { |
113 return Launcher::ForWindow(Shell::GetAllRootWindows()[1]); | 113 return Shelf::ForWindow(Shell::GetAllRootWindows()[1]); |
114 } | 114 } |
115 | 115 |
116 private: | 116 private: |
117 scoped_ptr<TestShelfIconObserver> observer_; | 117 scoped_ptr<TestShelfIconObserver> observer_; |
118 scoped_ptr<ShelfViewTestAPI> shelf_view_test_; | 118 scoped_ptr<ShelfViewTestAPI> shelf_view_test_; |
119 | 119 |
120 DISALLOW_COPY_AND_ASSIGN(ShelfViewIconObserverTest); | 120 DISALLOW_COPY_AND_ASSIGN(ShelfViewIconObserverTest); |
121 }; | 121 }; |
122 | 122 |
123 TEST_F(ShelfViewIconObserverTest, AddRemove) { | 123 TEST_F(ShelfViewIconObserverTest, AddRemove) { |
(...skipping 21 matching lines...) Expand all Loading... |
145 | 145 |
146 // Sometimes fails on trybots on win7_aura. http://crbug.com/177135 | 146 // Sometimes fails on trybots on win7_aura. http://crbug.com/177135 |
147 #if defined(OS_WIN) | 147 #if defined(OS_WIN) |
148 #define MAYBE_AddRemoveWithMultipleDisplays \ | 148 #define MAYBE_AddRemoveWithMultipleDisplays \ |
149 DISABLED_AddRemoveWithMultipleDisplays | 149 DISABLED_AddRemoveWithMultipleDisplays |
150 #else | 150 #else |
151 #define MAYBE_AddRemoveWithMultipleDisplays \ | 151 #define MAYBE_AddRemoveWithMultipleDisplays \ |
152 AddRemoveWithMultipleDisplays | 152 AddRemoveWithMultipleDisplays |
153 #endif | 153 #endif |
154 // Make sure creating/deleting an window on one displays notifies a | 154 // Make sure creating/deleting an window on one displays notifies a |
155 // launcher on external display as well as one on primary. | 155 // shelf on external display as well as one on primary. |
156 TEST_F(ShelfViewIconObserverTest, MAYBE_AddRemoveWithMultipleDisplays) { | 156 TEST_F(ShelfViewIconObserverTest, MAYBE_AddRemoveWithMultipleDisplays) { |
157 UpdateDisplay("400x400,400x400"); | 157 UpdateDisplay("400x400,400x400"); |
158 TestShelfIconObserver second_observer(LauncherForSecondaryDisplay()); | 158 TestShelfIconObserver second_observer(ShelfForSecondaryDisplay()); |
159 | 159 |
160 TestShelfDelegate* shelf_delegate = TestShelfDelegate::instance(); | 160 TestShelfDelegate* shelf_delegate = TestShelfDelegate::instance(); |
161 ASSERT_TRUE(shelf_delegate); | 161 ASSERT_TRUE(shelf_delegate); |
162 | 162 |
163 views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); | 163 views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); |
164 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 164 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
165 params.bounds = gfx::Rect(0, 0, 200, 200); | 165 params.bounds = gfx::Rect(0, 0, 200, 200); |
166 params.context = CurrentContext(); | 166 params.context = CurrentContext(); |
167 | 167 |
168 scoped_ptr<views::Widget> widget(new views::Widget()); | 168 scoped_ptr<views::Widget> widget(new views::Widget()); |
169 widget->Init(params); | 169 widget->Init(params); |
170 shelf_delegate->AddLauncherItem(widget->GetNativeWindow()); | 170 shelf_delegate->AddLauncherItem(widget->GetNativeWindow()); |
171 shelf_view_test()->RunMessageLoopUntilAnimationsDone(); | 171 shelf_view_test()->RunMessageLoopUntilAnimationsDone(); |
172 EXPECT_TRUE(observer()->change_notified()); | 172 EXPECT_TRUE(observer()->change_notified()); |
173 EXPECT_TRUE(second_observer.change_notified()); | 173 EXPECT_TRUE(second_observer.change_notified()); |
174 observer()->Reset(); | 174 observer()->Reset(); |
175 second_observer.Reset(); | 175 second_observer.Reset(); |
176 | 176 |
177 widget->GetNativeWindow()->parent()->RemoveChild(widget->GetNativeWindow()); | 177 widget->GetNativeWindow()->parent()->RemoveChild(widget->GetNativeWindow()); |
178 shelf_view_test()->RunMessageLoopUntilAnimationsDone(); | 178 shelf_view_test()->RunMessageLoopUntilAnimationsDone(); |
179 EXPECT_TRUE(observer()->change_notified()); | 179 EXPECT_TRUE(observer()->change_notified()); |
180 EXPECT_TRUE(second_observer.change_notified()); | 180 EXPECT_TRUE(second_observer.change_notified()); |
181 | 181 |
182 observer()->Reset(); | 182 observer()->Reset(); |
183 second_observer.Reset(); | 183 second_observer.Reset(); |
184 } | 184 } |
185 | 185 |
186 TEST_F(ShelfViewIconObserverTest, BoundsChanged) { | 186 TEST_F(ShelfViewIconObserverTest, BoundsChanged) { |
187 ShelfWidget* shelf = Shell::GetPrimaryRootWindowController()->shelf(); | 187 ShelfWidget* widget = Shell::GetPrimaryRootWindowController()->shelf(); |
188 Launcher* launcher = Launcher::ForPrimaryDisplay(); | 188 Shelf* shelf = Shelf::ForPrimaryDisplay(); |
189 gfx::Size shelf_size = | 189 gfx::Size shelf_size = widget->GetWindowBoundsInScreen().size(); |
190 shelf->GetWindowBoundsInScreen().size(); | |
191 shelf_size.set_width(shelf_size.width() / 2); | 190 shelf_size.set_width(shelf_size.width() / 2); |
192 ASSERT_GT(shelf_size.width(), 0); | 191 ASSERT_GT(shelf_size.width(), 0); |
193 launcher->SetShelfViewBounds(gfx::Rect(shelf_size)); | 192 shelf->SetShelfViewBounds(gfx::Rect(shelf_size)); |
194 // No animation happens for ShelfView bounds change. | 193 // No animation happens for ShelfView bounds change. |
195 EXPECT_TRUE(observer()->change_notified()); | 194 EXPECT_TRUE(observer()->change_notified()); |
196 observer()->Reset(); | 195 observer()->Reset(); |
197 } | 196 } |
198 | 197 |
199 //////////////////////////////////////////////////////////////////////////////// | 198 //////////////////////////////////////////////////////////////////////////////// |
200 // ShelfView tests. | 199 // ShelfView tests. |
201 | 200 |
202 // Simple ShelfDelegate implmentation for ShelfViewTest.OverflowBubbleSize | 201 // Simple ShelfDelegate implmentation for ShelfViewTest.OverflowBubbleSize |
203 // and CheckDragAndDropFromOverflowBubbleToShelf | 202 // and CheckDragAndDropFromOverflowBubbleToShelf |
204 class TestShelfDelegateForShelfView : public ShelfDelegate { | 203 class TestShelfDelegateForShelfView : public ShelfDelegate { |
205 public: | 204 public: |
206 explicit TestShelfDelegateForShelfView(ShelfModel* model) | 205 explicit TestShelfDelegateForShelfView(ShelfModel* model) |
207 : model_(model) {} | 206 : model_(model) {} |
208 virtual ~TestShelfDelegateForShelfView() {} | 207 virtual ~TestShelfDelegateForShelfView() {} |
209 | 208 |
210 // ShelfDelegate overrides: | 209 // ShelfDelegate overrides: |
211 virtual void OnLauncherCreated(Launcher* launcher) OVERRIDE {} | 210 virtual void OnShelfCreated(Shelf* shelf) OVERRIDE {} |
212 | 211 |
213 virtual void OnLauncherDestroyed(Launcher* launcher) OVERRIDE {} | 212 virtual void OnShelfDestroyed(Shelf* shelf) OVERRIDE {} |
214 | 213 |
215 virtual LauncherID GetLauncherIDForAppID(const std::string& app_id) OVERRIDE { | 214 virtual LauncherID GetLauncherIDForAppID(const std::string& app_id) OVERRIDE { |
216 LauncherID id = 0; | 215 LauncherID id = 0; |
217 EXPECT_TRUE(base::StringToInt(app_id, &id)); | 216 EXPECT_TRUE(base::StringToInt(app_id, &id)); |
218 return id; | 217 return id; |
219 } | 218 } |
220 | 219 |
221 virtual const std::string& GetAppIDForLauncherID(LauncherID id) OVERRIDE { | 220 virtual const std::string& GetAppIDForLauncherID(LauncherID id) OVERRIDE { |
222 // Use |app_id_| member variable because returning a reference to local | 221 // Use |app_id_| member variable because returning a reference to local |
223 // variable is not allowed. | 222 // variable is not allowed. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 | 259 |
261 class ShelfViewTest : public AshTestBase { | 260 class ShelfViewTest : public AshTestBase { |
262 public: | 261 public: |
263 ShelfViewTest() : model_(NULL), shelf_view_(NULL), browser_index_(1) {} | 262 ShelfViewTest() : model_(NULL), shelf_view_(NULL), browser_index_(1) {} |
264 virtual ~ShelfViewTest() {} | 263 virtual ~ShelfViewTest() {} |
265 | 264 |
266 virtual void SetUp() OVERRIDE { | 265 virtual void SetUp() OVERRIDE { |
267 AshTestBase::SetUp(); | 266 AshTestBase::SetUp(); |
268 test::ShellTestApi test_api(Shell::GetInstance()); | 267 test::ShellTestApi test_api(Shell::GetInstance()); |
269 model_ = test_api.shelf_model(); | 268 model_ = test_api.shelf_model(); |
270 Launcher* launcher = Launcher::ForPrimaryDisplay(); | 269 Shelf* shelf = Shelf::ForPrimaryDisplay(); |
271 shelf_view_ = test::LauncherTestAPI(launcher).shelf_view(); | 270 shelf_view_ = ShelfTestAPI(shelf).shelf_view(); |
272 | 271 |
273 // The bounds should be big enough for 4 buttons + overflow chevron. | 272 // The bounds should be big enough for 4 buttons + overflow chevron. |
274 shelf_view_->SetBounds(0, 0, 500, | 273 shelf_view_->SetBounds(0, 0, 500, |
275 internal::ShelfLayoutManager::GetPreferredShelfSize()); | 274 internal::ShelfLayoutManager::GetPreferredShelfSize()); |
276 | 275 |
277 test_api_.reset(new ShelfViewTestAPI(shelf_view_)); | 276 test_api_.reset(new ShelfViewTestAPI(shelf_view_)); |
278 test_api_->SetAnimationDuration(1); // Speeds up animation for test. | 277 test_api_->SetAnimationDuration(1); // Speeds up animation for test. |
279 | 278 |
280 item_manager_ = Shell::GetInstance()->shelf_item_delegate_manager(); | 279 item_manager_ = Shell::GetInstance()->shelf_item_delegate_manager(); |
281 DCHECK(item_manager_); | 280 DCHECK(item_manager_); |
282 | 281 |
283 // Add browser shortcut launcher item at index 0 for test. | 282 // Add browser shortcut shelf item at index 0 for test. |
284 AddBrowserShortcut(); | 283 AddBrowserShortcut(); |
285 } | 284 } |
286 | 285 |
287 virtual void TearDown() OVERRIDE { | 286 virtual void TearDown() OVERRIDE { |
288 test_api_.reset(); | 287 test_api_.reset(); |
289 AshTestBase::TearDown(); | 288 AshTestBase::TearDown(); |
290 } | 289 } |
291 | 290 |
292 protected: | 291 protected: |
293 void CreateAndSetShelfItemDelegateForID(LauncherID id) { | 292 void CreateAndSetShelfItemDelegateForID(LauncherID id) { |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 ++model_index) { | 374 ++model_index) { |
376 LauncherItem item = model_->items()[model_index]; | 375 LauncherItem item = model_->items()[model_index]; |
377 LauncherID id = item.id; | 376 LauncherID id = item.id; |
378 EXPECT_EQ(id_map[map_index].first, id); | 377 EXPECT_EQ(id_map[map_index].first, id); |
379 EXPECT_EQ(id_map[map_index].second, GetButtonByID(id)); | 378 EXPECT_EQ(id_map[map_index].second, GetButtonByID(id)); |
380 ++map_index; | 379 ++map_index; |
381 } | 380 } |
382 ASSERT_EQ(map_index, id_map.size()); | 381 ASSERT_EQ(map_index, id_map.size()); |
383 } | 382 } |
384 | 383 |
385 void VerifyLauncherItemBoundsAreValid() { | 384 void VerifyShelfItemBoundsAreValid() { |
386 for (int i=0;i <= test_api_->GetLastVisibleIndex(); ++i) { | 385 for (int i=0;i <= test_api_->GetLastVisibleIndex(); ++i) { |
387 if (test_api_->GetButton(i)) { | 386 if (test_api_->GetButton(i)) { |
388 gfx::Rect shelf_view_bounds = shelf_view_->GetLocalBounds(); | 387 gfx::Rect shelf_view_bounds = shelf_view_->GetLocalBounds(); |
389 gfx::Rect item_bounds = test_api_->GetBoundsByIndex(i); | 388 gfx::Rect item_bounds = test_api_->GetBoundsByIndex(i); |
390 EXPECT_TRUE(item_bounds.x() >= 0); | 389 EXPECT_TRUE(item_bounds.x() >= 0); |
391 EXPECT_TRUE(item_bounds.y() >= 0); | 390 EXPECT_TRUE(item_bounds.y() >= 0); |
392 EXPECT_TRUE(item_bounds.right() <= shelf_view_bounds.width()); | 391 EXPECT_TRUE(item_bounds.right() <= shelf_view_bounds.width()); |
393 EXPECT_TRUE(item_bounds.bottom() <= shelf_view_bounds.height()); | 392 EXPECT_TRUE(item_bounds.bottom() <= shelf_view_bounds.height()); |
394 } | 393 } |
395 } | 394 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 views::View* destination = test_api_->GetButton(destination_index); | 426 views::View* destination = test_api_->GetButton(destination_index); |
428 ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, | 427 ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, |
429 destination->bounds().origin(), | 428 destination->bounds().origin(), |
430 destination->GetBoundsInScreen().origin(), 0); | 429 destination->GetBoundsInScreen().origin(), 0); |
431 button_host->PointerDraggedOnButton(button, pointer, drag_event); | 430 button_host->PointerDraggedOnButton(button, pointer, drag_event); |
432 return button; | 431 return button; |
433 } | 432 } |
434 | 433 |
435 void SetupForDragTest( | 434 void SetupForDragTest( |
436 std::vector<std::pair<LauncherID, views::View*> >* id_map) { | 435 std::vector<std::pair<LauncherID, views::View*> >* id_map) { |
437 // Initialize |id_map| with the automatically-created launcher buttons. | 436 // Initialize |id_map| with the automatically-created shelf buttons. |
438 for (size_t i = 0; i < model_->items().size(); ++i) { | 437 for (size_t i = 0; i < model_->items().size(); ++i) { |
439 internal::ShelfButton* button = test_api_->GetButton(i); | 438 internal::ShelfButton* button = test_api_->GetButton(i); |
440 id_map->push_back(std::make_pair(model_->items()[i].id, button)); | 439 id_map->push_back(std::make_pair(model_->items()[i].id, button)); |
441 } | 440 } |
442 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map)); | 441 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map)); |
443 | 442 |
444 // Add 5 app launcher buttons for testing. | 443 // Add 5 app shelf buttons for testing. |
445 for (int i = 0; i < 5; ++i) { | 444 for (int i = 0; i < 5; ++i) { |
446 LauncherID id = AddAppShortcut(); | 445 LauncherID id = AddAppShortcut(); |
447 // App Icon is located at index 0, and browser shortcut is located at | 446 // App Icon is located at index 0, and browser shortcut is located at |
448 // index 1. So we should start to add app shortcut at index 2. | 447 // index 1. So we should start to add app shortcut at index 2. |
449 id_map->insert(id_map->begin() + (i + browser_index_ + 1), | 448 id_map->insert(id_map->begin() + (i + browser_index_ + 1), |
450 std::make_pair(id, GetButtonByID(id))); | 449 std::make_pair(id, GetButtonByID(id))); |
451 } | 450 } |
452 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map)); | 451 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(*id_map)); |
453 } | 452 } |
454 | 453 |
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
933 // Verifies non-overflow buttons are visible. | 932 // Verifies non-overflow buttons are visible. |
934 for (int i = 0; i <= test_api_->GetLastVisibleIndex(); ++i) { | 933 for (int i = 0; i <= test_api_->GetLastVisibleIndex(); ++i) { |
935 internal::ShelfButton* button = test_api_->GetButton(i); | 934 internal::ShelfButton* button = test_api_->GetButton(i); |
936 if (button) { | 935 if (button) { |
937 EXPECT_TRUE(button->visible()) << "button index=" << i; | 936 EXPECT_TRUE(button->visible()) << "button index=" << i; |
938 EXPECT_EQ(1.0f, button->layer()->opacity()) << "button index=" << i; | 937 EXPECT_EQ(1.0f, button->layer()->opacity()) << "button index=" << i; |
939 } | 938 } |
940 } | 939 } |
941 } | 940 } |
942 | 941 |
943 // Check that model changes are handled correctly while a launcher icon is being | 942 // Check that model changes are handled correctly while a shelf icon is being |
944 // dragged. | 943 // dragged. |
945 TEST_F(ShelfViewTest, ModelChangesWhileDragging) { | 944 TEST_F(ShelfViewTest, ModelChangesWhileDragging) { |
946 internal::ShelfButtonHost* button_host = shelf_view_; | 945 internal::ShelfButtonHost* button_host = shelf_view_; |
947 | 946 |
948 std::vector<std::pair<LauncherID, views::View*> > id_map; | 947 std::vector<std::pair<LauncherID, views::View*> > id_map; |
949 SetupForDragTest(&id_map); | 948 SetupForDragTest(&id_map); |
950 | 949 |
951 // Dragging browser shortcut at index 1. | 950 // Dragging browser shortcut at index 1. |
952 EXPECT_TRUE(model_->items()[1].type == TYPE_BROWSER_SHORTCUT); | 951 EXPECT_TRUE(model_->items()[1].type == TYPE_BROWSER_SHORTCUT); |
953 views::View* dragged_button = SimulateDrag( | 952 views::View* dragged_button = SimulateDrag( |
(...skipping 25 matching lines...) Expand all Loading... |
979 | 978 |
980 // Deleting an item keeps the remaining intact. | 979 // Deleting an item keeps the remaining intact. |
981 dragged_button = SimulateDrag(internal::ShelfButtonHost::MOUSE, 1, 3); | 980 dragged_button = SimulateDrag(internal::ShelfButtonHost::MOUSE, 1, 3); |
982 model_->RemoveItemAt(1); | 981 model_->RemoveItemAt(1); |
983 id_map.erase(id_map.begin() + 1); | 982 id_map.erase(id_map.begin() + 1); |
984 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | 983 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); |
985 button_host->PointerReleasedOnButton(dragged_button, | 984 button_host->PointerReleasedOnButton(dragged_button, |
986 internal::ShelfButtonHost::MOUSE, | 985 internal::ShelfButtonHost::MOUSE, |
987 false); | 986 false); |
988 | 987 |
989 // Adding a launcher item cancels the drag and respects the order. | 988 // Adding a shelf item cancels the drag and respects the order. |
990 dragged_button = SimulateDrag(internal::ShelfButtonHost::MOUSE, 1, 3); | 989 dragged_button = SimulateDrag(internal::ShelfButtonHost::MOUSE, 1, 3); |
991 LauncherID new_id = AddAppShortcut(); | 990 LauncherID new_id = AddAppShortcut(); |
992 id_map.insert(id_map.begin() + 6, | 991 id_map.insert(id_map.begin() + 6, |
993 std::make_pair(new_id, GetButtonByID(new_id))); | 992 std::make_pair(new_id, GetButtonByID(new_id))); |
994 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | 993 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); |
995 button_host->PointerReleasedOnButton(dragged_button, | 994 button_host->PointerReleasedOnButton(dragged_button, |
996 internal::ShelfButtonHost::MOUSE, | 995 internal::ShelfButtonHost::MOUSE, |
997 false); | 996 false); |
998 | 997 |
999 // Adding a launcher item at the end (i.e. a panel) canels drag and respects | 998 // Adding a shelf item at the end (i.e. a panel) canels drag and respects |
1000 // the order. | 999 // the order. |
1001 dragged_button = SimulateDrag(internal::ShelfButtonHost::MOUSE, 1, 3); | 1000 dragged_button = SimulateDrag(internal::ShelfButtonHost::MOUSE, 1, 3); |
1002 new_id = AddPanel(); | 1001 new_id = AddPanel(); |
1003 id_map.insert(id_map.begin() + 7, | 1002 id_map.insert(id_map.begin() + 7, |
1004 std::make_pair(new_id, GetButtonByID(new_id))); | 1003 std::make_pair(new_id, GetButtonByID(new_id))); |
1005 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | 1004 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); |
1006 button_host->PointerReleasedOnButton(dragged_button, | 1005 button_host->PointerReleasedOnButton(dragged_button, |
1007 internal::ShelfButtonHost::MOUSE, | 1006 internal::ShelfButtonHost::MOUSE, |
1008 false); | 1007 false); |
1009 } | 1008 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1045 | 1044 |
1046 // Deleting an item keeps the remaining intact. | 1045 // Deleting an item keeps the remaining intact. |
1047 dragged_button = SimulateDrag(internal::ShelfButtonHost::MOUSE, 0, 2); | 1046 dragged_button = SimulateDrag(internal::ShelfButtonHost::MOUSE, 0, 2); |
1048 model_->RemoveItemAt(1); | 1047 model_->RemoveItemAt(1); |
1049 id_map.erase(id_map.begin() + 1); | 1048 id_map.erase(id_map.begin() + 1); |
1050 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | 1049 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); |
1051 button_host->PointerReleasedOnButton(dragged_button, | 1050 button_host->PointerReleasedOnButton(dragged_button, |
1052 internal::ShelfButtonHost::MOUSE, | 1051 internal::ShelfButtonHost::MOUSE, |
1053 false); | 1052 false); |
1054 | 1053 |
1055 // Adding a launcher item cancels the drag and respects the order. | 1054 // Adding a shelf item cancels the drag and respects the order. |
1056 dragged_button = SimulateDrag(internal::ShelfButtonHost::MOUSE, 0, 2); | 1055 dragged_button = SimulateDrag(internal::ShelfButtonHost::MOUSE, 0, 2); |
1057 LauncherID new_id = AddAppShortcut(); | 1056 LauncherID new_id = AddAppShortcut(); |
1058 id_map.insert(id_map.begin() + 5, | 1057 id_map.insert(id_map.begin() + 5, |
1059 std::make_pair(new_id, GetButtonByID(new_id))); | 1058 std::make_pair(new_id, GetButtonByID(new_id))); |
1060 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | 1059 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); |
1061 button_host->PointerReleasedOnButton(dragged_button, | 1060 button_host->PointerReleasedOnButton(dragged_button, |
1062 internal::ShelfButtonHost::MOUSE, | 1061 internal::ShelfButtonHost::MOUSE, |
1063 false); | 1062 false); |
1064 | 1063 |
1065 // Adding a launcher item at the end (i.e. a panel) canels drag and respects | 1064 // Adding a shelf item at the end (i.e. a panel) canels drag and respects |
1066 // the order. | 1065 // the order. |
1067 dragged_button = SimulateDrag(internal::ShelfButtonHost::MOUSE, 0, 2); | 1066 dragged_button = SimulateDrag(internal::ShelfButtonHost::MOUSE, 0, 2); |
1068 new_id = AddPanel(); | 1067 new_id = AddPanel(); |
1069 id_map.insert(id_map.begin() + 7, | 1068 id_map.insert(id_map.begin() + 7, |
1070 std::make_pair(new_id, GetButtonByID(new_id))); | 1069 std::make_pair(new_id, GetButtonByID(new_id))); |
1071 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | 1070 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); |
1072 button_host->PointerReleasedOnButton(dragged_button, | 1071 button_host->PointerReleasedOnButton(dragged_button, |
1073 internal::ShelfButtonHost::MOUSE, | 1072 internal::ShelfButtonHost::MOUSE, |
1074 false); | 1073 false); |
1075 } | 1074 } |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1139 id_map.begin() + 2, | 1138 id_map.begin() + 2, |
1140 id_map.begin() + 4); | 1139 id_map.begin() + 4); |
1141 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); | 1140 ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map)); |
1142 button_host->PointerReleasedOnButton(dragged_button, | 1141 button_host->PointerReleasedOnButton(dragged_button, |
1143 internal::ShelfButtonHost::MOUSE, | 1142 internal::ShelfButtonHost::MOUSE, |
1144 false); | 1143 false); |
1145 EXPECT_TRUE(model_->items()[3].type == TYPE_BROWSER_SHORTCUT); | 1144 EXPECT_TRUE(model_->items()[3].type == TYPE_BROWSER_SHORTCUT); |
1146 } | 1145 } |
1147 | 1146 |
1148 // Confirm that item status changes are reflected in the buttons. | 1147 // Confirm that item status changes are reflected in the buttons. |
1149 TEST_F(ShelfViewTest, LauncherItemStatus) { | 1148 TEST_F(ShelfViewTest, ShelfItemStatus) { |
1150 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, | 1149 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, |
1151 test_api_->GetButtonCount()); | 1150 test_api_->GetButtonCount()); |
1152 | 1151 |
1153 // Add platform app button. | 1152 // Add platform app button. |
1154 LauncherID last_added = AddPlatformApp(); | 1153 LauncherID last_added = AddPlatformApp(); |
1155 LauncherItem item = GetItemByID(last_added); | 1154 LauncherItem item = GetItemByID(last_added); |
1156 int index = model_->ItemIndexByID(last_added); | 1155 int index = model_->ItemIndexByID(last_added); |
1157 internal::ShelfButton* button = GetButtonByID(last_added); | 1156 internal::ShelfButton* button = GetButtonByID(last_added); |
1158 ASSERT_EQ(internal::ShelfButton::STATE_RUNNING, button->state()); | 1157 ASSERT_EQ(internal::ShelfButton::STATE_RUNNING, button->state()); |
1159 item.status = STATUS_ACTIVE; | 1158 item.status = STATUS_ACTIVE; |
1160 model_->Set(index, item); | 1159 model_->Set(index, item); |
1161 ASSERT_EQ(internal::ShelfButton::STATE_ACTIVE, button->state()); | 1160 ASSERT_EQ(internal::ShelfButton::STATE_ACTIVE, button->state()); |
1162 item.status = STATUS_ATTENTION; | 1161 item.status = STATUS_ATTENTION; |
1163 model_->Set(index, item); | 1162 model_->Set(index, item); |
1164 ASSERT_EQ(internal::ShelfButton::STATE_ATTENTION, button->state()); | 1163 ASSERT_EQ(internal::ShelfButton::STATE_ATTENTION, button->state()); |
1165 } | 1164 } |
1166 | 1165 |
1167 TEST_F(ShelfViewLegacyShelfLayoutTest, | 1166 TEST_F(ShelfViewLegacyShelfLayoutTest, |
1168 LauncherItemPositionReflectedOnStateChanged) { | 1167 ShelfItemPositionReflectedOnStateChanged) { |
1169 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, | 1168 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, |
1170 test_api_->GetButtonCount()); | 1169 test_api_->GetButtonCount()); |
1171 | 1170 |
1172 // Add 2 items to the launcher. | 1171 // Add 2 items to the shelf. |
1173 LauncherID item1_id = AddPlatformApp(); | 1172 LauncherID item1_id = AddPlatformApp(); |
1174 LauncherID item2_id = AddPlatformAppNoWait(); | 1173 LauncherID item2_id = AddPlatformAppNoWait(); |
1175 internal::ShelfButton* item1_button = GetButtonByID(item1_id); | 1174 internal::ShelfButton* item1_button = GetButtonByID(item1_id); |
1176 internal::ShelfButton* item2_button = GetButtonByID(item2_id); | 1175 internal::ShelfButton* item2_button = GetButtonByID(item2_id); |
1177 | 1176 |
1178 internal::ShelfButton::State state_mask = | 1177 internal::ShelfButton::State state_mask = |
1179 static_cast<internal::ShelfButton::State>( | 1178 static_cast<internal::ShelfButton::State>( |
1180 internal::ShelfButton::STATE_NORMAL | | 1179 internal::ShelfButton::STATE_NORMAL | |
1181 internal::ShelfButton::STATE_HOVERED | | 1180 internal::ShelfButton::STATE_HOVERED | |
1182 internal::ShelfButton::STATE_RUNNING | | 1181 internal::ShelfButton::STATE_RUNNING | |
1183 internal::ShelfButton::STATE_ACTIVE | | 1182 internal::ShelfButton::STATE_ACTIVE | |
1184 internal::ShelfButton::STATE_ATTENTION | | 1183 internal::ShelfButton::STATE_ATTENTION | |
1185 internal::ShelfButton::STATE_FOCUSED); | 1184 internal::ShelfButton::STATE_FOCUSED); |
1186 | 1185 |
1187 // Clear the button states. | 1186 // Clear the button states. |
1188 item1_button->ClearState(state_mask); | 1187 item1_button->ClearState(state_mask); |
1189 item2_button->ClearState(state_mask); | 1188 item2_button->ClearState(state_mask); |
1190 | 1189 |
1191 // Since default alignment in tests is bottom, state is reflected in y-axis. | 1190 // Since default alignment in tests is bottom, state is reflected in y-axis. |
1192 ASSERT_EQ(item1_button->GetIconBounds().y(), | 1191 ASSERT_EQ(item1_button->GetIconBounds().y(), |
1193 item2_button->GetIconBounds().y()); | 1192 item2_button->GetIconBounds().y()); |
1194 item1_button->AddState(internal::ShelfButton::STATE_HOVERED); | 1193 item1_button->AddState(internal::ShelfButton::STATE_HOVERED); |
1195 ASSERT_NE(item1_button->GetIconBounds().y(), | 1194 ASSERT_NE(item1_button->GetIconBounds().y(), |
1196 item2_button->GetIconBounds().y()); | 1195 item2_button->GetIconBounds().y()); |
1197 item1_button->ClearState(internal::ShelfButton::STATE_HOVERED); | 1196 item1_button->ClearState(internal::ShelfButton::STATE_HOVERED); |
1198 } | 1197 } |
1199 | 1198 |
1200 // Confirm that item status changes are reflected in the buttons | 1199 // Confirm that item status changes are reflected in the buttons |
1201 // for platform apps. | 1200 // for platform apps. |
1202 TEST_F(ShelfViewTest, LauncherItemStatusPlatformApp) { | 1201 TEST_F(ShelfViewTest, ShelfItemStatusPlatformApp) { |
1203 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, | 1202 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, |
1204 test_api_->GetButtonCount()); | 1203 test_api_->GetButtonCount()); |
1205 | 1204 |
1206 // Add platform app button. | 1205 // Add platform app button. |
1207 LauncherID last_added = AddPlatformApp(); | 1206 LauncherID last_added = AddPlatformApp(); |
1208 LauncherItem item = GetItemByID(last_added); | 1207 LauncherItem item = GetItemByID(last_added); |
1209 int index = model_->ItemIndexByID(last_added); | 1208 int index = model_->ItemIndexByID(last_added); |
1210 internal::ShelfButton* button = GetButtonByID(last_added); | 1209 internal::ShelfButton* button = GetButtonByID(last_added); |
1211 ASSERT_EQ(internal::ShelfButton::STATE_RUNNING, button->state()); | 1210 ASSERT_EQ(internal::ShelfButton::STATE_RUNNING, button->state()); |
1212 item.status = STATUS_ACTIVE; | 1211 item.status = STATUS_ACTIVE; |
1213 model_->Set(index, item); | 1212 model_->Set(index, item); |
1214 ASSERT_EQ(internal::ShelfButton::STATE_ACTIVE, button->state()); | 1213 ASSERT_EQ(internal::ShelfButton::STATE_ACTIVE, button->state()); |
1215 item.status = STATUS_ATTENTION; | 1214 item.status = STATUS_ATTENTION; |
1216 model_->Set(index, item); | 1215 model_->Set(index, item); |
1217 ASSERT_EQ(internal::ShelfButton::STATE_ATTENTION, button->state()); | 1216 ASSERT_EQ(internal::ShelfButton::STATE_ATTENTION, button->state()); |
1218 } | 1217 } |
1219 | 1218 |
1220 // Confirm that launcher item bounds are correctly updated on shelf changes. | 1219 // Confirm that shelf item bounds are correctly updated on shelf changes. |
1221 TEST_F(ShelfViewTest, LauncherItemBoundsCheck) { | 1220 TEST_F(ShelfViewTest, ShelfItemBoundsCheck) { |
1222 VerifyLauncherItemBoundsAreValid(); | 1221 VerifyShelfItemBoundsAreValid(); |
1223 shelf_view_->shelf_layout_manager()->SetAutoHideBehavior( | 1222 shelf_view_->shelf_layout_manager()->SetAutoHideBehavior( |
1224 SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); | 1223 SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
1225 test_api_->RunMessageLoopUntilAnimationsDone(); | 1224 test_api_->RunMessageLoopUntilAnimationsDone(); |
1226 VerifyLauncherItemBoundsAreValid(); | 1225 VerifyShelfItemBoundsAreValid(); |
1227 shelf_view_->shelf_layout_manager()->SetAutoHideBehavior( | 1226 shelf_view_->shelf_layout_manager()->SetAutoHideBehavior( |
1228 SHELF_AUTO_HIDE_BEHAVIOR_NEVER); | 1227 SHELF_AUTO_HIDE_BEHAVIOR_NEVER); |
1229 test_api_->RunMessageLoopUntilAnimationsDone(); | 1228 test_api_->RunMessageLoopUntilAnimationsDone(); |
1230 VerifyLauncherItemBoundsAreValid(); | 1229 VerifyShelfItemBoundsAreValid(); |
1231 } | 1230 } |
1232 | 1231 |
1233 TEST_F(ShelfViewTest, ShelfTooltipTest) { | 1232 TEST_F(ShelfViewTest, ShelfTooltipTest) { |
1234 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, | 1233 ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1, |
1235 test_api_->GetButtonCount()); | 1234 test_api_->GetButtonCount()); |
1236 | 1235 |
1237 // Prepare some items to the launcher. | 1236 // Prepare some items to the shelf. |
1238 LauncherID app_button_id = AddAppShortcut(); | 1237 LauncherID app_button_id = AddAppShortcut(); |
1239 LauncherID platform_button_id = AddPlatformApp(); | 1238 LauncherID platform_button_id = AddPlatformApp(); |
1240 | 1239 |
1241 internal::ShelfButton* app_button = GetButtonByID(app_button_id); | 1240 internal::ShelfButton* app_button = GetButtonByID(app_button_id); |
1242 internal::ShelfButton* platform_button = GetButtonByID(platform_button_id); | 1241 internal::ShelfButton* platform_button = GetButtonByID(platform_button_id); |
1243 | 1242 |
1244 internal::ShelfButtonHost* button_host = shelf_view_; | 1243 internal::ShelfButtonHost* button_host = shelf_view_; |
1245 internal::ShelfTooltipManager* tooltip_manager = | 1244 internal::ShelfTooltipManager* tooltip_manager = |
1246 shelf_view_->tooltip_manager(); | 1245 shelf_view_->tooltip_manager(); |
1247 | 1246 |
(...skipping 21 matching lines...) Expand all Loading... |
1269 tooltip_manager->Close(); | 1268 tooltip_manager->Close(); |
1270 | 1269 |
1271 // Next time: enter app_button -> move immediately to tab_button. | 1270 // Next time: enter app_button -> move immediately to tab_button. |
1272 button_host->MouseEnteredButton(app_button); | 1271 button_host->MouseEnteredButton(app_button); |
1273 button_host->MouseExitedButton(app_button); | 1272 button_host->MouseExitedButton(app_button); |
1274 button_host->MouseEnteredButton(platform_button); | 1273 button_host->MouseEnteredButton(platform_button); |
1275 EXPECT_FALSE(tooltip_manager->IsVisible()); | 1274 EXPECT_FALSE(tooltip_manager->IsVisible()); |
1276 EXPECT_EQ(platform_button, GetTooltipAnchorView()); | 1275 EXPECT_EQ(platform_button, GetTooltipAnchorView()); |
1277 } | 1276 } |
1278 | 1277 |
1279 // Verify a fix for crash caused by a tooltip update for a deleted launcher | 1278 // Verify a fix for crash caused by a tooltip update for a deletedshelf |
1280 // button, see crbug.com/288838. | 1279 // button, see crbug.com/288838. |
1281 TEST_F(ShelfViewTest, RemovingItemClosesTooltip) { | 1280 TEST_F(ShelfViewTest, RemovingItemClosesTooltip) { |
1282 internal::ShelfButtonHost* button_host = shelf_view_; | 1281 internal::ShelfButtonHost* button_host = shelf_view_; |
1283 internal::ShelfTooltipManager* tooltip_manager = | 1282 internal::ShelfTooltipManager* tooltip_manager = |
1284 shelf_view_->tooltip_manager(); | 1283 shelf_view_->tooltip_manager(); |
1285 | 1284 |
1286 // Add an item to the launcher. | 1285 // Add an item to the shelf. |
1287 LauncherID app_button_id = AddAppShortcut(); | 1286 LauncherID app_button_id = AddAppShortcut(); |
1288 internal::ShelfButton* app_button = GetButtonByID(app_button_id); | 1287 internal::ShelfButton* app_button = GetButtonByID(app_button_id); |
1289 | 1288 |
1290 // Spawn a tooltip on that item. | 1289 // Spawn a tooltip on that item. |
1291 button_host->MouseEnteredButton(app_button); | 1290 button_host->MouseEnteredButton(app_button); |
1292 ShowTooltip(); | 1291 ShowTooltip(); |
1293 EXPECT_TRUE(tooltip_manager->IsVisible()); | 1292 EXPECT_TRUE(tooltip_manager->IsVisible()); |
1294 | 1293 |
1295 // Remove the app shortcut while the tooltip is open. The tooltip should be | 1294 // Remove the app shortcut while the tooltip is open. The tooltip should be |
1296 // closed. | 1295 // closed. |
1297 RemoveByID(app_button_id); | 1296 RemoveByID(app_button_id); |
1298 EXPECT_FALSE(tooltip_manager->IsVisible()); | 1297 EXPECT_FALSE(tooltip_manager->IsVisible()); |
1299 | 1298 |
1300 // Change the shelf layout. This should not crash. | 1299 // Change the shelf layout. This should not crash. |
1301 Shell::GetInstance()->SetShelfAlignment(SHELF_ALIGNMENT_LEFT, | 1300 Shell::GetInstance()->SetShelfAlignment(SHELF_ALIGNMENT_LEFT, |
1302 Shell::GetPrimaryRootWindow()); | 1301 Shell::GetPrimaryRootWindow()); |
1303 } | 1302 } |
1304 | 1303 |
1305 // Changing the shelf alignment closes any open tooltip. | 1304 // Changing the shelf alignment closes any open tooltip. |
1306 TEST_F(ShelfViewTest, ShelfAlignmentClosesTooltip) { | 1305 TEST_F(ShelfViewTest, ShelfAlignmentClosesTooltip) { |
1307 internal::ShelfButtonHost* button_host = shelf_view_; | 1306 internal::ShelfButtonHost* button_host = shelf_view_; |
1308 internal::ShelfTooltipManager* tooltip_manager = | 1307 internal::ShelfTooltipManager* tooltip_manager = |
1309 shelf_view_->tooltip_manager(); | 1308 shelf_view_->tooltip_manager(); |
1310 | 1309 |
1311 // Add an item to the launcher. | 1310 // Add an item to the shelf. |
1312 LauncherID app_button_id = AddAppShortcut(); | 1311 LauncherID app_button_id = AddAppShortcut(); |
1313 internal::ShelfButton* app_button = GetButtonByID(app_button_id); | 1312 internal::ShelfButton* app_button = GetButtonByID(app_button_id); |
1314 | 1313 |
1315 // Spawn a tooltip on the item. | 1314 // Spawn a tooltip on the item. |
1316 button_host->MouseEnteredButton(app_button); | 1315 button_host->MouseEnteredButton(app_button); |
1317 ShowTooltip(); | 1316 ShowTooltip(); |
1318 EXPECT_TRUE(tooltip_manager->IsVisible()); | 1317 EXPECT_TRUE(tooltip_manager->IsVisible()); |
1319 | 1318 |
1320 // Changing shelf alignment hides the tooltip. | 1319 // Changing shelf alignment hides the tooltip. |
1321 Shell::GetInstance()->SetShelfAlignment(SHELF_ALIGNMENT_LEFT, | 1320 Shell::GetInstance()->SetShelfAlignment(SHELF_ALIGNMENT_LEFT, |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1469 const gfx::Rect& app_list_ideal_bounds = | 1468 const gfx::Rect& app_list_ideal_bounds = |
1470 test_api_->GetIdealBoundsByIndex(app_list_button_index); | 1469 test_api_->GetIdealBoundsByIndex(app_list_button_index); |
1471 const gfx::Rect& app_list_bounds = | 1470 const gfx::Rect& app_list_bounds = |
1472 test_api_->GetBoundsByIndex(app_list_button_index); | 1471 test_api_->GetBoundsByIndex(app_list_button_index); |
1473 EXPECT_EQ(app_list_bounds, app_list_ideal_bounds); | 1472 EXPECT_EQ(app_list_bounds, app_list_ideal_bounds); |
1474 } | 1473 } |
1475 | 1474 |
1476 // Checks the overflow bubble size when an item is ripped off and re-inserted. | 1475 // Checks the overflow bubble size when an item is ripped off and re-inserted. |
1477 TEST_F(ShelfViewTest, OverflowBubbleSize) { | 1476 TEST_F(ShelfViewTest, OverflowBubbleSize) { |
1478 // Replace ShelfDelegate. | 1477 // Replace ShelfDelegate. |
1479 test::ShellTestApi test_api(Shell::GetInstance()); | 1478 ShellTestApi test_api(Shell::GetInstance()); |
1480 test_api.SetShelfDelegate(NULL); | 1479 test_api.SetShelfDelegate(NULL); |
1481 ShelfDelegate *delegate = new TestShelfDelegateForShelfView(model_); | 1480 ShelfDelegate *delegate = new TestShelfDelegateForShelfView(model_); |
1482 test_api.SetShelfDelegate(delegate); | 1481 test_api.SetShelfDelegate(delegate); |
1483 test::LauncherTestAPI( | 1482 ShelfTestAPI(Shelf::ForPrimaryDisplay()).SetShelfDelegate(delegate); |
1484 Launcher::ForPrimaryDisplay()).SetShelfDelegate(delegate); | |
1485 test_api_->SetShelfDelegate(delegate); | 1483 test_api_->SetShelfDelegate(delegate); |
1486 | 1484 |
1487 AddButtonsUntilOverflow(); | 1485 AddButtonsUntilOverflow(); |
1488 | 1486 |
1489 // Show overflow bubble. | 1487 // Show overflow bubble. |
1490 test_api_->ShowOverflowBubble(); | 1488 test_api_->ShowOverflowBubble(); |
1491 ASSERT_TRUE(test_api_->overflow_bubble() && | 1489 ASSERT_TRUE(test_api_->overflow_bubble() && |
1492 test_api_->overflow_bubble()->IsShowing()); | 1490 test_api_->overflow_bubble()->IsShowing()); |
1493 | 1491 |
1494 ShelfViewTestAPI test_for_overflow_view( | 1492 ShelfViewTestAPI test_for_overflow_view( |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1601 EXPECT_TRUE(drag_reinsert_bounds.Contains(last_point)); | 1599 EXPECT_TRUE(drag_reinsert_bounds.Contains(last_point)); |
1602 } | 1600 } |
1603 | 1601 |
1604 // Check the drag insertion bounds of shelf view in multi monitor environment. | 1602 // Check the drag insertion bounds of shelf view in multi monitor environment. |
1605 TEST_F(ShelfViewTest, CheckDragInsertBoundsWithMultiMonitor) { | 1603 TEST_F(ShelfViewTest, CheckDragInsertBoundsWithMultiMonitor) { |
1606 // win8-aura doesn't support multiple display. | 1604 // win8-aura doesn't support multiple display. |
1607 if (!SupportsMultipleDisplays()) | 1605 if (!SupportsMultipleDisplays()) |
1608 return; | 1606 return; |
1609 | 1607 |
1610 UpdateDisplay("800x600,800x600"); | 1608 UpdateDisplay("800x600,800x600"); |
1611 Launcher* secondary_launcher = | 1609 Shelf* secondary_shelf = Shelf::ForWindow(Shell::GetAllRootWindows()[1]); |
1612 Launcher::ForWindow(Shell::GetAllRootWindows()[1]); | |
1613 internal::ShelfView* shelf_view_for_secondary = | 1610 internal::ShelfView* shelf_view_for_secondary = |
1614 test::LauncherTestAPI(secondary_launcher).shelf_view(); | 1611 ShelfTestAPI(secondary_shelf).shelf_view(); |
1615 | 1612 |
1616 // The bounds should be big enough for 4 buttons + overflow chevron. | 1613 // The bounds should be big enough for 4 buttons + overflow chevron. |
1617 shelf_view_for_secondary->SetBounds(0, 0, 500, | 1614 shelf_view_for_secondary->SetBounds(0, 0, 500, |
1618 internal::ShelfLayoutManager::GetPreferredShelfSize()); | 1615 internal::ShelfLayoutManager::GetPreferredShelfSize()); |
1619 | 1616 |
1620 ShelfViewTestAPI test_api_for_secondary(shelf_view_for_secondary); | 1617 ShelfViewTestAPI test_api_for_secondary(shelf_view_for_secondary); |
1621 // Speeds up animation for test. | 1618 // Speeds up animation for test. |
1622 test_api_for_secondary.SetAnimationDuration(1); | 1619 test_api_for_secondary.SetAnimationDuration(1); |
1623 | 1620 |
1624 AddButtonsUntilOverflow(); | 1621 AddButtonsUntilOverflow(); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1685 | 1682 |
1686 Shell::GetInstance()->SetShelfAlignment(SHELF_ALIGNMENT_LEFT, second_root); | 1683 Shell::GetInstance()->SetShelfAlignment(SHELF_ALIGNMENT_LEFT, second_root); |
1687 ASSERT_EQ(SHELF_ALIGNMENT_LEFT, | 1684 ASSERT_EQ(SHELF_ALIGNMENT_LEFT, |
1688 Shell::GetInstance()->GetShelfAlignment(second_root)); | 1685 Shell::GetInstance()->GetShelfAlignment(second_root)); |
1689 | 1686 |
1690 // Initially, app list and browser shortcut are added. | 1687 // Initially, app list and browser shortcut are added. |
1691 EXPECT_EQ(2, model_->item_count()); | 1688 EXPECT_EQ(2, model_->item_count()); |
1692 int browser_index = model_->GetItemIndexForType(TYPE_BROWSER_SHORTCUT); | 1689 int browser_index = model_->GetItemIndexForType(TYPE_BROWSER_SHORTCUT); |
1693 EXPECT_GT(browser_index, 0); | 1690 EXPECT_GT(browser_index, 0); |
1694 | 1691 |
1695 Launcher* secondary_launcher = Launcher::ForWindow(second_root); | 1692 Shelf* secondary_shelf = Shelf::ForWindow(second_root); |
1696 internal::ShelfView* shelf_view_for_secondary = | 1693 internal::ShelfView* shelf_view_for_secondary = |
1697 test::LauncherTestAPI(secondary_launcher).shelf_view(); | 1694 ShelfTestAPI(secondary_shelf).shelf_view(); |
1698 | 1695 |
1699 ShelfViewTestAPI test_api_for_secondary_shelf_view(shelf_view_for_secondary); | 1696 ShelfViewTestAPI test_api_for_secondary_shelf_view(shelf_view_for_secondary); |
1700 internal::ShelfButton* button = | 1697 internal::ShelfButton* button = |
1701 test_api_for_secondary_shelf_view.GetButton(browser_index); | 1698 test_api_for_secondary_shelf_view.GetButton(browser_index); |
1702 | 1699 |
1703 // Fetch the start point of dragging. | 1700 // Fetch the start point of dragging. |
1704 gfx::Point start_point = button->GetBoundsInScreen().CenterPoint(); | 1701 gfx::Point start_point = button->GetBoundsInScreen().CenterPoint(); |
1705 wm::ConvertPointFromScreen(second_root, &start_point); | 1702 wm::ConvertPointFromScreen(second_root, &start_point); |
1706 | 1703 |
1707 aura::test::EventGenerator generator(second_root, start_point); | 1704 aura::test::EventGenerator generator(second_root, start_point); |
1708 | 1705 |
1709 // Rip off the browser item. | 1706 // Rip off the browser item. |
1710 generator.PressLeftButton(); | 1707 generator.PressLeftButton(); |
1711 generator.MoveMouseTo(start_point.x() + 400, start_point.y()); | 1708 generator.MoveMouseTo(start_point.x() + 400, start_point.y()); |
1712 test_api_for_secondary_shelf_view.RunMessageLoopUntilAnimationsDone(); | 1709 test_api_for_secondary_shelf_view.RunMessageLoopUntilAnimationsDone(); |
1713 EXPECT_TRUE(test_api_for_secondary_shelf_view.IsRippedOffFromShelf()); | 1710 EXPECT_TRUE(test_api_for_secondary_shelf_view.IsRippedOffFromShelf()); |
1714 } | 1711 } |
1715 | 1712 |
1716 // Checks various drag and drop operations from OverflowBubble to Shelf. | 1713 // Checks various drag and drop operations from OverflowBubble to Shelf. |
1717 TEST_F(ShelfViewTest, CheckDragAndDropFromOverflowBubbleToShelf) { | 1714 TEST_F(ShelfViewTest, CheckDragAndDropFromOverflowBubbleToShelf) { |
1718 // Replace LauncherDelegate. | 1715 // Replace ShelfDelegate. |
1719 test::ShellTestApi test_api(Shell::GetInstance()); | 1716 ShellTestApi test_api(Shell::GetInstance()); |
1720 test_api.SetShelfDelegate(NULL); | 1717 test_api.SetShelfDelegate(NULL); |
1721 ShelfDelegate *delegate = new TestShelfDelegateForShelfView(model_); | 1718 ShelfDelegate *delegate = new TestShelfDelegateForShelfView(model_); |
1722 test_api.SetShelfDelegate(delegate); | 1719 test_api.SetShelfDelegate(delegate); |
1723 test::LauncherTestAPI( | 1720 ShelfTestAPI(Shelf::ForPrimaryDisplay()).SetShelfDelegate(delegate); |
1724 Launcher::ForPrimaryDisplay()).SetShelfDelegate(delegate); | |
1725 test_api_->SetShelfDelegate(delegate); | 1721 test_api_->SetShelfDelegate(delegate); |
1726 | 1722 |
1727 AddButtonsUntilOverflow(); | 1723 AddButtonsUntilOverflow(); |
1728 | 1724 |
1729 TestDraggingAnItemFromOverflowToShelf(false); | 1725 TestDraggingAnItemFromOverflowToShelf(false); |
1730 TestDraggingAnItemFromOverflowToShelf(true); | 1726 TestDraggingAnItemFromOverflowToShelf(true); |
1731 } | 1727 } |
1732 | 1728 |
1733 class ShelfViewVisibleBoundsTest : public ShelfViewTest, | 1729 class ShelfViewVisibleBoundsTest : public ShelfViewTest, |
1734 public testing::WithParamInterface<bool> { | 1730 public testing::WithParamInterface<bool> { |
1735 public: | 1731 public: |
1736 ShelfViewVisibleBoundsTest() : text_direction_change_(GetParam()) {} | 1732 ShelfViewVisibleBoundsTest() : text_direction_change_(GetParam()) {} |
1737 | 1733 |
1738 void CheckAllItemsAreInBounds() { | 1734 void CheckAllItemsAreInBounds() { |
1739 gfx::Rect visible_bounds = shelf_view_->GetVisibleItemsBoundsInScreen(); | 1735 gfx::Rect visible_bounds = shelf_view_->GetVisibleItemsBoundsInScreen(); |
1740 gfx::Rect launcher_bounds = shelf_view_->GetBoundsInScreen(); | 1736 gfx::Rect shelf_bounds = shelf_view_->GetBoundsInScreen(); |
1741 EXPECT_TRUE(launcher_bounds.Contains(visible_bounds)); | 1737 EXPECT_TRUE(shelf_bounds.Contains(visible_bounds)); |
1742 for (int i = 0; i < test_api_->GetButtonCount(); ++i) | 1738 for (int i = 0; i < test_api_->GetButtonCount(); ++i) |
1743 if (internal::ShelfButton* button = test_api_->GetButton(i)) | 1739 if (internal::ShelfButton* button = test_api_->GetButton(i)) |
1744 EXPECT_TRUE(visible_bounds.Contains(button->GetBoundsInScreen())); | 1740 EXPECT_TRUE(visible_bounds.Contains(button->GetBoundsInScreen())); |
1745 CheckAppListButtonIsInBounds(); | 1741 CheckAppListButtonIsInBounds(); |
1746 } | 1742 } |
1747 | 1743 |
1748 void CheckAppListButtonIsInBounds() { | 1744 void CheckAppListButtonIsInBounds() { |
1749 gfx::Rect visible_bounds = shelf_view_->GetVisibleItemsBoundsInScreen(); | 1745 gfx::Rect visible_bounds = shelf_view_->GetVisibleItemsBoundsInScreen(); |
1750 gfx::Rect app_list_button_bounds = shelf_view_->GetAppListButtonView()-> | 1746 gfx::Rect app_list_button_bounds = shelf_view_->GetAppListButtonView()-> |
1751 GetBoundsInScreen(); | 1747 GetBoundsInScreen(); |
(...skipping 21 matching lines...) Expand all Loading... |
1773 test_api_->RunMessageLoopUntilAnimationsDone(); | 1769 test_api_->RunMessageLoopUntilAnimationsDone(); |
1774 CheckAllItemsAreInBounds(); | 1770 CheckAllItemsAreInBounds(); |
1775 } | 1771 } |
1776 | 1772 |
1777 INSTANTIATE_TEST_CASE_P(LtrRtl, ShelfViewTextDirectionTest, testing::Bool()); | 1773 INSTANTIATE_TEST_CASE_P(LtrRtl, ShelfViewTextDirectionTest, testing::Bool()); |
1778 INSTANTIATE_TEST_CASE_P(VisibleBounds, ShelfViewVisibleBoundsTest, | 1774 INSTANTIATE_TEST_CASE_P(VisibleBounds, ShelfViewVisibleBoundsTest, |
1779 testing::Bool()); | 1775 testing::Bool()); |
1780 | 1776 |
1781 } // namespace test | 1777 } // namespace test |
1782 } // namespace ash | 1778 } // namespace ash |
OLD | NEW |