When focus is on the renderer non-preferred/non-reserved accelerators don't work.
Classic ash handles accelerators in two distinct ways:
wm::AcceleratorFilter is an EventHandler and installed as a pre-target-handler of Shell. Being a pre-target-handler means AcceleratorFilter sees keyevents very early on. AcceleratorFilter ends up calling AcceleratorRouter::Process, which may handle the accelerator.
The second pass happens from Chrome. When focus is on a web page BrowserView::PreHandleKeyboardEvent is called. PreHandleKeyboardEvent indirectly calls through to ash by way of calling to the FocusManager, which ash hooks into by way of the FocusManagerDelegate.
It's the second pass that is not wired correctly in mash. In mash there is the notion of pre accelerators (which matches the first pass in classic ash) and post-accelerators (handled after the target is given the event and only if the target didn't consume the event). The post-accelerator phase was designed for the second pass in chrome. The problem is when focus is on a webpage chrome always consumes the event, so that the second phase never happens.
The second phase is what happens control-t and the lik.
Comment 1 by bugdroid1@chromium.org
, Mar 15 2017