| 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/common/system/web_notification/ash_popup_alignment_delegate.h" | 5 #include "ash/common/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/shelf/wm_shelf.h" |
| 12 #include "ash/common/shell_window_ids.h" | 12 #include "ash/common/shell_window_ids.h" |
| 13 #include "ash/common/wm_lookup.h" | 13 #include "ash/common/wm_lookup.h" |
| 14 #include "ash/common/wm_root_window_controller.h" | 14 #include "ash/common/wm_root_window_controller.h" |
| 15 #include "ash/common/wm_shell.h" | |
| 16 #include "ash/common/wm_window.h" | 15 #include "ash/common/wm_window.h" |
| 17 #include "ash/display/display_manager.h" | 16 #include "ash/display/display_manager.h" |
| 18 #include "ash/shell.h" | 17 #include "ash/shell.h" |
| 19 #include "ash/test/ash_test_base.h" | 18 #include "ash/test/ash_test_base.h" |
| 20 #include "base/command_line.h" | 19 #include "base/command_line.h" |
| 21 #include "base/memory/ptr_util.h" | 20 #include "base/memory/ptr_util.h" |
| 22 #include "ui/display/screen.h" | 21 #include "ui/display/screen.h" |
| 23 #include "ui/gfx/geometry/rect.h" | 22 #include "ui/gfx/geometry/rect.h" |
| 24 #include "ui/keyboard/keyboard_switches.h" | 23 #include "ui/keyboard/keyboard_switches.h" |
| 25 #include "ui/keyboard/keyboard_util.h" | 24 #include "ui/keyboard/keyboard_util.h" |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 } | 80 } |
| 82 | 81 |
| 83 if (center_point.x() < point.x()) | 82 if (center_point.x() < point.x()) |
| 84 return (center_point.y() < point.y()) ? BOTTOM_RIGHT : TOP_RIGHT; | 83 return (center_point.y() < point.y()) ? BOTTOM_RIGHT : TOP_RIGHT; |
| 85 else | 84 else |
| 86 return (center_point.y() < point.y()) ? BOTTOM_LEFT : TOP_LEFT; | 85 return (center_point.y() < point.y()) ? BOTTOM_LEFT : TOP_LEFT; |
| 87 } | 86 } |
| 88 | 87 |
| 89 gfx::Rect GetWorkArea() { return alignment_delegate_->work_area_; } | 88 gfx::Rect GetWorkArea() { return alignment_delegate_->work_area_; } |
| 90 | 89 |
| 91 std::unique_ptr<views::Widget> CreateTestWidget(int container_id) { | |
| 92 std::unique_ptr<views::Widget> widget(new views::Widget); | |
| 93 views::Widget::InitParams params; | |
| 94 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | |
| 95 params.bounds = gfx::Rect(0, 0, 50, 50); | |
| 96 WmShell::Get() | |
| 97 ->GetPrimaryRootWindow() | |
| 98 ->GetRootWindowController() | |
| 99 ->ConfigureWidgetInitParamsForContainer(widget.get(), container_id, | |
| 100 ¶ms); | |
| 101 widget->Init(params); | |
| 102 widget->Show(); | |
| 103 return widget; | |
| 104 } | |
| 105 | |
| 106 private: | 90 private: |
| 107 std::unique_ptr<AshPopupAlignmentDelegate> alignment_delegate_; | 91 std::unique_ptr<AshPopupAlignmentDelegate> alignment_delegate_; |
| 108 | 92 |
| 109 DISALLOW_COPY_AND_ASSIGN(AshPopupAlignmentDelegateTest); | 93 DISALLOW_COPY_AND_ASSIGN(AshPopupAlignmentDelegateTest); |
| 110 }; | 94 }; |
| 111 | 95 |
| 112 #if defined(OS_WIN) && !defined(USE_ASH) | 96 #if defined(OS_WIN) && !defined(USE_ASH) |
| 113 // TODO(msw): Broken on Windows. http://crbug.com/584038 | 97 // TODO(msw): Broken on Windows. http://crbug.com/584038 |
| 114 #define MAYBE_ShelfAlignment DISABLED_ShelfAlignment | 98 #define MAYBE_ShelfAlignment DISABLED_ShelfAlignment |
| 115 #else | 99 #else |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 EXPECT_FALSE(alignment_delegate()->IsFromLeft()); | 146 EXPECT_FALSE(alignment_delegate()->IsFromLeft()); |
| 163 } | 147 } |
| 164 | 148 |
| 165 TEST_F(AshPopupAlignmentDelegateTest, AutoHide) { | 149 TEST_F(AshPopupAlignmentDelegateTest, AutoHide) { |
| 166 const gfx::Rect toast_size(0, 0, 10, 10); | 150 const gfx::Rect toast_size(0, 0, 10, 10); |
| 167 UpdateDisplay("600x600"); | 151 UpdateDisplay("600x600"); |
| 168 int origin_x = alignment_delegate()->GetToastOriginX(toast_size); | 152 int origin_x = alignment_delegate()->GetToastOriginX(toast_size); |
| 169 int baseline = alignment_delegate()->GetBaseLine(); | 153 int baseline = alignment_delegate()->GetBaseLine(); |
| 170 | 154 |
| 171 // Create a window, otherwise autohide doesn't work. | 155 // Create a window, otherwise autohide doesn't work. |
| 172 std::unique_ptr<views::Widget> widget = | 156 std::unique_ptr<views::Widget> widget = CreateTestWidget( |
| 173 CreateTestWidget(kShellWindowId_DefaultContainer); | 157 nullptr, kShellWindowId_DefaultContainer, gfx::Rect(0, 0, 50, 50)); |
| 174 WmShelf* shelf = GetPrimaryShelf(); | 158 WmShelf* shelf = GetPrimaryShelf(); |
| 175 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); | 159 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
| 176 EXPECT_EQ(origin_x, alignment_delegate()->GetToastOriginX(toast_size)); | 160 EXPECT_EQ(origin_x, alignment_delegate()->GetToastOriginX(toast_size)); |
| 177 EXPECT_LT(baseline, alignment_delegate()->GetBaseLine()); | 161 EXPECT_LT(baseline, alignment_delegate()->GetBaseLine()); |
| 178 } | 162 } |
| 179 | 163 |
| 180 // Verify that docked window doesn't affect the popup alignment. | 164 // Verify that docked window doesn't affect the popup alignment. |
| 181 TEST_F(AshPopupAlignmentDelegateTest, DockedWindow) { | 165 TEST_F(AshPopupAlignmentDelegateTest, DockedWindow) { |
| 182 const gfx::Rect toast_size(0, 0, 10, 10); | 166 const gfx::Rect toast_size(0, 0, 10, 10); |
| 183 UpdateDisplay("600x600"); | 167 UpdateDisplay("600x600"); |
| 184 int origin_x = alignment_delegate()->GetToastOriginX(toast_size); | 168 int origin_x = alignment_delegate()->GetToastOriginX(toast_size); |
| 185 int baseline = alignment_delegate()->GetBaseLine(); | 169 int baseline = alignment_delegate()->GetBaseLine(); |
| 186 | 170 |
| 187 std::unique_ptr<views::Widget> widget = | 171 std::unique_ptr<views::Widget> widget = CreateTestWidget( |
| 188 CreateTestWidget(kShellWindowId_DockedContainer); | 172 nullptr, kShellWindowId_DockedContainer, gfx::Rect(0, 0, 50, 50)); |
| 189 | 173 |
| 190 // Left-side dock should not affect popup alignment | 174 // Left-side dock should not affect popup alignment |
| 191 EXPECT_EQ(origin_x, alignment_delegate()->GetToastOriginX(toast_size)); | 175 EXPECT_EQ(origin_x, alignment_delegate()->GetToastOriginX(toast_size)); |
| 192 EXPECT_EQ(baseline, alignment_delegate()->GetBaseLine()); | 176 EXPECT_EQ(baseline, alignment_delegate()->GetBaseLine()); |
| 193 EXPECT_FALSE(alignment_delegate()->IsTopDown()); | 177 EXPECT_FALSE(alignment_delegate()->IsTopDown()); |
| 194 EXPECT_FALSE(alignment_delegate()->IsFromLeft()); | 178 EXPECT_FALSE(alignment_delegate()->IsFromLeft()); |
| 195 | 179 |
| 196 // Force dock to right-side | 180 // Force dock to right-side |
| 197 WmShelf* shelf = GetPrimaryShelf(); | 181 WmShelf* shelf = GetPrimaryShelf(); |
| 198 shelf->SetAlignment(SHELF_ALIGNMENT_LEFT); | 182 shelf->SetAlignment(SHELF_ALIGNMENT_LEFT); |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 shelf->SetKeyboardBoundsForTesting(keyboard_bounds); | 307 shelf->SetKeyboardBoundsForTesting(keyboard_bounds); |
| 324 int keyboard_baseline = alignment_delegate()->GetBaseLine(); | 308 int keyboard_baseline = alignment_delegate()->GetBaseLine(); |
| 325 EXPECT_NE(baseline, keyboard_baseline); | 309 EXPECT_NE(baseline, keyboard_baseline); |
| 326 EXPECT_GT(keyboard_bounds.y(), keyboard_baseline); | 310 EXPECT_GT(keyboard_bounds.y(), keyboard_baseline); |
| 327 | 311 |
| 328 shelf->SetKeyboardBoundsForTesting(gfx::Rect()); | 312 shelf->SetKeyboardBoundsForTesting(gfx::Rect()); |
| 329 EXPECT_EQ(baseline, alignment_delegate()->GetBaseLine()); | 313 EXPECT_EQ(baseline, alignment_delegate()->GetBaseLine()); |
| 330 } | 314 } |
| 331 | 315 |
| 332 } // namespace ash | 316 } // namespace ash |
| OLD | NEW |