Only dispatch cut/copy/paste accelerators to views which register for them.
commit25614a51c26a6e5da0956c86772f4302f298b793
authorpkasting <pkasting@chromium.org>
Tue, 30 Jun 2015 23:57:24 +0000 (30 16:57 -0700)
committerCommit bot <commit-bot@chromium.org>
Tue, 30 Jun 2015 23:58:08 +0000 (30 23:58 +0000)
tree18128472363e5a4e9692455351c1cba21f14772f
parent10eda64c1a5c673dcdca74fbb774f522dc253ad7
Only dispatch cut/copy/paste accelerators to views which register for them.

This restores some of https://codereview.chromium.org/1091703002/#ps40001 ; we
once again use the standard accelerator processing code to dispatch accelerators
instead of calling AcceleratorPressed() directly.  To avoid the concerns I had
which led me to discard that patch originally, WebContents does not make use of
this route; the manual dispatch for its sake is still in place.

This prevents AccleratorPressed() from being called on focused views which
didn't register for the cut/copy/paste accelerators.  Views differ about whether
to handle a call in such a case by simply returning false, or by DCHECK failing
(or similar).  For those that do the latter, the old code would lead to a DCHECK
failure followed by unconditionally executing some other accelerator's handling
code, e.g. "escape was pressed, close the window".

This means that another potential fix here would be to change all instances of
AcceleratorPressed() to return false if the provided accelerator wasn't one they
were interested in.  Not only is this a much larger change, it seems arguably
incorrect -- classes ought not to need to be defensive here.

BUG=495472
TEST=Open print preview, select cut from wrench menu, print preview should not close.

Review URL: https://codereview.chromium.org/1214343006

Cr-Commit-Position: refs/heads/master@{#336925}
chrome/browser/ui/views/frame/browser_view.cc
ui/views/controls/textfield/textfield.cc
ui/views/controls/textfield/textfield.h