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/accelerators/accelerator_controller.h" | 5 #include "ash/accelerators/accelerator_controller.h" |
6 #include "ash/accelerators/accelerator_table.h" | 6 #include "ash/accelerators/accelerator_table.h" |
7 #include "ash/caps_lock_delegate.h" | 7 #include "ash/caps_lock_delegate.h" |
8 #include "ash/display/display_manager.h" | 8 #include "ash/display/display_manager.h" |
9 #include "ash/ime_control_delegate.h" | 9 #include "ash/ime_control_delegate.h" |
10 #include "ash/screenshot_delegate.h" | 10 #include "ash/screenshot_delegate.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 #include <X11/Xlib.h> | 28 #include <X11/Xlib.h> |
29 #include "ui/base/x/x11_util.h" | 29 #include "ui/base/x/x11_util.h" |
30 #endif | 30 #endif |
31 | 31 |
32 namespace ash { | 32 namespace ash { |
33 | 33 |
34 namespace { | 34 namespace { |
35 | 35 |
36 class TestTarget : public ui::AcceleratorTarget { | 36 class TestTarget : public ui::AcceleratorTarget { |
37 public: | 37 public: |
38 TestTarget() : accelerator_pressed_count_(0) {}; | 38 TestTarget() : accelerator_pressed_count_(0) {} |
39 virtual ~TestTarget() {}; | 39 virtual ~TestTarget() {} |
40 | 40 |
41 int accelerator_pressed_count() const { | 41 int accelerator_pressed_count() const { |
42 return accelerator_pressed_count_; | 42 return accelerator_pressed_count_; |
43 } | 43 } |
44 | 44 |
45 void set_accelerator_pressed_count(int accelerator_pressed_count) { | 45 void set_accelerator_pressed_count(int accelerator_pressed_count) { |
46 accelerator_pressed_count_ = accelerator_pressed_count; | 46 accelerator_pressed_count_ = accelerator_pressed_count; |
47 } | 47 } |
48 | 48 |
49 // Overridden from ui::AcceleratorTarget: | 49 // Overridden from ui::AcceleratorTarget: |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 } | 291 } |
292 | 292 |
293 bool TestTarget::CanHandleAccelerators() const { | 293 bool TestTarget::CanHandleAccelerators() const { |
294 return true; | 294 return true; |
295 } | 295 } |
296 | 296 |
297 } // namespace | 297 } // namespace |
298 | 298 |
299 class AcceleratorControllerTest : public test::AshTestBase { | 299 class AcceleratorControllerTest : public test::AshTestBase { |
300 public: | 300 public: |
301 AcceleratorControllerTest() {}; | 301 AcceleratorControllerTest() {} |
302 virtual ~AcceleratorControllerTest() {}; | 302 virtual ~AcceleratorControllerTest() {} |
303 | 303 |
304 protected: | 304 protected: |
305 void EnableInternalDisplay() { | 305 void EnableInternalDisplay() { |
306 test::DisplayManagerTestApi(Shell::GetInstance()->display_manager()). | 306 test::DisplayManagerTestApi(Shell::GetInstance()->display_manager()). |
307 SetFirstDisplayAsInternalDisplay(); | 307 SetFirstDisplayAsInternalDisplay(); |
308 } | 308 } |
309 | 309 |
310 static AcceleratorController* GetController(); | 310 static AcceleratorController* GetController(); |
311 static bool ProcessWithContext(const ui::Accelerator& accelerator); | 311 static bool ProcessWithContext(const ui::Accelerator& accelerator); |
312 | 312 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 release.set_type(ui::ET_KEY_RELEASED); | 353 release.set_type(ui::ET_KEY_RELEASED); |
354 ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); | 354 ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); |
355 ASSERT_TRUE(!!ewh); | 355 ASSERT_TRUE(!!ewh); |
356 StubForTest(ewh); | 356 StubForTest(ewh); |
357 EXPECT_TRUE(is_idle(ewh)); | 357 EXPECT_TRUE(is_idle(ewh)); |
358 EXPECT_FALSE(is_ui_shown(ewh)); | 358 EXPECT_FALSE(is_ui_shown(ewh)); |
359 EXPECT_TRUE(ProcessWithContext(press)); | 359 EXPECT_TRUE(ProcessWithContext(press)); |
360 EXPECT_FALSE(ProcessWithContext(release)); | 360 EXPECT_FALSE(ProcessWithContext(release)); |
361 EXPECT_FALSE(is_idle(ewh)); | 361 EXPECT_FALSE(is_idle(ewh)); |
362 EXPECT_TRUE(is_ui_shown(ewh)); | 362 EXPECT_TRUE(is_ui_shown(ewh)); |
363 EXPECT_TRUE(ProcessWithContext(press)); // second press before timer. | 363 EXPECT_TRUE(ProcessWithContext(press)); // second press before timer. |
364 EXPECT_FALSE(ProcessWithContext(release)); | 364 EXPECT_FALSE(ProcessWithContext(release)); |
365 SimulateTimerExpired(ewh); | 365 SimulateTimerExpired(ewh); |
366 EXPECT_TRUE(is_exiting(ewh)); | 366 EXPECT_TRUE(is_exiting(ewh)); |
367 EXPECT_FALSE(is_ui_shown(ewh)); | 367 EXPECT_FALSE(is_ui_shown(ewh)); |
368 Reset(ewh); | 368 Reset(ewh); |
369 } | 369 } |
370 | 370 |
371 // Single press of exit shortcut before timer => idle | 371 // Single press of exit shortcut before timer => idle |
372 TEST_F(AcceleratorControllerTest, ExitWarningHandlerTestSinglePress) { | 372 TEST_F(AcceleratorControllerTest, ExitWarningHandlerTestSinglePress) { |
373 ui::Accelerator press(ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN); | 373 ui::Accelerator press(ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN); |
374 ui::Accelerator release(press); | 374 ui::Accelerator release(press); |
375 release.set_type(ui::ET_KEY_RELEASED); | 375 release.set_type(ui::ET_KEY_RELEASED); |
376 ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); | 376 ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); |
377 ASSERT_TRUE(!!ewh); | 377 ASSERT_TRUE(!!ewh); |
378 StubForTest(ewh); | 378 StubForTest(ewh); |
379 EXPECT_TRUE(is_idle(ewh)); | 379 EXPECT_TRUE(is_idle(ewh)); |
380 EXPECT_FALSE(is_ui_shown(ewh)); | 380 EXPECT_FALSE(is_ui_shown(ewh)); |
381 EXPECT_TRUE(ProcessWithContext(press)); | 381 EXPECT_TRUE(ProcessWithContext(press)); |
382 EXPECT_FALSE(ProcessWithContext(release)); | 382 EXPECT_FALSE(ProcessWithContext(release)); |
383 EXPECT_FALSE(is_idle(ewh)); | 383 EXPECT_FALSE(is_idle(ewh)); |
384 EXPECT_TRUE(is_ui_shown(ewh)); | 384 EXPECT_TRUE(is_ui_shown(ewh)); |
385 SimulateTimerExpired(ewh); | 385 SimulateTimerExpired(ewh); |
386 EXPECT_TRUE(is_idle(ewh)); | 386 EXPECT_TRUE(is_idle(ewh)); |
387 EXPECT_FALSE(is_ui_shown(ewh)); | 387 EXPECT_FALSE(is_ui_shown(ewh)); |
388 Reset(ewh); | 388 Reset(ewh); |
389 } | 389 } |
| 390 |
| 391 // Shutdown ash with exit warning bubble open should not crash. |
| 392 TEST_F(AcceleratorControllerTest, LingeringExitWarningBubble) { |
| 393 ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); |
| 394 ASSERT_TRUE(!!ewh); |
| 395 StubForTest(ewh); |
| 396 |
| 397 // Trigger once to show the bubble. |
| 398 ewh->HandleAccelerator(); |
| 399 EXPECT_FALSE(is_idle(ewh)); |
| 400 EXPECT_TRUE(is_ui_shown(ewh)); |
| 401 |
| 402 // Exit ash and there should be no crash |
| 403 } |
390 #endif // !defined(OS_WIN) | 404 #endif // !defined(OS_WIN) |
391 | 405 |
392 TEST_F(AcceleratorControllerTest, Register) { | 406 TEST_F(AcceleratorControllerTest, Register) { |
393 const ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); | 407 const ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); |
394 TestTarget target; | 408 TestTarget target; |
395 GetController()->Register(accelerator_a, &target); | 409 GetController()->Register(accelerator_a, &target); |
396 | 410 |
397 // The registered accelerator is processed. | 411 // The registered accelerator is processed. |
398 EXPECT_TRUE(ProcessWithContext(accelerator_a)); | 412 EXPECT_TRUE(ProcessWithContext(accelerator_a)); |
399 EXPECT_EQ(1, target.accelerator_pressed_count()); | 413 EXPECT_EQ(1, target.accelerator_pressed_count()); |
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
901 #endif | 915 #endif |
902 | 916 |
903 #if !defined(NDEBUG) | 917 #if !defined(NDEBUG) |
904 // ToggleDesktopBackgroundMode | 918 // ToggleDesktopBackgroundMode |
905 EXPECT_TRUE(ProcessWithContext( | 919 EXPECT_TRUE(ProcessWithContext( |
906 ui::Accelerator(ui::VKEY_B, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN))); | 920 ui::Accelerator(ui::VKEY_B, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN))); |
907 #if !defined(OS_LINUX) | 921 #if !defined(OS_LINUX) |
908 // ToggleDesktopFullScreen (not implemented yet on Linux) | 922 // ToggleDesktopFullScreen (not implemented yet on Linux) |
909 EXPECT_TRUE(ProcessWithContext( | 923 EXPECT_TRUE(ProcessWithContext( |
910 ui::Accelerator(ui::VKEY_F11, ui::EF_CONTROL_DOWN))); | 924 ui::Accelerator(ui::VKEY_F11, ui::EF_CONTROL_DOWN))); |
911 #endif // OS_LINUX | 925 #endif // OS_LINUX |
912 #endif // !NDEBUG | 926 #endif // !NDEBUG |
913 | 927 |
914 #if !defined(OS_WIN) | 928 #if !defined(OS_WIN) |
915 // Exit | 929 // Exit |
916 ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); | 930 ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); |
917 ASSERT_TRUE(!!ewh); | 931 ASSERT_TRUE(!!ewh); |
918 StubForTest(ewh); | 932 StubForTest(ewh); |
919 EXPECT_TRUE(is_idle(ewh)); | 933 EXPECT_TRUE(is_idle(ewh)); |
920 EXPECT_FALSE(is_ui_shown(ewh)); | 934 EXPECT_FALSE(is_ui_shown(ewh)); |
921 EXPECT_TRUE(ProcessWithContext( | 935 EXPECT_TRUE(ProcessWithContext( |
922 ui::Accelerator(ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); | 936 ui::Accelerator(ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); |
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1227 scoped_ptr<ScreenshotDelegate>(delegate).Pass()); | 1241 scoped_ptr<ScreenshotDelegate>(delegate).Pass()); |
1228 EXPECT_EQ(0, delegate->handle_take_screenshot_count()); | 1242 EXPECT_EQ(0, delegate->handle_take_screenshot_count()); |
1229 EXPECT_TRUE(ProcessWithContext( | 1243 EXPECT_TRUE(ProcessWithContext( |
1230 ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN))); | 1244 ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN))); |
1231 EXPECT_EQ(1, delegate->handle_take_screenshot_count()); | 1245 EXPECT_EQ(1, delegate->handle_take_screenshot_count()); |
1232 EXPECT_TRUE(ProcessWithContext( | 1246 EXPECT_TRUE(ProcessWithContext( |
1233 ui::Accelerator(ui::VKEY_PRINT, ui::EF_NONE))); | 1247 ui::Accelerator(ui::VKEY_PRINT, ui::EF_NONE))); |
1234 EXPECT_EQ(2, delegate->handle_take_screenshot_count()); | 1248 EXPECT_EQ(2, delegate->handle_take_screenshot_count()); |
1235 EXPECT_TRUE(ProcessWithContext( | 1249 EXPECT_TRUE(ProcessWithContext( |
1236 ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, | 1250 ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, |
1237 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); | 1251 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); |
1238 EXPECT_EQ(2, delegate->handle_take_screenshot_count()); | 1252 EXPECT_EQ(2, delegate->handle_take_screenshot_count()); |
1239 } | 1253 } |
1240 // Brightness | 1254 // Brightness |
1241 const ui::Accelerator brightness_down(ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE); | 1255 const ui::Accelerator brightness_down(ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE); |
1242 const ui::Accelerator brightness_up(ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE); | 1256 const ui::Accelerator brightness_up(ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE); |
1243 { | 1257 { |
1244 EXPECT_FALSE(ProcessWithContext(brightness_down)); | 1258 EXPECT_FALSE(ProcessWithContext(brightness_down)); |
1245 EXPECT_FALSE(ProcessWithContext(brightness_up)); | 1259 EXPECT_FALSE(ProcessWithContext(brightness_up)); |
1246 DummyBrightnessControlDelegate* delegate = | 1260 DummyBrightnessControlDelegate* delegate = |
1247 new DummyBrightnessControlDelegate(true); | 1261 new DummyBrightnessControlDelegate(true); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1320 EXPECT_EQ(volume_down, delegate->last_accelerator()); | 1334 EXPECT_EQ(volume_down, delegate->last_accelerator()); |
1321 EXPECT_EQ(0, delegate->handle_volume_up_count()); | 1335 EXPECT_EQ(0, delegate->handle_volume_up_count()); |
1322 EXPECT_TRUE(ProcessWithContext(volume_up)); | 1336 EXPECT_TRUE(ProcessWithContext(volume_up)); |
1323 EXPECT_EQ(1, delegate->handle_volume_up_count()); | 1337 EXPECT_EQ(1, delegate->handle_volume_up_count()); |
1324 EXPECT_EQ(volume_up, delegate->last_accelerator()); | 1338 EXPECT_EQ(volume_up, delegate->last_accelerator()); |
1325 } | 1339 } |
1326 } | 1340 } |
1327 #endif | 1341 #endif |
1328 | 1342 |
1329 } // namespace ash | 1343 } // namespace ash |
OLD | NEW |