Chromium Code Reviews| Index: ash/common/accelerators/accelerator_table_unittest.cc |
| diff --git a/ash/common/accelerators/accelerator_table_unittest.cc b/ash/common/accelerators/accelerator_table_unittest.cc |
| index e469625545a0282e11a622e8ac2eff0d9b5d65da..ddd00f4adf04f1e1fef2b1ec699b8db8d646ea27 100644 |
| --- a/ash/common/accelerators/accelerator_table_unittest.cc |
| +++ b/ash/common/accelerators/accelerator_table_unittest.cc |
| @@ -23,6 +23,168 @@ struct Cmp { |
| } |
| }; |
| +const int kDebugModifier = |
| + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN; |
| + |
| +const AcceleratorData kAcceleratorDataAchived20170405[] = { |
|
afakhry
2017/04/05 16:01:32
We can keep this snapshot of only the non-Search-b
afakhry
2017/04/05 16:01:32
Please add a comment explaining what this snapshot
wutao
2017/04/05 16:49:32
Done.
wutao
2017/04/05 16:49:32
Done.
|
| + {true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, PREVIOUS_IME}, |
| + {false, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN, PREVIOUS_IME}, |
| + // Shortcuts for Japanese IME. |
|
afakhry
2017/04/05 16:01:32
You don't need to include these comments here. Ple
wutao
2017/04/05 16:49:32
Done.
|
| + {true, ui::VKEY_CONVERT, ui::EF_NONE, SWITCH_IME}, |
| + {true, ui::VKEY_NONCONVERT, ui::EF_NONE, SWITCH_IME}, |
| + {true, ui::VKEY_DBE_SBCSCHAR, ui::EF_NONE, SWITCH_IME}, |
| + {true, ui::VKEY_DBE_DBCSCHAR, ui::EF_NONE, SWITCH_IME}, |
| + // Shortcut for Koren IME. |
| + {true, ui::VKEY_HANGUL, ui::EF_NONE, SWITCH_IME}, |
| + |
| + {true, ui::VKEY_TAB, ui::EF_ALT_DOWN, CYCLE_FORWARD_MRU}, |
| + {true, ui::VKEY_TAB, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| + CYCLE_BACKWARD_MRU}, |
| + {true, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE, TOGGLE_OVERVIEW}, |
| + {true, ui::VKEY_BROWSER_SEARCH, ui::EF_NONE, TOGGLE_APP_LIST}, |
| + {true, ui::VKEY_WLAN, ui::EF_NONE, TOGGLE_WIFI}, |
| + {true, ui::VKEY_KBD_BRIGHTNESS_DOWN, ui::EF_NONE, KEYBOARD_BRIGHTNESS_DOWN}, |
| + {true, ui::VKEY_KBD_BRIGHTNESS_UP, ui::EF_NONE, KEYBOARD_BRIGHTNESS_UP}, |
| + // Maximize button. |
| + {true, ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_CONTROL_DOWN, TOGGLE_MIRROR_MODE}, |
| + {true, ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_ALT_DOWN, SWAP_PRIMARY_DISPLAY}, |
| + // Cycle windows button. |
| + {true, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN, TAKE_SCREENSHOT}, |
| + {true, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| + TAKE_PARTIAL_SCREENSHOT}, |
| + {true, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
| + TAKE_WINDOW_SCREENSHOT}, |
| + {true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE, BRIGHTNESS_DOWN}, |
| + {true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_ALT_DOWN, KEYBOARD_BRIGHTNESS_DOWN}, |
| + {true, ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE, BRIGHTNESS_UP}, |
| + {true, ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN, KEYBOARD_BRIGHTNESS_UP}, |
| + {true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| + MAGNIFY_SCREEN_ZOOM_OUT}, |
| + {true, ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| + MAGNIFY_SCREEN_ZOOM_IN}, |
| + {true, ui::VKEY_L, ui::EF_COMMAND_DOWN, LOCK_SCREEN}, |
| + {true, ui::VKEY_L, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, SUSPEND}, |
| + // The lock key on Chrome OS keyboards produces F13 scancodes. |
| + {true, ui::VKEY_F13, ui::EF_NONE, LOCK_PRESSED}, |
| + {false, ui::VKEY_F13, ui::EF_NONE, LOCK_RELEASED}, |
| + // Generic keyboards can use VKEY_SLEEP to mimic ChromeOS keyboard's lock |
| + // key. |
| + {true, ui::VKEY_SLEEP, ui::EF_NONE, LOCK_PRESSED}, |
| + {false, ui::VKEY_SLEEP, ui::EF_NONE, LOCK_RELEASED}, |
| + {true, ui::VKEY_POWER, ui::EF_NONE, POWER_PRESSED}, |
| + {false, ui::VKEY_POWER, ui::EF_NONE, POWER_RELEASED}, |
| + {true, ui::VKEY_M, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, OPEN_FILE_MANAGER}, |
| + {true, ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN, OPEN_GET_HELP}, |
| + {true, ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| + OPEN_GET_HELP}, |
| + {true, ui::VKEY_T, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, OPEN_CROSH}, |
| + {true, ui::VKEY_I, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| + TOUCH_HUD_MODE_CHANGE}, |
| + {true, ui::VKEY_I, |
| + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN, |
| + TOUCH_HUD_CLEAR}, |
| + {true, ui::VKEY_P, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| + TOUCH_HUD_PROJECTION_TOGGLE}, |
| + {true, ui::VKEY_H, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN, |
| + TOGGLE_HIGH_CONTRAST}, |
| + {true, ui::VKEY_Z, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| + TOGGLE_SPOKEN_FEEDBACK}, |
| + {true, ui::VKEY_OEM_COMMA, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| + SWITCH_TO_PREVIOUS_USER}, |
| + {true, ui::VKEY_OEM_PERIOD, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| + SWITCH_TO_NEXT_USER}, |
| + // Single shift release turns off caps lock. |
| + {false, ui::VKEY_LSHIFT, ui::EF_NONE, DISABLE_CAPS_LOCK}, |
| + {false, ui::VKEY_SHIFT, ui::EF_NONE, DISABLE_CAPS_LOCK}, |
| + {false, ui::VKEY_RSHIFT, ui::EF_NONE, DISABLE_CAPS_LOCK}, |
| + // Accelerators to toggle Caps Lock. |
| + // The following is triggered when Search is released while Alt is still |
| + // down. The key_code here is LWIN (for search) and Alt is a modifier. |
| + {false, ui::VKEY_LWIN, ui::EF_ALT_DOWN, TOGGLE_CAPS_LOCK}, |
| + // The following is triggered when Alt is released while search is still |
| + // down. The key_code here is MENU (for Alt) and Search is a modifier |
| + // (EF_COMMAND_DOWN is used for Search as a modifier). |
| + {false, ui::VKEY_MENU, ui::EF_COMMAND_DOWN, TOGGLE_CAPS_LOCK}, |
| + {true, ui::VKEY_VOLUME_MUTE, ui::EF_NONE, VOLUME_MUTE}, |
| + {true, ui::VKEY_VOLUME_DOWN, ui::EF_NONE, VOLUME_DOWN}, |
| + {true, ui::VKEY_VOLUME_UP, ui::EF_NONE, VOLUME_UP}, |
| + {true, ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN, SHOW_TASK_MANAGER}, |
| + {true, ui::VKEY_SPACE, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, NEXT_IME}, |
| + {true, ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, OPEN_FEEDBACK_PAGE}, |
| + {true, ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, EXIT}, |
| + {true, ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| + NEW_INCOGNITO_WINDOW}, |
| + {true, ui::VKEY_N, ui::EF_CONTROL_DOWN, NEW_WINDOW}, |
| + {true, ui::VKEY_T, ui::EF_CONTROL_DOWN, NEW_TAB}, |
| + {true, ui::VKEY_OEM_MINUS, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, |
| + SCALE_UI_UP}, |
| + {true, ui::VKEY_OEM_PLUS, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, |
| + SCALE_UI_DOWN}, |
| + {true, ui::VKEY_0, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, SCALE_UI_RESET}, |
| + {true, ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, |
| + ROTATE_SCREEN}, |
| + {true, ui::VKEY_BROWSER_REFRESH, |
| + ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ROTATE_WINDOW}, |
| + {true, ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, RESTORE_TAB}, |
| + {true, ui::VKEY_PRINT, ui::EF_NONE, TAKE_SCREENSHOT}, |
| + // On Chrome OS, Search key is mapped to LWIN. The Search key binding should |
| + // act on release instead of press when using Search as a modifier key for |
| + // extended keyboard shortcuts. |
| + {false, ui::VKEY_LWIN, ui::EF_NONE, TOGGLE_APP_LIST}, |
| + {true, ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_NONE, TOGGLE_FULLSCREEN}, |
| + {true, ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_SHIFT_DOWN, TOGGLE_FULLSCREEN}, |
| + {true, ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, UNPIN}, |
| + {true, ui::VKEY_L, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, FOCUS_SHELF}, |
| + {true, ui::VKEY_HELP, ui::EF_NONE, SHOW_KEYBOARD_OVERLAY}, |
| + {true, ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| + SHOW_KEYBOARD_OVERLAY}, |
| + {true, ui::VKEY_OEM_2, |
| + ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
| + SHOW_KEYBOARD_OVERLAY}, |
| + {true, ui::VKEY_F14, ui::EF_NONE, SHOW_KEYBOARD_OVERLAY}, |
| + {true, ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| + SHOW_MESSAGE_CENTER_BUBBLE}, |
| + {true, ui::VKEY_P, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, SHOW_STYLUS_TOOLS}, |
| + {true, ui::VKEY_S, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| + SHOW_SYSTEM_TRAY_BUBBLE}, |
| + {true, ui::VKEY_K, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN, |
| + SHOW_IME_MENU_BUBBLE}, |
| + {true, ui::VKEY_1, ui::EF_ALT_DOWN, LAUNCH_APP_0}, |
| + {true, ui::VKEY_2, ui::EF_ALT_DOWN, LAUNCH_APP_1}, |
| + {true, ui::VKEY_3, ui::EF_ALT_DOWN, LAUNCH_APP_2}, |
| + {true, ui::VKEY_4, ui::EF_ALT_DOWN, LAUNCH_APP_3}, |
| + {true, ui::VKEY_5, ui::EF_ALT_DOWN, LAUNCH_APP_4}, |
| + {true, ui::VKEY_6, ui::EF_ALT_DOWN, LAUNCH_APP_5}, |
| + {true, ui::VKEY_7, ui::EF_ALT_DOWN, LAUNCH_APP_6}, |
| + {true, ui::VKEY_8, ui::EF_ALT_DOWN, LAUNCH_APP_7}, |
| + {true, ui::VKEY_9, ui::EF_ALT_DOWN, LAUNCH_LAST_APP}, |
| + |
| + // Window management shortcuts. |
| + {true, ui::VKEY_OEM_4, ui::EF_ALT_DOWN, WINDOW_CYCLE_SNAP_LEFT}, |
| + {true, ui::VKEY_OEM_6, ui::EF_ALT_DOWN, WINDOW_CYCLE_SNAP_RIGHT}, |
| + {true, ui::VKEY_OEM_MINUS, ui::EF_ALT_DOWN, WINDOW_MINIMIZE}, |
| + {true, ui::VKEY_OEM_PLUS, ui::EF_ALT_DOWN, TOGGLE_MAXIMIZED}, |
| + {true, ui::VKEY_OEM_PLUS, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| + WINDOW_POSITION_CENTER}, |
| + {true, ui::VKEY_BROWSER_FORWARD, ui::EF_CONTROL_DOWN, FOCUS_NEXT_PANE}, |
| + {true, ui::VKEY_BROWSER_BACK, ui::EF_CONTROL_DOWN, FOCUS_PREVIOUS_PANE}, |
| + |
| + // Media Player shortcuts. |
| + {true, ui::VKEY_MEDIA_NEXT_TRACK, ui::EF_NONE, MEDIA_NEXT_TRACK}, |
| + {true, ui::VKEY_MEDIA_PLAY_PAUSE, ui::EF_NONE, MEDIA_PLAY_PAUSE}, |
| + {true, ui::VKEY_MEDIA_PREV_TRACK, ui::EF_NONE, MEDIA_PREV_TRACK}, |
| + |
| + // Debugging shortcuts that need to be available to end-users in |
| + // release builds. |
| + {true, ui::VKEY_U, kDebugModifier, PRINT_UI_HIERARCHIES}, |
| + |
| + // TODO(yusukes): Handle VKEY_MEDIA_STOP, and |
| + // VKEY_MEDIA_LAUNCH_MAIL. |
| +}; |
| + |
| +const size_t kAchivedAcceleratorDataLength = |
| + arraysize(kAcceleratorDataAchived20170405); |
| + |
| } // namespace |
| TEST(AcceleratorTableTest, CheckDuplicatedAccelerators) { |
| @@ -101,4 +263,22 @@ TEST(AcceleratorTableTest, CheckDeprecatedAccelerators) { |
| } |
| } |
| +TEST(AcceleratorTableTest, CheckSearchKeyBasedAccelerators) { |
| + std::set<AcceleratorData, Cmp> achived_accelerators; |
| + for (size_t i = 0; i < kAchivedAcceleratorDataLength; ++i) |
| + achived_accelerators.insert(kAcceleratorDataAchived20170405[i]); |
| + |
| + for (size_t i = 0; i < kAcceleratorDataLength; ++i) { |
| + const AcceleratorData& entry = kAcceleratorData[i]; |
| + if (achived_accelerators.find(entry) != achived_accelerators.end()) |
| + continue; |
| + EXPECT_TRUE(entry.modifiers & ui::EF_COMMAND_DOWN) |
| + << "Non-command key based accelerator: " << entry.trigger_on_press |
|
afakhry
2017/04/05 16:01:32
Use Search instead of command.
Search-based accele
wutao
2017/04/05 16:49:32
Done.
|
| + << ", " << entry.keycode << ", " |
| + << (entry.modifiers & ui::EF_SHIFT_DOWN) << ", " |
| + << (entry.modifiers & ui::EF_CONTROL_DOWN) << ", " |
| + << (entry.modifiers & ui::EF_ALT_DOWN); |
| + } |
| +} |
| + |
| } // namespace ash |