diff options
Diffstat (limited to 'chrome/browser/browser.cc')
-rw-r--r-- | chrome/browser/browser.cc | 66 |
1 files changed, 47 insertions, 19 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc index cf1af8c..a52e157 100644 --- a/chrome/browser/browser.cc +++ b/chrome/browser/browser.cc @@ -140,7 +140,10 @@ Browser::Browser(Type type, Profile* profile) is_attempting_to_close_browser_(false), cancel_download_confirmation_state_(NOT_PROMPTED), maximized_state_(MAXIMIZED_STATE_DEFAULT), - method_factory_(this) { + method_factory_(this), + block_command_execution_(false), + last_blocked_command_id_(-1), + last_blocked_command_disposition_(CURRENT_TAB) { tabstrip_model_.AddObserver(this); registrar_.Add(this, NotificationType::SSL_VISIBLE_STATE_CHANGED, @@ -1402,6 +1405,16 @@ void Browser::ExecuteCommandWithDisposition( DCHECK(command_updater_.IsCommandEnabled(id)) << "Invalid/disabled command"; + // If command execution is blocked then just record the command and return. + if (block_command_execution_) { + // We actually only allow no more than one blocked command, otherwise some + // commands maybe lost. + DCHECK(last_blocked_command_id_ == -1); + last_blocked_command_id_ = id; + last_blocked_command_disposition_ = disposition; + return; + } + // The order of commands in this switch statement must match the function // declaration order in browser.h! switch (id) { @@ -1563,6 +1576,33 @@ void Browser::ExecuteCommandWithDisposition( } } +bool Browser::IsReservedCommand(int command_id) { + return command_id == IDC_CLOSE_TAB || + command_id == IDC_CLOSE_POPUPS || + command_id == IDC_CLOSE_WINDOW || + command_id == IDC_NEW_INCOGNITO_WINDOW || + command_id == IDC_NEW_TAB || + command_id == IDC_NEW_WINDOW || + command_id == IDC_RESTORE_TAB || + command_id == IDC_SELECT_NEXT_TAB || + command_id == IDC_SELECT_PREVIOUS_TAB || + command_id == IDC_EXIT; +} + +void Browser::SetBlockCommandExecution(bool block) { + block_command_execution_ = block; + if (block) { + last_blocked_command_id_ = -1; + last_blocked_command_disposition_ = CURRENT_TAB; + } +} + +int Browser::GetLastBlockedCommand(WindowOpenDisposition* disposition) { + if (disposition) + *disposition = last_blocked_command_disposition_; + return last_blocked_command_id_; +} + /////////////////////////////////////////////////////////////////////////////// // Browser, CommandUpdater::CommandUpdaterDelegate implementation: @@ -2197,25 +2237,13 @@ void Browser::ShowPageInfo(Profile* profile, window()->ShowPageInfo(profile, url, ssl, show_history); } -bool Browser::IsReservedAccelerator(const NativeWebKeyboardEvent& event) { - // Other platforms don't send close-app keyboard shortcuts to apps first. -#if defined(OS_WIN) - if ((event.modifiers & NativeWebKeyboardEvent::AltKey) && - event.windowsKeyCode == VK_F4) { - return true; - } -#endif +bool Browser::PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event, + bool* is_keyboard_shortcut) { + return window()->PreHandleKeyboardEvent(event, is_keyboard_shortcut); +} - int command_id = window()->GetCommandId(event); - return command_id == IDC_CLOSE_TAB || - command_id == IDC_CLOSE_POPUPS || - command_id == IDC_CLOSE_WINDOW || - command_id == IDC_NEW_INCOGNITO_WINDOW || - command_id == IDC_NEW_TAB || - command_id == IDC_NEW_WINDOW || - command_id == IDC_RESTORE_TAB || - command_id == IDC_SELECT_NEXT_TAB || - command_id == IDC_SELECT_PREVIOUS_TAB; +void Browser::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) { + window()->HandleKeyboardEvent(event); } void Browser::ShowRepostFormWarningDialog(TabContents *tab_contents) { |