Index: ui/views/focus/focus_manager_unittest.cc |
diff --git a/ui/views/focus/focus_manager_unittest.cc b/ui/views/focus/focus_manager_unittest.cc |
index 32b8665925646f3f949002e19ba1fa159a7c6548..5ff900e106f3ccd307e6d397becb05377d8f1212 100644 |
--- a/ui/views/focus/focus_manager_unittest.cc |
+++ b/ui/views/focus/focus_manager_unittest.cc |
@@ -469,6 +469,38 @@ TEST_F(FocusManagerTest, CallsSelfDeletingAcceleratorTarget) { |
EXPECT_EQ(target.accelerator_count(), 1); |
} |
+static bool SuspendAcceleratorsCallback(bool input) { |
+ return input; |
+} |
+ |
+TEST_F(FocusManagerTest, SuspendAccelerators) { |
+ const ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, ui::EF_NONE); |
+ ui::Accelerator accelerator(event.key_code(), event.flags()); |
+ TestAcceleratorTarget target(true); |
+ FocusManager* focus_manager = GetFocusManager(); |
+ focus_manager->RegisterAccelerator(accelerator, |
+ ui::AcceleratorManager::kNormalPriority, |
+ &target); |
+ |
+ // Callback returns true, should not process accelerators. |
+ base::Callback<bool()> callback = |
+ base::Bind(&SuspendAcceleratorsCallback, true); |
+ focus_manager->set_shortcut_handling_suspended_callback(&callback); |
+ EXPECT_TRUE(focus_manager->OnKeyEvent(event)); |
+ EXPECT_EQ(0, target.accelerator_count()); |
+ |
+ // Callback returns false, should process accelerators. |
+ callback = base::Bind(&SuspendAcceleratorsCallback, false); |
+ focus_manager->set_shortcut_handling_suspended_callback(&callback); |
+ EXPECT_FALSE(focus_manager->OnKeyEvent(event)); |
+ EXPECT_EQ(1, target.accelerator_count()); |
+ |
+ // Uninstall callback, should process accelerators. |
+ focus_manager->set_shortcut_handling_suspended_callback(nullptr); |
+ EXPECT_FALSE(focus_manager->OnKeyEvent(event)); |
+ EXPECT_EQ(2, target.accelerator_count()); |
+} |
+ |
class FocusManagerDtorTest : public FocusManagerTest { |
protected: |
typedef std::vector<std::string> DtorTrackVector; |