diff options
author | mohsen <mohsen@chromium.org> | 2016-01-30 19:06:44 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-31 03:07:52 +0000 |
commit | bce18c0fd5f5c711dce529f33cf4f98c54c710a6 (patch) | |
tree | 995dbfef426aa159d96c69d444b0203146698066 /ui/views | |
parent | 750447f99270e26f58c44a600d8c75e1c404ec7c (diff) | |
download | chromium_src-bce18c0fd5f5c711dce529f33cf4f98c54c710a6.zip chromium_src-bce18c0fd5f5c711dce529f33cf4f98c54c710a6.tar.gz chromium_src-bce18c0fd5f5c711dce529f33cf4f98c54c710a6.tar.bz2 |
Fix MenuKeyEventHandler crash
In MenuKeyEventHandler, calling OnKeyDown() or SelectByChar() on the
MenuController might close the menu and remove the MenuController. We
should check for this case and stop processing the event further.
BUG=564255
Review URL: https://codereview.chromium.org/1652443002
Cr-Commit-Position: refs/heads/master@{#372567}
Diffstat (limited to 'ui/views')
-rw-r--r-- | ui/views/controls/menu/menu_key_event_handler.cc | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/ui/views/controls/menu/menu_key_event_handler.cc b/ui/views/controls/menu/menu_key_event_handler.cc index b4b3279..c751c4c 100644 --- a/ui/views/controls/menu/menu_key_event_handler.cc +++ b/ui/views/controls/menu/menu_key_event_handler.cc @@ -44,8 +44,13 @@ void MenuKeyEventHandler::OnKeyEvent(ui::KeyEvent* event) { return; } + event->StopPropagation(); + if (event->type() == ui::ET_KEY_PRESSED) { menu_controller->OnKeyDown(event->key_code()); + // Menu controller might have been deleted. + if (!MenuController::GetActiveInstance()) + return; // Do not check mnemonics if the Alt or Ctrl modifiers are pressed. For // example Ctrl+<T> is an accelerator, but <T> only is a mnemonic. @@ -54,6 +59,9 @@ void MenuKeyEventHandler::OnKeyEvent(ui::KeyEvent* event) { (flags & kKeyFlagsMask) == 0) { char c = event->GetCharacter(); menu_controller->SelectByChar(c); + // Menu controller might have been deleted. + if (!MenuController::GetActiveInstance()) + return; } } @@ -65,8 +73,6 @@ void MenuKeyEventHandler::OnKeyEvent(ui::KeyEvent* event) { if (result == ViewsDelegate::ProcessMenuAcceleratorResult::CLOSE_MENU) menu_controller->CancelAll(); } - - event->StopPropagation(); } } // namespace views |