| 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 | 6 |
| 7 #include "ash/accelerators/accelerator_table.h" | 7 #include "ash/accelerators/accelerator_table.h" |
| 8 #include "ash/accessibility_delegate.h" | 8 #include "ash/accessibility_delegate.h" |
| 9 #include "ash/ash_switches.h" | 9 #include "ash/ash_switches.h" |
| 10 #include "ash/display/display_manager.h" | 10 #include "ash/display/display_manager.h" |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 ~AcceleratorControllerTest() override {} | 223 ~AcceleratorControllerTest() override {} |
| 224 | 224 |
| 225 protected: | 225 protected: |
| 226 void EnableInternalDisplay() { | 226 void EnableInternalDisplay() { |
| 227 test::DisplayManagerTestApi().SetFirstDisplayAsInternalDisplay(); | 227 test::DisplayManagerTestApi().SetFirstDisplayAsInternalDisplay(); |
| 228 } | 228 } |
| 229 | 229 |
| 230 static AcceleratorController* GetController(); | 230 static AcceleratorController* GetController(); |
| 231 | 231 |
| 232 static bool ProcessInController(const ui::Accelerator& accelerator) { | 232 static bool ProcessInController(const ui::Accelerator& accelerator) { |
| 233 if (accelerator.type() == ui::ET_KEY_RELEASED) { |
| 234 // If the |accelerator| should trigger on release, then we store the |
| 235 // pressed version of it first in history then the released one to |
| 236 // simulate what happens in reality. |
| 237 ui::Accelerator pressed_accelerator = accelerator; |
| 238 pressed_accelerator.set_type(ui::ET_KEY_PRESSED); |
| 239 GetController()->accelerator_history()->StoreCurrentAccelerator( |
| 240 pressed_accelerator); |
| 241 } |
| 233 GetController()->accelerator_history()-> | 242 GetController()->accelerator_history()-> |
| 234 StoreCurrentAccelerator(accelerator); | 243 StoreCurrentAccelerator(accelerator); |
| 235 return GetController()->Process(accelerator); | 244 return GetController()->Process(accelerator); |
| 236 } | 245 } |
| 237 | 246 |
| 238 static const ui::Accelerator& GetPreviousAccelerator() { | 247 static const ui::Accelerator& GetPreviousAccelerator() { |
| 239 return GetController()->accelerator_history()-> | 248 return GetController()->accelerator_history()-> |
| 240 previous_accelerator(); | 249 previous_accelerator(); |
| 241 } | 250 } |
| 242 | 251 |
| (...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1088 // released. | 1097 // released. |
| 1089 const ui::Accelerator shift_alt_x_press( | 1098 const ui::Accelerator shift_alt_x_press( |
| 1090 ui::VKEY_X, | 1099 ui::VKEY_X, |
| 1091 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); | 1100 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); |
| 1092 const ReleaseAccelerator shift_alt_x(ui::VKEY_X, | 1101 const ReleaseAccelerator shift_alt_x(ui::VKEY_X, |
| 1093 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); | 1102 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); |
| 1094 | 1103 |
| 1095 EXPECT_FALSE(ProcessInController(shift_alt_press)); | 1104 EXPECT_FALSE(ProcessInController(shift_alt_press)); |
| 1096 EXPECT_FALSE(ProcessInController(shift_alt_x_press)); | 1105 EXPECT_FALSE(ProcessInController(shift_alt_x_press)); |
| 1097 EXPECT_FALSE(ProcessInController(shift_alt_x)); | 1106 EXPECT_FALSE(ProcessInController(shift_alt_x)); |
| 1098 EXPECT_FALSE(ProcessInController(shift_alt)); | 1107 EXPECT_TRUE(ProcessInController(shift_alt)); |
| 1099 EXPECT_EQ(2, delegate->handle_next_ime_count()); | 1108 EXPECT_EQ(3, delegate->handle_next_ime_count()); |
| 1100 | 1109 |
| 1101 // But we _should_ if X is either VKEY_RETURN or VKEY_SPACE. | 1110 // But we _should_ if X is either VKEY_RETURN or VKEY_SPACE. |
| 1102 // TODO(nona|mazda): Remove this when crbug.com/139556 in a better way. | 1111 // TODO(nona|mazda): Remove this when crbug.com/139556 in a better way. |
| 1103 const ui::Accelerator shift_alt_return_press( | 1112 const ui::Accelerator shift_alt_return_press( |
| 1104 ui::VKEY_RETURN, | 1113 ui::VKEY_RETURN, |
| 1105 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); | 1114 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); |
| 1106 const ReleaseAccelerator shift_alt_return( | 1115 const ReleaseAccelerator shift_alt_return( |
| 1107 ui::VKEY_RETURN, | 1116 ui::VKEY_RETURN, |
| 1108 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); | 1117 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); |
| 1109 | 1118 |
| 1110 EXPECT_FALSE(ProcessInController(shift_alt_press)); | 1119 EXPECT_FALSE(ProcessInController(shift_alt_press)); |
| 1111 EXPECT_FALSE(ProcessInController(shift_alt_return_press)); | 1120 EXPECT_FALSE(ProcessInController(shift_alt_return_press)); |
| 1112 EXPECT_FALSE(ProcessInController(shift_alt_return)); | 1121 EXPECT_FALSE(ProcessInController(shift_alt_return)); |
| 1113 EXPECT_TRUE(ProcessInController(shift_alt)); | 1122 EXPECT_TRUE(ProcessInController(shift_alt)); |
| 1114 EXPECT_EQ(3, delegate->handle_next_ime_count()); | 1123 EXPECT_EQ(4, delegate->handle_next_ime_count()); |
| 1115 | 1124 |
| 1116 const ui::Accelerator shift_alt_space_press( | 1125 const ui::Accelerator shift_alt_space_press( |
| 1117 ui::VKEY_SPACE, | 1126 ui::VKEY_SPACE, |
| 1118 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); | 1127 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); |
| 1119 const ReleaseAccelerator shift_alt_space( | 1128 const ReleaseAccelerator shift_alt_space( |
| 1120 ui::VKEY_SPACE, | 1129 ui::VKEY_SPACE, |
| 1121 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); | 1130 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); |
| 1122 | 1131 |
| 1123 EXPECT_FALSE(ProcessInController(shift_alt_press)); | 1132 EXPECT_FALSE(ProcessInController(shift_alt_press)); |
| 1124 EXPECT_FALSE(ProcessInController(shift_alt_space_press)); | 1133 EXPECT_FALSE(ProcessInController(shift_alt_space_press)); |
| 1125 EXPECT_FALSE(ProcessInController(shift_alt_space)); | 1134 EXPECT_FALSE(ProcessInController(shift_alt_space)); |
| 1126 EXPECT_TRUE(ProcessInController(shift_alt)); | 1135 EXPECT_TRUE(ProcessInController(shift_alt)); |
| 1127 EXPECT_EQ(4, delegate->handle_next_ime_count()); | 1136 EXPECT_EQ(5, delegate->handle_next_ime_count()); |
| 1128 } | 1137 } |
| 1129 | 1138 |
| 1130 #if defined(OS_CHROMEOS) | 1139 #if defined(OS_CHROMEOS) |
| 1131 // Test IME shortcuts again with unnormalized accelerators (Chrome OS only). | 1140 // Test IME shortcuts again with unnormalized accelerators (Chrome OS only). |
| 1132 { | 1141 { |
| 1133 const ui::Accelerator shift_alt_press(ui::VKEY_MENU, ui::EF_SHIFT_DOWN); | 1142 const ui::Accelerator shift_alt_press(ui::VKEY_MENU, ui::EF_SHIFT_DOWN); |
| 1134 const ReleaseAccelerator shift_alt(ui::VKEY_MENU, ui::EF_SHIFT_DOWN); | 1143 const ReleaseAccelerator shift_alt(ui::VKEY_MENU, ui::EF_SHIFT_DOWN); |
| 1135 const ui::Accelerator alt_shift_press(ui::VKEY_SHIFT, ui::EF_ALT_DOWN); | 1144 const ui::Accelerator alt_shift_press(ui::VKEY_SHIFT, ui::EF_ALT_DOWN); |
| 1136 const ReleaseAccelerator alt_shift(ui::VKEY_SHIFT, ui::EF_ALT_DOWN); | 1145 const ReleaseAccelerator alt_shift(ui::VKEY_SHIFT, ui::EF_ALT_DOWN); |
| 1137 | 1146 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1150 // released. | 1159 // released. |
| 1151 const ui::Accelerator shift_alt_x_press( | 1160 const ui::Accelerator shift_alt_x_press( |
| 1152 ui::VKEY_X, | 1161 ui::VKEY_X, |
| 1153 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); | 1162 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); |
| 1154 const ReleaseAccelerator shift_alt_x(ui::VKEY_X, | 1163 const ReleaseAccelerator shift_alt_x(ui::VKEY_X, |
| 1155 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); | 1164 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); |
| 1156 | 1165 |
| 1157 EXPECT_FALSE(ProcessInController(shift_alt_press)); | 1166 EXPECT_FALSE(ProcessInController(shift_alt_press)); |
| 1158 EXPECT_FALSE(ProcessInController(shift_alt_x_press)); | 1167 EXPECT_FALSE(ProcessInController(shift_alt_x_press)); |
| 1159 EXPECT_FALSE(ProcessInController(shift_alt_x)); | 1168 EXPECT_FALSE(ProcessInController(shift_alt_x)); |
| 1160 EXPECT_FALSE(ProcessInController(shift_alt)); | 1169 EXPECT_TRUE(ProcessInController(shift_alt)); |
| 1161 EXPECT_EQ(2, delegate->handle_next_ime_count()); | 1170 EXPECT_EQ(3, delegate->handle_next_ime_count()); |
| 1162 } | 1171 } |
| 1163 #endif | 1172 #endif |
| 1164 } | 1173 } |
| 1165 | 1174 |
| 1166 // TODO(nona|mazda): Remove this when crbug.com/139556 in a better way. | 1175 // TODO(nona|mazda): Remove this when crbug.com/139556 in a better way. |
| 1167 TEST_F(AcceleratorControllerTest, ImeGlobalAcceleratorsWorkaround139556) { | 1176 TEST_F(AcceleratorControllerTest, ImeGlobalAcceleratorsWorkaround139556) { |
| 1168 // The workaround for crbug.com/139556 depends on the fact that we don't | 1177 // The workaround for crbug.com/139556 depends on the fact that we don't |
| 1169 // use Shift+Alt+Enter/Space with ET_KEY_PRESSED as an accelerator. Test it. | 1178 // use Shift+Alt+Enter/Space with ET_KEY_PRESSED as an accelerator. Test it. |
| 1170 const ui::Accelerator shift_alt_return_press( | 1179 const ui::Accelerator shift_alt_return_press( |
| 1171 ui::VKEY_RETURN, | 1180 ui::VKEY_RETURN, |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1473 | 1482 |
| 1474 #if defined(OS_CHROMEOS) | 1483 #if defined(OS_CHROMEOS) |
| 1475 namespace { | 1484 namespace { |
| 1476 | 1485 |
| 1477 // defines a class to test the behavior of deprecated accelerators. | 1486 // defines a class to test the behavior of deprecated accelerators. |
| 1478 class DeprecatedAcceleratorTester : public AcceleratorControllerTest { | 1487 class DeprecatedAcceleratorTester : public AcceleratorControllerTest { |
| 1479 public: | 1488 public: |
| 1480 DeprecatedAcceleratorTester() {} | 1489 DeprecatedAcceleratorTester() {} |
| 1481 ~DeprecatedAcceleratorTester() override {} | 1490 ~DeprecatedAcceleratorTester() override {} |
| 1482 | 1491 |
| 1492 void SetUp() override { |
| 1493 AcceleratorControllerTest::SetUp(); |
| 1494 |
| 1495 // For testing the deprecated and new IME shortcuts. |
| 1496 DummyImeControlDelegate* delegate = new DummyImeControlDelegate; |
| 1497 GetController()->SetImeControlDelegate( |
| 1498 scoped_ptr<ImeControlDelegate>(delegate).Pass()); |
| 1499 } |
| 1500 |
| 1483 ui::Accelerator CreateAccelerator(const AcceleratorData& data) const { | 1501 ui::Accelerator CreateAccelerator(const AcceleratorData& data) const { |
| 1484 ui::Accelerator result(data.keycode, data.modifiers); | 1502 ui::Accelerator result(data.keycode, data.modifiers); |
| 1485 result.set_type(data.trigger_on_press ? ui::ET_KEY_PRESSED | 1503 result.set_type(data.trigger_on_press ? ui::ET_KEY_PRESSED |
| 1486 : ui::ET_KEY_RELEASED); | 1504 : ui::ET_KEY_RELEASED); |
| 1487 return result; | 1505 return result; |
| 1488 } | 1506 } |
| 1489 | 1507 |
| 1490 void ResetStateIfNeeded() { | 1508 void ResetStateIfNeeded() { |
| 1491 Shell* shell = Shell::GetInstance(); | 1509 Shell* shell = Shell::GetInstance(); |
| 1492 if (shell->session_state_delegate()->IsScreenLocked() || | 1510 if (shell->session_state_delegate()->IsScreenLocked() || |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1512 } | 1530 } |
| 1513 | 1531 |
| 1514 private: | 1532 private: |
| 1515 DISALLOW_COPY_AND_ASSIGN(DeprecatedAcceleratorTester); | 1533 DISALLOW_COPY_AND_ASSIGN(DeprecatedAcceleratorTester); |
| 1516 }; | 1534 }; |
| 1517 | 1535 |
| 1518 } // namespace | 1536 } // namespace |
| 1519 | 1537 |
| 1520 TEST_F(DeprecatedAcceleratorTester, TestDeprecatedAcceleratorsBehavior) { | 1538 TEST_F(DeprecatedAcceleratorTester, TestDeprecatedAcceleratorsBehavior) { |
| 1521 for (size_t i = 0; i < kDeprecatedAcceleratorsLength; ++i) { | 1539 for (size_t i = 0; i < kDeprecatedAcceleratorsLength; ++i) { |
| 1522 const DeprecatedAcceleratorData& data = kDeprecatedAccelerators[i]; | 1540 const AcceleratorData& entry = kDeprecatedAccelerators[i]; |
| 1541 |
| 1542 auto itr = GetController()->actions_with_deprecations_.find(entry.action); |
| 1543 ASSERT_TRUE(itr != GetController()->actions_with_deprecations_.end()); |
| 1544 const DeprecatedAcceleratorData* data = itr->second; |
| 1523 | 1545 |
| 1524 EXPECT_TRUE(IsMessageCenterEmpty()); | 1546 EXPECT_TRUE(IsMessageCenterEmpty()); |
| 1525 | 1547 ui::Accelerator deprecated_accelerator = CreateAccelerator(entry); |
| 1526 ui::Accelerator deprecated_accelerator = | 1548 if (data->deprecated_enabled) |
| 1527 CreateAccelerator(data.deprecated_accelerator); | |
| 1528 if (data.deprecated_enabled) | |
| 1529 EXPECT_TRUE(ProcessInController(deprecated_accelerator)); | 1549 EXPECT_TRUE(ProcessInController(deprecated_accelerator)); |
| 1530 else | 1550 else |
| 1531 EXPECT_FALSE(ProcessInController(deprecated_accelerator)); | 1551 EXPECT_FALSE(ProcessInController(deprecated_accelerator)); |
| 1532 | 1552 |
| 1533 // We expect to see a notification in the message center. | 1553 // We expect to see a notification in the message center. |
| 1534 EXPECT_TRUE( | 1554 EXPECT_TRUE( |
| 1535 ContainsDeprecatedAcceleratorNotification(data.uma_histogram_name)); | 1555 ContainsDeprecatedAcceleratorNotification(data->uma_histogram_name)); |
| 1536 RemoveAllNotifications(); | 1556 RemoveAllNotifications(); |
| 1537 | 1557 |
| 1538 // If the action is LOCK_SCREEN, we must reset the state by unlocking the | 1558 // If the action is LOCK_SCREEN, we must reset the state by unlocking the |
| 1539 // screen before we proceed testing the rest of accelerators. | 1559 // screen before we proceed testing the rest of accelerators. |
| 1540 ResetStateIfNeeded(); | 1560 ResetStateIfNeeded(); |
| 1541 } | 1561 } |
| 1542 } | 1562 } |
| 1543 | 1563 |
| 1544 TEST_F(DeprecatedAcceleratorTester, TestNewAccelerators) { | 1564 TEST_F(DeprecatedAcceleratorTester, TestNewAccelerators) { |
| 1545 // Add below the new accelerators that replaced the deprecated ones (if any). | 1565 // Add below the new accelerators that replaced the deprecated ones (if any). |
| 1546 const AcceleratorData kNewAccelerators[] = { | 1566 const AcceleratorData kNewAccelerators[] = { |
| 1547 {true, ui::VKEY_L, ui::EF_COMMAND_DOWN, LOCK_SCREEN}, | 1567 {true, ui::VKEY_L, ui::EF_COMMAND_DOWN, LOCK_SCREEN}, |
| 1568 {true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, NEXT_IME}, |
| 1548 {true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, SHOW_TASK_MANAGER}, | 1569 {true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, SHOW_TASK_MANAGER}, |
| 1549 }; | 1570 }; |
| 1550 | 1571 |
| 1551 EXPECT_TRUE(IsMessageCenterEmpty()); | 1572 EXPECT_TRUE(IsMessageCenterEmpty()); |
| 1552 | 1573 |
| 1553 for (auto data : kNewAccelerators) { | 1574 for (auto data : kNewAccelerators) { |
| 1554 EXPECT_TRUE(ProcessInController(CreateAccelerator(data))); | 1575 EXPECT_TRUE(ProcessInController(CreateAccelerator(data))); |
| 1555 | 1576 |
| 1556 // Expect no notifications from the new accelerators. | 1577 // Expect no notifications from the new accelerators. |
| 1557 EXPECT_TRUE(IsMessageCenterEmpty()); | 1578 EXPECT_TRUE(IsMessageCenterEmpty()); |
| 1558 | 1579 |
| 1559 // If the action is LOCK_SCREEN, we must reset the state by unlocking the | 1580 // If the action is LOCK_SCREEN, we must reset the state by unlocking the |
| 1560 // screen before we proceed testing the rest of accelerators. | 1581 // screen before we proceed testing the rest of accelerators. |
| 1561 ResetStateIfNeeded(); | 1582 ResetStateIfNeeded(); |
| 1562 } | 1583 } |
| 1563 } | 1584 } |
| 1564 #endif // defined(OS_CHROMEOS) | 1585 #endif // defined(OS_CHROMEOS) |
| 1565 | 1586 |
| 1566 } // namespace ash | 1587 } // namespace ash |
| OLD | NEW |