Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/system/web_notification/ash_popup_alignment_delegate.h" | 5 #include "ash/system/web_notification/ash_popup_alignment_delegate.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "ash/common/shelf/shelf_types.h" | 10 #include "ash/common/shelf/shelf_types.h" |
| 11 #include "ash/common/shelf/wm_shelf.h" | |
| 11 #include "ash/common/shell_window_ids.h" | 12 #include "ash/common/shell_window_ids.h" |
| 13 #include "ash/common/wm_lookup.h" | |
| 12 #include "ash/common/wm_root_window_controller.h" | 14 #include "ash/common/wm_root_window_controller.h" |
| 13 #include "ash/common/wm_shell.h" | 15 #include "ash/common/wm_shell.h" |
| 14 #include "ash/common/wm_window.h" | 16 #include "ash/common/wm_window.h" |
| 15 #include "ash/display/display_manager.h" | 17 #include "ash/display/display_manager.h" |
| 16 #include "ash/screen_util.h" | 18 #include "ash/screen_util.h" |
| 17 #include "ash/shelf/shelf.h" | 19 #include "ash/shelf/shelf.h" |
| 18 #include "ash/shelf/shelf_layout_manager.h" | 20 #include "ash/shelf/shelf_layout_manager.h" |
| 19 #include "ash/shell.h" | 21 #include "ash/shell.h" |
| 20 #include "ash/test/ash_test_base.h" | 22 #include "ash/test/ash_test_base.h" |
| 21 #include "base/command_line.h" | 23 #include "base/command_line.h" |
| 22 #include "base/memory/ptr_util.h" | 24 #include "base/memory/ptr_util.h" |
| 23 #include "ui/display/screen.h" | 25 #include "ui/display/screen.h" |
| 24 #include "ui/gfx/geometry/rect.h" | 26 #include "ui/gfx/geometry/rect.h" |
| 25 #include "ui/keyboard/keyboard_switches.h" | 27 #include "ui/keyboard/keyboard_switches.h" |
| 26 #include "ui/keyboard/keyboard_util.h" | 28 #include "ui/keyboard/keyboard_util.h" |
| 27 #include "ui/message_center/message_center_style.h" | 29 #include "ui/message_center/message_center_style.h" |
| 28 | 30 |
| 29 namespace ash { | 31 namespace ash { |
| 32 namespace { | |
| 33 | |
| 34 // Returns the shelf for the primary display. | |
| 35 WmShelf* GetPrimaryShelf() { | |
|
msw
2016/06/16 18:56:48
nit: Add to AshTestBase? We'll likely need this (o
James Cook
2016/06/16 21:08:14
Moved to AshTestBase.
| |
| 36 return WmShell::Get() | |
| 37 ->GetPrimaryRootWindow() | |
| 38 ->GetRootWindowController() | |
| 39 ->GetShelf(); | |
| 40 } | |
| 41 | |
| 42 } // namespace | |
| 30 | 43 |
| 31 class AshPopupAlignmentDelegateTest : public test::AshTestBase { | 44 class AshPopupAlignmentDelegateTest : public test::AshTestBase { |
| 32 public: | 45 public: |
| 33 AshPopupAlignmentDelegateTest() {} | 46 AshPopupAlignmentDelegateTest() {} |
| 34 ~AshPopupAlignmentDelegateTest() override {} | 47 ~AshPopupAlignmentDelegateTest() override {} |
| 35 | 48 |
| 36 void SetUp() override { | 49 void SetUp() override { |
| 37 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 50 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 38 keyboard::switches::kEnableVirtualKeyboard); | 51 keyboard::switches::kEnableVirtualKeyboard); |
| 39 test::AshTestBase::SetUp(); | 52 test::AshTestBase::SetUp(); |
| 40 SetAlignmentDelegate(base::WrapUnique(new AshPopupAlignmentDelegate( | 53 SetAlignmentDelegate( |
| 41 Shelf::ForPrimaryDisplay()->shelf_layout_manager()))); | 54 base::WrapUnique(new AshPopupAlignmentDelegate(GetPrimaryShelf()))); |
| 42 } | 55 } |
| 43 | 56 |
| 44 void TearDown() override { | 57 void TearDown() override { |
| 45 alignment_delegate_.reset(); | 58 alignment_delegate_.reset(); |
| 46 test::AshTestBase::TearDown(); | 59 test::AshTestBase::TearDown(); |
| 47 } | 60 } |
| 48 | 61 |
| 49 void SetKeyboardBounds(const gfx::Rect& new_bounds) { | 62 void SetKeyboardBounds(const gfx::Rect& new_bounds) { |
| 50 Shelf::ForPrimaryDisplay() | 63 Shelf::ForPrimaryDisplay() |
| 51 ->shelf_layout_manager() | 64 ->shelf_layout_manager() |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 112 ->GetRootWindowController() | 125 ->GetRootWindowController() |
| 113 ->ConfigureWidgetInitParamsForContainer(widget.get(), container_id, | 126 ->ConfigureWidgetInitParamsForContainer(widget.get(), container_id, |
| 114 ¶ms); | 127 ¶ms); |
| 115 widget->Init(params); | 128 widget->Init(params); |
| 116 widget->Show(); | 129 widget->Show(); |
| 117 return widget; | 130 return widget; |
| 118 } | 131 } |
| 119 | 132 |
| 120 private: | 133 private: |
| 121 std::unique_ptr<AshPopupAlignmentDelegate> alignment_delegate_; | 134 std::unique_ptr<AshPopupAlignmentDelegate> alignment_delegate_; |
| 135 | |
| 136 DISALLOW_COPY_AND_ASSIGN(AshPopupAlignmentDelegateTest); | |
| 122 }; | 137 }; |
| 123 | 138 |
| 124 #if defined(OS_WIN) && !defined(USE_ASH) | 139 #if defined(OS_WIN) && !defined(USE_ASH) |
| 125 // TODO(msw): Broken on Windows. http://crbug.com/584038 | 140 // TODO(msw): Broken on Windows. http://crbug.com/584038 |
| 126 #define MAYBE_ShelfAlignment DISABLED_ShelfAlignment | 141 #define MAYBE_ShelfAlignment DISABLED_ShelfAlignment |
| 127 #else | 142 #else |
| 128 #define MAYBE_ShelfAlignment ShelfAlignment | 143 #define MAYBE_ShelfAlignment ShelfAlignment |
| 129 #endif | 144 #endif |
| 130 TEST_F(AshPopupAlignmentDelegateTest, MAYBE_ShelfAlignment) { | 145 TEST_F(AshPopupAlignmentDelegateTest, MAYBE_ShelfAlignment) { |
| 131 const gfx::Rect toast_size(0, 0, 10, 10); | 146 const gfx::Rect toast_size(0, 0, 10, 10); |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 272 | 287 |
| 273 EXPECT_EQ(origin_x, alignment_delegate()->GetToastOriginX(toast_size)); | 288 EXPECT_EQ(origin_x, alignment_delegate()->GetToastOriginX(toast_size)); |
| 274 EXPECT_EQ(baseline - kTrayHeight - message_center::kMarginBetweenItems, | 289 EXPECT_EQ(baseline - kTrayHeight - message_center::kMarginBetweenItems, |
| 275 alignment_delegate()->GetBaseLine()); | 290 alignment_delegate()->GetBaseLine()); |
| 276 } | 291 } |
| 277 | 292 |
| 278 TEST_F(AshPopupAlignmentDelegateTest, Extended) { | 293 TEST_F(AshPopupAlignmentDelegateTest, Extended) { |
| 279 if (!SupportsMultipleDisplays()) | 294 if (!SupportsMultipleDisplays()) |
| 280 return; | 295 return; |
| 281 UpdateDisplay("600x600,800x800"); | 296 UpdateDisplay("600x600,800x800"); |
| 282 SetAlignmentDelegate(base::WrapUnique(new AshPopupAlignmentDelegate( | 297 SetAlignmentDelegate( |
| 283 Shelf::ForPrimaryDisplay()->shelf_layout_manager()))); | 298 base::WrapUnique(new AshPopupAlignmentDelegate(GetPrimaryShelf()))); |
| 284 | 299 |
| 285 display::Display second_display = ScreenUtil::GetSecondaryDisplay(); | 300 display::Display second_display = ScreenUtil::GetSecondaryDisplay(); |
| 286 AshPopupAlignmentDelegate for_2nd_display( | 301 WmShelf* second_shelf = |
| 287 Shelf::ForDisplayId(second_display.id())->shelf_layout_manager()); | 302 WmLookup::Get() |
| 303 ->GetRootWindowControllerWithDisplayId(second_display.id()) | |
| 304 ->GetShelf(); | |
| 305 AshPopupAlignmentDelegate for_2nd_display(second_shelf); | |
| 288 UpdateWorkArea(&for_2nd_display, second_display); | 306 UpdateWorkArea(&for_2nd_display, second_display); |
| 289 // Make sure that the toast position on the secondary display is | 307 // Make sure that the toast position on the secondary display is |
| 290 // positioned correctly. | 308 // positioned correctly. |
| 291 EXPECT_LT(1300, for_2nd_display.GetToastOriginX(gfx::Rect(0, 0, 10, 10))); | 309 EXPECT_LT(1300, for_2nd_display.GetToastOriginX(gfx::Rect(0, 0, 10, 10))); |
| 292 EXPECT_LT(700, for_2nd_display.GetBaseLine()); | 310 EXPECT_LT(700, for_2nd_display.GetBaseLine()); |
| 293 } | 311 } |
| 294 | 312 |
| 295 TEST_F(AshPopupAlignmentDelegateTest, Unified) { | 313 TEST_F(AshPopupAlignmentDelegateTest, Unified) { |
| 296 if (!SupportsMultipleDisplays()) | 314 if (!SupportsMultipleDisplays()) |
| 297 return; | 315 return; |
| 298 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | 316 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| 299 display_manager->SetUnifiedDesktopEnabled(true); | 317 display_manager->SetUnifiedDesktopEnabled(true); |
| 300 | 318 |
| 301 // Reset the delegate as the primary display's shelf will be destroyed during | 319 // Reset the delegate as the primary display's shelf will be destroyed during |
| 302 // transition. | 320 // transition. |
| 303 SetAlignmentDelegate(nullptr); | 321 SetAlignmentDelegate(nullptr); |
| 304 | 322 |
| 305 UpdateDisplay("600x600,800x800"); | 323 UpdateDisplay("600x600,800x800"); |
| 306 SetAlignmentDelegate(base::WrapUnique(new AshPopupAlignmentDelegate( | 324 SetAlignmentDelegate( |
| 307 Shelf::ForPrimaryDisplay()->shelf_layout_manager()))); | 325 base::WrapUnique(new AshPopupAlignmentDelegate(GetPrimaryShelf()))); |
| 308 | 326 |
| 309 EXPECT_GT(600, | 327 EXPECT_GT(600, |
| 310 alignment_delegate()->GetToastOriginX(gfx::Rect(0, 0, 10, 10))); | 328 alignment_delegate()->GetToastOriginX(gfx::Rect(0, 0, 10, 10))); |
| 311 } | 329 } |
| 312 | 330 |
| 313 // Tests that when the keyboard is showing that notifications appear above it, | 331 // Tests that when the keyboard is showing that notifications appear above it, |
| 314 // and that they return to normal once the keyboard is gone. | 332 // and that they return to normal once the keyboard is gone. |
| 315 #if defined(OS_WIN) && !defined(USE_ASH) | 333 #if defined(OS_WIN) && !defined(USE_ASH) |
| 316 // TODO(msw): Broken on Windows. http://crbug.com/584038 | 334 // TODO(msw): Broken on Windows. http://crbug.com/584038 |
| 317 #define MAYBE_KeyboardShowing DISABLED_KeyboardShowing | 335 #define MAYBE_KeyboardShowing DISABLED_KeyboardShowing |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 329 SetKeyboardBounds(keyboard_bounds); | 347 SetKeyboardBounds(keyboard_bounds); |
| 330 int keyboard_baseline = alignment_delegate()->GetBaseLine(); | 348 int keyboard_baseline = alignment_delegate()->GetBaseLine(); |
| 331 EXPECT_NE(baseline, keyboard_baseline); | 349 EXPECT_NE(baseline, keyboard_baseline); |
| 332 EXPECT_GT(keyboard_bounds.y(), keyboard_baseline); | 350 EXPECT_GT(keyboard_bounds.y(), keyboard_baseline); |
| 333 | 351 |
| 334 SetKeyboardBounds(gfx::Rect()); | 352 SetKeyboardBounds(gfx::Rect()); |
| 335 EXPECT_EQ(baseline, alignment_delegate()->GetBaseLine()); | 353 EXPECT_EQ(baseline, alignment_delegate()->GetBaseLine()); |
| 336 } | 354 } |
| 337 | 355 |
| 338 } // namespace ash | 356 } // namespace ash |
| OLD | NEW |