Index: chrome/browser/ui/cocoa/profiles/user_manager_mac.mm |
diff --git a/chrome/browser/ui/cocoa/profiles/user_manager_mac.mm b/chrome/browser/ui/cocoa/profiles/user_manager_mac.mm |
index 957d95ba57bb6b8b04cab3e077f8fa47836a668c..6762cd426429056d340b2f647796c567a01a422e 100644 |
--- a/chrome/browser/ui/cocoa/profiles/user_manager_mac.mm |
+++ b/chrome/browser/ui/cocoa/profiles/user_manager_mac.mm |
@@ -15,6 +15,7 @@ |
#include "content/public/browser/web_contents.h" |
#include "content/public/browser/web_contents_delegate.h" |
#include "ui/base/l10n/l10n_util_mac.h" |
+#include "ui/events/keycodes/keyboard_codes.h" |
// Default window size. Taken from the views implementation in |
// chrome/browser/ui/views/user_manager_view.cc. |
@@ -44,8 +45,7 @@ void HideUserManager() { |
// Custom WebContentsDelegate that allows handling of hotkeys. |
class UserManagerWebContentsDelegate : public content::WebContentsDelegate { |
public: |
- UserManagerWebContentsDelegate(ChromeEventProcessingWindow* window) |
- : window_(window) {} |
+ UserManagerWebContentsDelegate() {} |
// WebContentsDelegate implementation. Forwards all unhandled keyboard events |
// to the current window. |
@@ -55,19 +55,21 @@ class UserManagerWebContentsDelegate : public content::WebContentsDelegate { |
if (![BrowserWindowUtils shouldHandleKeyboardEvent:event]) |
return; |
- int commandId = [BrowserWindowUtils getCommandId:event]; |
+ // -getCommandId returns -1 if the event isn't a chrome accelerator. |
+ int chromeCommandId = [BrowserWindowUtils getCommandId:event]; |
- // Since the User Manager is a "top level" window, only handle close events. |
- if (commandId == IDC_CLOSE_WINDOW || commandId == IDC_EXIT) { |
- // Not invoking +[BrowserWindowUtils handleKeyboardEvent here], since the |
- // window in question is a ConstrainedWindowCustomWindow, not a |
- // BrowserWindow. |
- [window_ redispatchKeyEvent:event.os_event]; |
+ // Check for Cmd+A and Cmd+V events that could come from a password field. |
+ bool isTextEditingCommand = |
+ (event.modifiers & blink::WebInputEvent::MetaKey) && |
+ (event.windowsKeyCode == ui::VKEY_A || |
+ event.windowsKeyCode == ui::VKEY_V); |
+ |
+ // Only handle close window Chrome accelerators and text editing ones. |
+ if (chromeCommandId == IDC_CLOSE_WINDOW || chromeCommandId == IDC_EXIT || |
+ isTextEditingCommand) { |
+ [[NSApp mainMenu] performKeyEquivalent:event.os_event]; |
} |
} |
- |
- private: |
- ChromeEventProcessingWindow* window_; // Used to redispatch key events. |
}; |
// Window controller for the User Manager view. |
@@ -118,7 +120,7 @@ class UserManagerWebContentsDelegate : public content::WebContentsDelegate { |
webContents_.reset(content::WebContents::Create( |
content::WebContents::CreateParams(profile))); |
window.contentView = webContents_->GetNativeView(); |
- webContentsDelegate_.reset(new UserManagerWebContentsDelegate(window)); |
+ webContentsDelegate_.reset(new UserManagerWebContentsDelegate()); |
webContents_->SetDelegate(webContentsDelegate_.get()); |
DCHECK(window.contentView); |