15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/accelerators/accelerator_controller.h" 6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/accelerators/accelerator_table.h" 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/accessibility_delegate.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ash/ash_switches.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/display/display_manager.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/ime_control_delegate.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/screen_util.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell_window_ids.h" 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/system/brightness_control_delegate.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/keyboard_brightness/keyboard_brightness_control_delegate.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/system_tray_delegate.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/test/ash_test_base.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/test/display_manager_test_api.h" 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/test/test_screenshot_delegate.h" 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ash/test/test_session_state_animator.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/test/test_shell_delegate.h" 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ash/test/test_volume_control_delegate.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/volume_control_delegate.h" 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ash/wm/lock_state_controller.h" 2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ash/wm/window_state.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/wm/window_util.h" 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ash/wm/wm_event.h" 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/command_line.h" 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/aura/client/aura_constants.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/test/test_window_delegate.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/test/test_windows.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/window.h" 34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event.h" 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/events/event_processor.h" 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/events/test/event_generator.h" 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/screen.h" 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/views/widget/widget.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_X11) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <X11/Xlib.h> 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/events/test/events_test_utils_x11.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestTarget : public ui::AcceleratorTarget { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) TestTarget() : accelerator_pressed_count_(0), accelerator_repeat_count_(0) {} 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~TestTarget() {} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int accelerator_pressed_count() const { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return accelerator_pressed_count_; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int accelerator_repeat_count() const { return accelerator_repeat_count_; } 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void reset() { 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) accelerator_pressed_count_ = 0; 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) accelerator_repeat_count_ = 0; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from ui::AcceleratorTarget: 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CanHandleAccelerators() const OVERRIDE; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int accelerator_pressed_count_; 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int accelerator_repeat_count_; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestTarget); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ReleaseAccelerator : public ui::Accelerator { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReleaseAccelerator(ui::KeyboardCode keycode, int modifiers) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ui::Accelerator(keycode, modifiers) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_type(ui::ET_KEY_RELEASED); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DummyBrightnessControlDelegate : public BrightnessControlDelegate { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit DummyBrightnessControlDelegate(bool consume) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : consume_(consume), 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_brightness_down_count_(0), 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_brightness_up_count_(0) { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DummyBrightnessControlDelegate() {} 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleBrightnessDown( 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& accelerator) OVERRIDE { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_brightness_down_count_; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_accelerator_ = accelerator; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleBrightnessUp(const ui::Accelerator& accelerator) OVERRIDE { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_brightness_up_count_; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_accelerator_ = accelerator; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBrightnessPercent(double percent, bool gradual) OVERRIDE {} 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetBrightnessPercent( 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(double)>& callback) OVERRIDE { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(100.0); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_brightness_down_count() const { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_brightness_down_count_; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_brightness_up_count() const { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_brightness_up_count_; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& last_accelerator() const { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return last_accelerator_; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool consume_; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_brightness_down_count_; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_brightness_up_count_; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator last_accelerator_; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DummyBrightnessControlDelegate); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DummyImeControlDelegate : public ImeControlDelegate { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit DummyImeControlDelegate(bool consume) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : consume_(consume), 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_next_ime_count_(0), 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_previous_ime_count_(0), 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_switch_ime_count_(0) { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DummyImeControlDelegate() {} 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void HandleNextIme() OVERRIDE { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_next_ime_count_; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 142a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch virtual bool HandlePreviousIme(const ui::Accelerator& accelerator) OVERRIDE { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_previous_ime_count_; 144a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch last_accelerator_ = accelerator; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleSwitchIme(const ui::Accelerator& accelerator) OVERRIDE { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_switch_ime_count_; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_accelerator_ = accelerator; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_next_ime_count() const { 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_next_ime_count_; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_previous_ime_count() const { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_previous_ime_count_; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_switch_ime_count() const { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_switch_ime_count_; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& last_accelerator() const { 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return last_accelerator_; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ui::Accelerator RemapAccelerator( 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator& accelerator) OVERRIDE { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ui::Accelerator(accelerator); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool consume_; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_next_ime_count_; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_previous_ime_count_; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_switch_ime_count_; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator last_accelerator_; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DummyImeControlDelegate); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DummyKeyboardBrightnessControlDelegate 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public KeyboardBrightnessControlDelegate { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit DummyKeyboardBrightnessControlDelegate(bool consume) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : consume_(consume), 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_keyboard_brightness_down_count_(0), 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_keyboard_brightness_up_count_(0) { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DummyKeyboardBrightnessControlDelegate() {} 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleKeyboardBrightnessDown( 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& accelerator) OVERRIDE { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_keyboard_brightness_down_count_; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_accelerator_ = accelerator; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleKeyboardBrightnessUp( 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& accelerator) OVERRIDE { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_keyboard_brightness_up_count_; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_accelerator_ = accelerator; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_keyboard_brightness_down_count() const { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_keyboard_brightness_down_count_; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_keyboard_brightness_up_count() const { 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_keyboard_brightness_up_count_; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& last_accelerator() const { 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return last_accelerator_; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool consume_; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_keyboard_brightness_down_count_; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_keyboard_brightness_up_count_; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator last_accelerator_; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DummyKeyboardBrightnessControlDelegate); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestTarget::AcceleratorPressed(const ui::Accelerator& accelerator) { 22646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (accelerator.IsRepeat()) 22746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ++accelerator_repeat_count_; 22846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) else 22946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ++accelerator_pressed_count_; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestTarget::CanHandleAccelerators() const { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AcceleratorControllerTest : public test::AshTestBase { 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) AcceleratorControllerTest() {} 2423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~AcceleratorControllerTest() {} 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EnableInternalDisplay() { 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test::DisplayManagerTestApi(Shell::GetInstance()->display_manager()). 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetFirstDisplayAsInternalDisplay(); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static AcceleratorController* GetController(); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Several functions to access ExitWarningHandler (as friend). 25390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static void StubForTest(ExitWarningHandler* ewh) { 25490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ewh->stub_timer_for_test_ = true; 25590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 25690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static void Reset(ExitWarningHandler* ewh) { 25790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ewh->state_ = ExitWarningHandler::IDLE; 25890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 25990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static void SimulateTimerExpired(ExitWarningHandler* ewh) { 26090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ewh->TimerAction(); 26190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 26290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static bool is_ui_shown(ExitWarningHandler* ewh) { 26390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return !!ewh->widget_; 26490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 26590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static bool is_idle(ExitWarningHandler* ewh) { 26690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return ewh->state_ == ExitWarningHandler::IDLE; 26790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 26890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static bool is_exiting(ExitWarningHandler* ewh) { 26990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return ewh->state_ == ExitWarningHandler::EXITING; 27090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 27190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AcceleratorControllerTest); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AcceleratorController* AcceleratorControllerTest::GetController() { 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Shell::GetInstance()->accelerator_controller(); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if !defined(OS_WIN) 28190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Double press of exit shortcut => exiting 28290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(AcceleratorControllerTest, ExitWarningHandlerTestDoublePress) { 28390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui::Accelerator press(ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN); 28490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui::Accelerator release(press); 28590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) release.set_type(ui::ET_KEY_RELEASED); 28690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); 28790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(!!ewh); 28890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) StubForTest(ewh); 28990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_idle(ewh)); 29090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_ui_shown(ewh)); 29146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(press)); 29246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(release)); 29390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_idle(ewh)); 29490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_ui_shown(ewh)); 29546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(press)); // second press before timer. 29646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(release)); 29790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SimulateTimerExpired(ewh); 29890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_exiting(ewh)); 29990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_ui_shown(ewh)); 30090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Reset(ewh); 30190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 30290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 30390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Single press of exit shortcut before timer => idle 30490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(AcceleratorControllerTest, ExitWarningHandlerTestSinglePress) { 30590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui::Accelerator press(ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN); 30690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui::Accelerator release(press); 30790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) release.set_type(ui::ET_KEY_RELEASED); 30890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); 30990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(!!ewh); 31090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) StubForTest(ewh); 31190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_idle(ewh)); 31290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_ui_shown(ewh)); 31346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(press)); 31446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(release)); 31590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_idle(ewh)); 31690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_ui_shown(ewh)); 31790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SimulateTimerExpired(ewh); 31890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_idle(ewh)); 31990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_ui_shown(ewh)); 32090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Reset(ewh); 32190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 3223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Shutdown ash with exit warning bubble open should not crash. 3243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(AcceleratorControllerTest, LingeringExitWarningBubble) { 3253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); 3263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(!!ewh); 3273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) StubForTest(ewh); 3283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Trigger once to show the bubble. 3303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ewh->HandleAccelerator(); 3313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_FALSE(is_idle(ewh)); 3323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(is_ui_shown(ewh)); 3333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Exit ash and there should be no crash 3353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 33690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // !defined(OS_WIN) 33790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, Register) { 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The registered accelerator is processed. 34446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(accelerator_a)); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, target.accelerator_pressed_count()); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, RegisterMultipleTarget) { 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target1; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target1); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target2; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target2); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If multiple targets are registered with the same accelerator, the target 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // registered later processes the accelerator. 35746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(accelerator_a)); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, target1.accelerator_pressed_count()); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, target2.accelerator_pressed_count()); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, Unregister) { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_b(ui::VKEY_B, ui::EF_NONE); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_b, &target); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Unregistering a different accelerator does not affect the other 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // accelerator. 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Unregister(accelerator_b, &target); 37246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(accelerator_a)); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, target.accelerator_pressed_count()); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The unregistered accelerator is no longer processed. 37646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) target.reset(); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Unregister(accelerator_a, &target); 37846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(accelerator_a)); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, target.accelerator_pressed_count()); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, UnregisterAll) { 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target1; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target1); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_b(ui::VKEY_B, ui::EF_NONE); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_b, &target1); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_c(ui::VKEY_C, ui::EF_NONE); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target2; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_c, &target2); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->UnregisterAll(&target1); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All the accelerators registered for |target1| are no longer processed. 39446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(accelerator_a)); 39546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(accelerator_b)); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, target1.accelerator_pressed_count()); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UnregisterAll with a different target does not affect the other target. 39946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(accelerator_c)); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, target2.accelerator_pressed_count()); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, Process) { 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target1; 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target1); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The registered accelerator is processed. 40946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(accelerator_a)); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, target1.accelerator_pressed_count()); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The non-registered accelerator is not processed. 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_b(ui::VKEY_B, ui::EF_NONE); 41446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(accelerator_b)); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, IsRegistered) { 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_shift_a(ui::VKEY_A, ui::EF_SHIFT_DOWN); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target; 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetController()->IsRegistered(accelerator_a)); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetController()->IsRegistered(accelerator_shift_a)); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->UnregisterAll(&target); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetController()->IsRegistered(accelerator_a)); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, WindowSnap) { 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> window( 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateTestWindowInShellWithBounds(gfx::Rect(5, 5, 20, 20))); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator dummy; 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 43368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) wm::WindowState* window_state = wm::GetWindowState(window.get()); 43468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 43568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->Activate(); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(WINDOW_SNAP_LEFT, dummy); 439a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect expected_bounds = wm::GetDefaultLeftSnappedWindowBoundsInParent( 440a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) window.get()); 441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(expected_bounds.ToString(), window->bounds().ToString()); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(WINDOW_SNAP_RIGHT, dummy); 445a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect expected_bounds = wm::GetDefaultRightSnappedWindowBoundsInParent( 446a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) window.get()); 447a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(expected_bounds.ToString(), window->bounds().ToString()); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 450a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gfx::Rect normal_bounds = window_state->GetRestoreBoundsInParent(); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy); 45368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(window_state->IsMaximized()); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(normal_bounds.ToString(), window->bounds().ToString()); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy); 45768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_FALSE(window_state->IsMaximized()); 458a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Window gets restored to its restore bounds since side-maximized state 459a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // is treated as a "maximized" state. 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(normal_bounds.ToString(), window->bounds().ToString()); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(WINDOW_SNAP_LEFT, dummy); 46468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_FALSE(window_state->IsMaximized()); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(WINDOW_SNAP_RIGHT, dummy); 46868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_FALSE(window_state->IsMaximized()); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy); 47168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(window_state->IsMaximized()); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(WINDOW_MINIMIZE, dummy); 47368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_FALSE(window_state->IsMaximized()); 47468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(window_state->IsMinimized()); 47568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->Restore(); 47668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->Activate(); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(WINDOW_MINIMIZE, dummy); 48068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(window_state->IsMinimized()); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 484f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(AcceleratorControllerTest, CenterWindowAccelerator) { 485f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<aura::Window> window( 486f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTestWindowInShellWithBounds(gfx::Rect(5, 5, 20, 20))); 487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ui::Accelerator dummy; 488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) wm::WindowState* window_state = wm::GetWindowState(window.get()); 489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) window_state->Activate(); 490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 491f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Center the window using accelerator. 492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()->PerformAction(WINDOW_POSITION_CENTER, dummy); 493f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect work_area = 494f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Shell::GetScreen()->GetDisplayNearestWindow(window.get()).work_area(); 495f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect bounds = window->GetBoundsInScreen(); 496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_NEAR(bounds.x() - work_area.x(), 497f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) work_area.right() - bounds.right(), 498f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1); 499f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_NEAR(bounds.y() - work_area.y(), 500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) work_area.bottom() - bounds.bottom(), 501f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1); 502f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 503f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Add the window to docked container and try to center it. 504f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) window->SetBounds(gfx::Rect(0, 0, 20, 20)); 505f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) aura::Window* docked_container = Shell::GetContainer( 506c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch window->GetRootWindow(), kShellWindowId_DockedContainer); 507f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) docked_container->AddChild(window.get()); 508f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect docked_bounds = window->GetBoundsInScreen(); 509f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()->PerformAction(WINDOW_POSITION_CENTER, dummy); 510f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // It should not get centered and should remain docked. 511c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); 512f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(docked_bounds.ToString(), window->GetBoundsInScreen().ToString()); 513f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 5148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 51546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(AcceleratorControllerTest, AutoRepeat) { 51646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_CONTROL_DOWN); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) accelerator_a.set_type(ui::ET_KEY_PRESSED); 51846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) TestTarget target_a; 51946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Register(accelerator_a, &target_a); 52046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ui::Accelerator accelerator_b(ui::VKEY_B, ui::EF_CONTROL_DOWN); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) accelerator_b.set_type(ui::ET_KEY_PRESSED); 52246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) TestTarget target_b; 52346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Register(accelerator_b, &target_b); 52446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator& generator = GetEventGenerator(); 52646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.PressKey(ui::VKEY_A, ui::EF_CONTROL_DOWN); 52746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.ReleaseKey(ui::VKEY_A, ui::EF_CONTROL_DOWN); 52846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 52946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(1, target_a.accelerator_pressed_count()); 53046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(0, target_a.accelerator_repeat_count()); 53146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 53246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Long press should generate one 53346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.PressKey(ui::VKEY_A, ui::EF_CONTROL_DOWN); 53446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.PressKey(ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_IS_REPEAT); 53546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2, target_a.accelerator_pressed_count()); 53646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(1, target_a.accelerator_repeat_count()); 53746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.PressKey(ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_IS_REPEAT); 53846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2, target_a.accelerator_pressed_count()); 53946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2, target_a.accelerator_repeat_count()); 54046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.ReleaseKey(ui::VKEY_A, ui::EF_CONTROL_DOWN); 54146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2, target_a.accelerator_pressed_count()); 54246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(2, target_a.accelerator_repeat_count()); 54346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 54446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Long press was intercepted by another key press. 54546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.PressKey(ui::VKEY_A, ui::EF_CONTROL_DOWN); 54646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.PressKey(ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_IS_REPEAT); 54746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.PressKey(ui::VKEY_B, ui::EF_CONTROL_DOWN); 54846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.ReleaseKey(ui::VKEY_B, ui::EF_CONTROL_DOWN); 54946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.PressKey(ui::VKEY_A, ui::EF_CONTROL_DOWN); 55046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.PressKey(ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_IS_REPEAT); 55146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.ReleaseKey(ui::VKEY_A, ui::EF_CONTROL_DOWN); 55246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 55346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(1, target_b.accelerator_pressed_count()); 55446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(0, target_b.accelerator_repeat_count()); 55546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(4, target_a.accelerator_pressed_count()); 55646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(4, target_a.accelerator_repeat_count()); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(AcceleratorControllerTest, Previous) { 5605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator& generator = GetEventGenerator(); 56146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.PressKey(ui::VKEY_VOLUME_MUTE, ui::EF_NONE); 56246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.ReleaseKey(ui::VKEY_VOLUME_MUTE, ui::EF_NONE); 5630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 56446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(ui::VKEY_VOLUME_MUTE, 56546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->previous_accelerator_for_test().key_code()); 56646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(ui::EF_NONE, 56746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->previous_accelerator_for_test().modifiers()); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 56946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.PressKey(ui::VKEY_TAB, ui::EF_CONTROL_DOWN); 57046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.ReleaseKey(ui::VKEY_TAB, ui::EF_CONTROL_DOWN); 57146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 57246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(ui::VKEY_TAB, 57346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->previous_accelerator_for_test().key_code()); 57446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(ui::EF_CONTROL_DOWN, 57546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->previous_accelerator_for_test().modifiers()); 57646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 57746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 57846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(AcceleratorControllerTest, DontRepeatToggleFullscreen) { 57946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const AcceleratorData accelerators[] = { 58046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) {true, ui::VKEY_J, ui::EF_ALT_DOWN, TOGGLE_FULLSCREEN}, 58146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) {true, ui::VKEY_K, ui::EF_ALT_DOWN, TOGGLE_FULLSCREEN}, 58246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) }; 58346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->RegisterAccelerators(accelerators, arraysize(accelerators)); 58446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 58546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); 58646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) params.context = CurrentContext(); 58746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) params.bounds = gfx::Rect(5, 5, 20, 20); 58846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) views::Widget* widget = new views::Widget; 58946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) widget->Init(params); 59046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) widget->Show(); 59146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) widget->Activate(); 59246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) widget->GetNativeView()->SetProperty(aura::client::kCanMaximizeKey, true); 59346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator& generator = GetEventGenerator(); 59546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) wm::WindowState* window_state = wm::GetWindowState(widget->GetNativeView()); 59668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Toggling not suppressed. 59846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.PressKey(ui::VKEY_J, ui::EF_ALT_DOWN); 59946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(window_state->IsFullscreen()); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The same accelerator - toggling suppressed. 60246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.PressKey(ui::VKEY_J, ui::EF_ALT_DOWN | ui::EF_IS_REPEAT); 60346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(window_state->IsFullscreen()); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 60546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Different accelerator. 60646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) generator.PressKey(ui::VKEY_K, ui::EF_ALT_DOWN); 60746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(window_state->IsFullscreen()); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 61046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// TODO(oshima): Fix this test to use EventGenerator. 61146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(OS_WIN) 612f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// crbug.com/317592 613f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_ProcessOnce DISABLED_ProcessOnce 614f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else 615f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_ProcessOnce ProcessOnce 616f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 617f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) || defined(USE_X11) 619f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(AcceleratorControllerTest, MAYBE_ProcessOnce) { 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target; 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The accelerator is processed only once. 625a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ui::EventProcessor* dispatcher = 626a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Shell::GetPrimaryRootWindow()->GetHost()->event_processor(); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MSG msg1 = { NULL, WM_KEYDOWN, ui::VKEY_A, 0 }; 6295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::KeyEvent key_event1(msg1); 630cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_event1.SetTranslated(true); 6315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::EventDispatchDetails details = dispatcher->OnEventFromSource(&key_event1); 6325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(key_event1.handled() || details.dispatcher_destroyed); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MSG msg2 = { NULL, WM_CHAR, L'A', 0 }; 6355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::KeyEvent key_event2(msg2); 636cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_event2.SetTranslated(true); 6375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) details = dispatcher->OnEventFromSource(&key_event2); 6385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(key_event2.handled() || details.dispatcher_destroyed); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MSG msg3 = { NULL, WM_KEYUP, ui::VKEY_A, 0 }; 6415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::KeyEvent key_event3(msg3); 642cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_event3.SetTranslated(true); 6435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) details = dispatcher->OnEventFromSource(&key_event3); 6445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(key_event3.handled() || details.dispatcher_destroyed); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_X11) 646f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::ScopedXI2Event key_event; 647f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) key_event.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_A, 0); 6485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::KeyEvent key_event1(key_event); 649cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_event1.SetTranslated(true); 6505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::EventDispatchDetails details = dispatcher->OnEventFromSource(&key_event1); 6515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(key_event1.handled() || details.dispatcher_destroyed); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::KeyEvent key_event2('A', ui::VKEY_A, ui::EF_NONE); 654cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_event2.SetTranslated(true); 6555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) details = dispatcher->OnEventFromSource(&key_event2); 6565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(key_event2.handled() || details.dispatcher_destroyed); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 658f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) key_event.InitKeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_A, 0); 6595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::KeyEvent key_event3(key_event); 660cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key_event3.SetTranslated(true); 6615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) details = dispatcher->OnEventFromSource(&key_event3); 6625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(key_event3.handled() || details.dispatcher_destroyed); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, target.accelerator_pressed_count()); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, GlobalAccelerators) { 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CycleBackward 67046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_TAB, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN))); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CycleForward 67346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE( 67446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Process(ui::Accelerator(ui::VKEY_TAB, ui::EF_ALT_DOWN))); 67558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // CycleLinear 67646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE))); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 67958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_CHROMEOS) 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Take screenshot / partial screenshot 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True should always be returned regardless of the existence of the delegate. 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test::TestScreenshotDelegate* delegate = GetScreenshotDelegate(); 6844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delegate->set_can_take_screenshot(false); 68546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN))); 68746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE( 68846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Process(ui::Accelerator(ui::VKEY_PRINT, ui::EF_NONE))); 68946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(ui::Accelerator( 69046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 6914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 6924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delegate->set_can_take_screenshot(true); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_take_screenshot_count()); 69446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN))); 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_take_screenshot_count()); 69746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE( 69846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Process(ui::Accelerator(ui::VKEY_PRINT, ui::EF_NONE))); 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_take_screenshot_count()); 70046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(ui::Accelerator( 70146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_take_screenshot_count()); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator volume_mute(ui::VKEY_VOLUME_MUTE, ui::EF_NONE); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator volume_down(ui::VKEY_VOLUME_DOWN, ui::EF_NONE); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator volume_up(ui::VKEY_VOLUME_UP, ui::EF_NONE); 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 709010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) TestVolumeControlDelegate* delegate = 710010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) new TestVolumeControlDelegate(false); 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->system_tray_delegate()->SetVolumeControlDelegate( 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<VolumeControlDelegate>(delegate).Pass()); 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_mute_count()); 71446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(volume_mute)); 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_mute_count()); 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(volume_mute, delegate->last_accelerator()); 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_down_count()); 71846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(volume_down)); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_down_count()); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(volume_down, delegate->last_accelerator()); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_up_count()); 72246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(volume_up)); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_up_count()); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(volume_up, delegate->last_accelerator()); 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 727010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) TestVolumeControlDelegate* delegate = new TestVolumeControlDelegate(true); 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->system_tray_delegate()->SetVolumeControlDelegate( 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<VolumeControlDelegate>(delegate).Pass()); 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_mute_count()); 73146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(volume_mute)); 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_mute_count()); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(volume_mute, delegate->last_accelerator()); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_down_count()); 73546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(volume_down)); 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_down_count()); 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(volume_down, delegate->last_accelerator()); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_up_count()); 73946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(volume_up)); 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_up_count()); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(volume_up, delegate->last_accelerator()); 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Brightness 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ui::VKEY_BRIGHTNESS_DOWN/UP are not defined on Windows. 7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator brightness_down(ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE); 7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator brightness_up(ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyBrightnessControlDelegate* delegate = 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DummyBrightnessControlDelegate(false); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetBrightnessControlDelegate( 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrightnessControlDelegate>(delegate).Pass()); 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_down_count()); 75446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(brightness_down)); 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_down_count()); 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(brightness_down, delegate->last_accelerator()); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_up_count()); 75846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(brightness_up)); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_up_count()); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(brightness_up, delegate->last_accelerator()); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyBrightnessControlDelegate* delegate = 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DummyBrightnessControlDelegate(true); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetBrightnessControlDelegate( 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrightnessControlDelegate>(delegate).Pass()); 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_down_count()); 76846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(brightness_down)); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_down_count()); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(brightness_down, delegate->last_accelerator()); 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_up_count()); 77246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(brightness_up)); 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_up_count()); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(brightness_up, delegate->last_accelerator()); 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Keyboard brightness 7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator alt_brightness_down(ui::VKEY_BRIGHTNESS_DOWN, 7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN); 7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator alt_brightness_up(ui::VKEY_BRIGHTNESS_UP, 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN); 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 78346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(alt_brightness_down)); 78446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(alt_brightness_up)); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyKeyboardBrightnessControlDelegate* delegate = 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DummyKeyboardBrightnessControlDelegate(false); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetKeyboardBrightnessControlDelegate( 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<KeyboardBrightnessControlDelegate>(delegate).Pass()); 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_keyboard_brightness_down_count()); 79046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(alt_brightness_down)); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_keyboard_brightness_down_count()); 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(alt_brightness_down, delegate->last_accelerator()); 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_keyboard_brightness_up_count()); 79446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(alt_brightness_up)); 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_keyboard_brightness_up_count()); 7962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(alt_brightness_up, delegate->last_accelerator()); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyKeyboardBrightnessControlDelegate* delegate = 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DummyKeyboardBrightnessControlDelegate(true); 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetKeyboardBrightnessControlDelegate( 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<KeyboardBrightnessControlDelegate>(delegate).Pass()); 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_keyboard_brightness_down_count()); 80446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(alt_brightness_down)); 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_keyboard_brightness_down_count()); 8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(alt_brightness_down, delegate->last_accelerator()); 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_keyboard_brightness_up_count()); 80846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(alt_brightness_up)); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_keyboard_brightness_up_count()); 8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(alt_brightness_up, delegate->last_accelerator()); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(NDEBUG) 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ToggleDesktopBackgroundMode 81646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_B, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN))); 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_LINUX) 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ToggleDesktopFullScreen (not implemented yet on Linux) 82046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_F11, ui::EF_CONTROL_DOWN))); 8223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif // OS_LINUX 8233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif // !NDEBUG 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_WIN) 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Exit 82790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); 82890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(!!ewh); 82990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) StubForTest(ewh); 83090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_idle(ewh)); 83190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_ui_shown(ewh)); 83246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 83490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_idle(ewh)); 83590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_ui_shown(ewh)); 83690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SimulateTimerExpired(ewh); 83790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_idle(ewh)); 83890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_ui_shown(ewh)); 83990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Reset(ewh); 8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New tab 84346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_T, ui::EF_CONTROL_DOWN))); 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New incognito window 84746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New window 85146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_N, ui::EF_CONTROL_DOWN))); 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore tab 85546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Show task manager 85946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN))); 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 8632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Open file manager 86446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 86546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ui::Accelerator(ui::VKEY_M, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN))); 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Lock screen 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: Accelerators that do not work on the lock screen need to be 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // tested before the sequence below is invoked because it causes a side 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // effect of locking the screen. 87146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_L, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AcceleratorControllerTest, GlobalAcceleratorsToggleAppList) { 8771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AccessibilityDelegate* delegate = 8781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ash::Shell::GetInstance()->accessibility_delegate(); 8792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ash::Shell::GetInstance()->GetAppListTargetVisibility()); 8802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The press event should not open the AppList, the release should instead. 88246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE( 88346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Process(ui::Accelerator(ui::VKEY_LWIN, ui::EF_NONE))); 88446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(ui::VKEY_LWIN, 88546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->previous_accelerator_for_test().key_code()); 88646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 88746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE( 88846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Process(ReleaseAccelerator(ui::VKEY_LWIN, ui::EF_NONE))); 8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ash::Shell::GetInstance()->GetAppListTargetVisibility()); 8902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // When spoken feedback is on, the AppList should not toggle. 8922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ToggleSpokenFeedback(A11Y_NOTIFICATION_NONE); 89346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE( 89446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Process(ui::Accelerator(ui::VKEY_LWIN, ui::EF_NONE))); 89546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE( 89646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Process(ReleaseAccelerator(ui::VKEY_LWIN, ui::EF_NONE))); 8972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ToggleSpokenFeedback(A11Y_NOTIFICATION_NONE); 8982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ash::Shell::GetInstance()->GetAppListTargetVisibility()); 8992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 90046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE( 90146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Process(ui::Accelerator(ui::VKEY_LWIN, ui::EF_NONE))); 90246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE( 90346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Process(ReleaseAccelerator(ui::VKEY_LWIN, ui::EF_NONE))); 9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ash::Shell::GetInstance()->GetAppListTargetVisibility()); 9052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // When spoken feedback is on, the AppList should not toggle. 9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ToggleSpokenFeedback(A11Y_NOTIFICATION_NONE); 90846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE( 90946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Process(ui::Accelerator(ui::VKEY_LWIN, ui::EF_NONE))); 91046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE( 91146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Process(ReleaseAccelerator(ui::VKEY_LWIN, ui::EF_NONE))); 9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ToggleSpokenFeedback(A11Y_NOTIFICATION_NONE); 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ash::Shell::GetInstance()->GetAppListTargetVisibility()); 9142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, ImeGlobalAccelerators) { 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test IME shortcuts. 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator control_space(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator convert(ui::VKEY_CONVERT, ui::EF_NONE); 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator non_convert(ui::VKEY_NONCONVERT, ui::EF_NONE); 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator wide_half_1(ui::VKEY_DBE_SBCSCHAR, ui::EF_NONE); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator wide_half_2(ui::VKEY_DBE_DBCSCHAR, ui::EF_NONE); 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator hangul(ui::VKEY_HANGUL, ui::EF_NONE); 92546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(control_space)); 92646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(convert)); 92746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(non_convert)); 92846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(wide_half_1)); 92946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(wide_half_2)); 93046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(hangul)); 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyImeControlDelegate* delegate = new DummyImeControlDelegate(true); 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetImeControlDelegate( 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ImeControlDelegate>(delegate).Pass()); 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_previous_ime_count()); 93546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(control_space)); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_previous_ime_count()); 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_switch_ime_count()); 93846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(convert)); 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_switch_ime_count()); 94046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(non_convert)); 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_switch_ime_count()); 94246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(wide_half_1)); 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3, delegate->handle_switch_ime_count()); 94446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(wide_half_2)); 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4, delegate->handle_switch_ime_count()); 94646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(hangul)); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(5, delegate->handle_switch_ime_count()); 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test IME shortcuts that are triggered on key release. 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_press(ui::VKEY_MENU, 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator shift_alt(ui::VKEY_MENU, ui::EF_SHIFT_DOWN); 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator alt_shift_press(ui::VKEY_SHIFT, 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator alt_shift(ui::VKEY_SHIFT, ui::EF_ALT_DOWN); 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyImeControlDelegate* delegate = new DummyImeControlDelegate(true); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetImeControlDelegate( 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ImeControlDelegate>(delegate).Pass()); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_next_ime_count()); 96346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_press)); 964116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(GetController()->Process(shift_alt)); 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_next_ime_count()); 96646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(alt_shift_press)); 967116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(GetController()->Process(alt_shift)); 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_next_ime_count()); 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should NOT switch IME when e.g. Shift+Alt+X is pressed and X is 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // released. 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_x_press( 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_X, 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator shift_alt_x(ui::VKEY_X, 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 97846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_press)); 97946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_x_press)); 98046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_x)); 98146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt)); 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_next_ime_count()); 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But we _should_ if X is either VKEY_RETURN or VKEY_SPACE. 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nona|mazda): Remove this when crbug.com/139556 in a better way. 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_return_press( 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_RETURN, 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator shift_alt_return( 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_RETURN, 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 99346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_press)); 99446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_return_press)); 99546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_return)); 996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(GetController()->Process(shift_alt)); 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3, delegate->handle_next_ime_count()); 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_space_press( 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_SPACE, 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator shift_alt_space( 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_SPACE, 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 100646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_press)); 100746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_space_press)); 100846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_space)); 1009116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(GetController()->Process(shift_alt)); 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4, delegate->handle_next_ime_count()); 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test IME shortcuts again with unnormalized accelerators (Chrome OS only). 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_press(ui::VKEY_MENU, ui::EF_SHIFT_DOWN); 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator shift_alt(ui::VKEY_MENU, ui::EF_SHIFT_DOWN); 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator alt_shift_press(ui::VKEY_SHIFT, ui::EF_ALT_DOWN); 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator alt_shift(ui::VKEY_SHIFT, ui::EF_ALT_DOWN); 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyImeControlDelegate* delegate = new DummyImeControlDelegate(true); 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetImeControlDelegate( 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ImeControlDelegate>(delegate).Pass()); 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_next_ime_count()); 102546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_press)); 1026116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(GetController()->Process(shift_alt)); 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_next_ime_count()); 102846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(alt_shift_press)); 1029116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(GetController()->Process(alt_shift)); 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_next_ime_count()); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should NOT switch IME when e.g. Shift+Alt+X is pressed and X is 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // released. 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_x_press( 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_X, 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator shift_alt_x(ui::VKEY_X, 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 104046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_press)); 104146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_x_press)); 104246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_x)); 104346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt)); 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_next_ime_count()); 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(nona|mazda): Remove this when crbug.com/139556 in a better way. 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, ImeGlobalAcceleratorsWorkaround139556) { 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The workaround for crbug.com/139556 depends on the fact that we don't 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // use Shift+Alt+Enter/Space with ET_KEY_PRESSED as an accelerator. Test it. 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_return_press( 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_RETURN, 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 105646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_return_press)); 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_space_press( 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_SPACE, 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 106046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(shift_alt_space_press)); 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(AcceleratorControllerTest, PreferredReservedAccelerators) { 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 10651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Power key is reserved on chromeos. 10661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(GetController()->IsReserved( 10671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::Accelerator(ui::VKEY_POWER, ui::EF_NONE))); 10681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(GetController()->IsPreferred( 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_POWER, ui::EF_NONE))); 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 10711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // ALT+Tab are not reserved but preferred. 10721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(GetController()->IsReserved( 10731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::Accelerator(ui::VKEY_TAB, ui::EF_ALT_DOWN))); 10741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(GetController()->IsReserved( 10751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::Accelerator(ui::VKEY_TAB, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN))); 10761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(GetController()->IsPreferred( 10771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::Accelerator(ui::VKEY_TAB, ui::EF_ALT_DOWN))); 10781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(GetController()->IsPreferred( 10791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::Accelerator(ui::VKEY_TAB, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN))); 10801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Others are not reserved nor preferred 10821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(GetController()->IsReserved( 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_PRINT, ui::EF_NONE))); 10841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(GetController()->IsPreferred( 10851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::Accelerator(ui::VKEY_PRINT, ui::EF_NONE))); 10861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(GetController()->IsReserved( 10871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::Accelerator(ui::VKEY_TAB, ui::EF_NONE))); 10881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(GetController()->IsPreferred( 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_TAB, ui::EF_NONE))); 10901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(GetController()->IsReserved( 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_A, ui::EF_NONE))); 10921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(GetController()->IsPreferred( 10931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::Accelerator(ui::VKEY_A, ui::EF_NONE))); 10941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 10951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 10971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass PreferredReservedAcceleratorsTest : public test::AshTestBase { 10991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 11001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PreferredReservedAcceleratorsTest() {} 11011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~PreferredReservedAcceleratorsTest() {} 11021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // test::AshTestBase: 11041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SetUp() OVERRIDE { 11051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AshTestBase::SetUp(); 11061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Shell::GetInstance()->lock_state_controller()-> 11071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci set_animator_for_test(new test::TestSessionStateAnimator); 11081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 11091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 11111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(PreferredReservedAcceleratorsTest); 11121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 11131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 11151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(PreferredReservedAcceleratorsTest, AcceleratorsWithFullscreen) { 11171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci aura::Window* w1 = CreateTestWindowInShellWithId(0); 11181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci aura::Window* w2 = CreateTestWindowInShellWithId(1); 11191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci wm::ActivateWindow(w1); 11201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci wm::WMEvent fullscreen(wm::WM_EVENT_FULLSCREEN); 11221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci wm::WindowState* w1_state = wm::GetWindowState(w1); 11231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci w1_state->OnWMEvent(&fullscreen); 11241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(w1_state->IsFullscreen()); 11251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::test::EventGenerator& generator = GetEventGenerator(); 11271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_CHROMEOS) 11281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Power key (reserved) should always be handled. 11291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LockStateController::TestApi test_api( 11301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Shell::GetInstance()->lock_state_controller()); 11311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(test_api.is_animating_lock()); 11321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci generator.PressKey(ui::VKEY_POWER, ui::EF_NONE); 11331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(test_api.is_animating_lock()); 11341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 11351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // A fullscreen window can consume ALT-TAB (preferred). 11371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(w1, wm::GetActiveWindow()); 11381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci generator.PressKey(ui::VKEY_TAB, ui::EF_ALT_DOWN); 11391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(w1, wm::GetActiveWindow()); 11401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_NE(w2, wm::GetActiveWindow()); 11411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // ALT-TAB is non repeatable. Press A to cancel the 11431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // repeat record. 11441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci generator.PressKey(ui::VKEY_A, ui::EF_NONE); 11451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci generator.ReleaseKey(ui::VKEY_A, ui::EF_NONE); 11461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // A normal window shouldn't consume preferred accelerator. 11481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci wm::WMEvent normal(wm::WM_EVENT_NORMAL); 11491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci w1_state->OnWMEvent(&normal); 11501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_FALSE(w1_state->IsFullscreen()); 11511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(w1, wm::GetActiveWindow()); 11531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci generator.PressKey(ui::VKEY_TAB, ui::EF_ALT_DOWN); 11541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_NE(w1, wm::GetActiveWindow()); 11551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ(w2, wm::GetActiveWindow()); 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, DisallowedAtModalWindow) { 116090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::set<AcceleratorAction> all_actions; 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0 ; i < kAcceleratorDataLength; ++i) 116290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) all_actions.insert(kAcceleratorData[i].action); 116390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if !defined(NDEBUG) 116490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::set<AcceleratorAction> all_desktop_actions; 116590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) for (size_t i = 0 ; i < kDesktopAcceleratorDataLength; ++i) 116690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) all_desktop_actions.insert(kDesktopAcceleratorData[i].action); 116790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 116890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<AcceleratorAction> actionsAllowedAtModalWindow; 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t k = 0 ; k < kActionsAllowedAtModalWindowLength; ++k) 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actionsAllowedAtModalWindow.insert(kActionsAllowedAtModalWindow[k]); 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::set<AcceleratorAction>::const_iterator it = 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actionsAllowedAtModalWindow.begin(); 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != actionsAllowedAtModalWindow.end(); ++it) { 117590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(all_actions.find(*it) != all_actions.end() 117690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 117790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if !defined(NDEBUG) 117890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) || all_desktop_actions.find(*it) != all_desktop_actions.end() 117990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 118090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ) 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " action from kActionsAllowedAtModalWindow" 118290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) << " not found in kAcceleratorData or kDesktopAcceleratorData. " 118390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) << "action: " << *it; 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> window( 11862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateTestWindowInShellWithBounds(gfx::Rect(5, 5, 20, 20))); 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator dummy; 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wm::ActivateWindow(window.get()); 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Shell::GetInstance()->SimulateModalWindowOpenForTesting(true); 119090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) for (std::set<AcceleratorAction>::const_iterator it = all_actions.begin(); 119190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) it != all_actions.end(); ++it) { 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (actionsAllowedAtModalWindow.find(*it) == 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actionsAllowedAtModalWindow.end()) { 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetController()->PerformAction(*it, dummy)) 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " for action (disallowed at modal window): " << *it; 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Testing of top row (F5-F10) accelerators that should still work 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when a modal window is open 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Screenshot 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test::TestScreenshotDelegate* delegate = GetScreenshotDelegate(); 12044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delegate->set_can_take_screenshot(false); 120546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 12062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN))); 120746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE( 120846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Process(ui::Accelerator(ui::VKEY_PRINT, ui::EF_NONE))); 120946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(ui::Accelerator( 121046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 12114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delegate->set_can_take_screenshot(true); 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_take_screenshot_count()); 121346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process( 12142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN))); 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_take_screenshot_count()); 121646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE( 121746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetController()->Process(ui::Accelerator(ui::VKEY_PRINT, ui::EF_NONE))); 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_take_screenshot_count()); 121946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(ui::Accelerator( 122046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_take_screenshot_count()); 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Brightness 12242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator brightness_down(ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE); 12252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator brightness_up(ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE); 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyBrightnessControlDelegate* delegate = 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DummyBrightnessControlDelegate(false); 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetBrightnessControlDelegate( 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrightnessControlDelegate>(delegate).Pass()); 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_down_count()); 123246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(brightness_down)); 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_down_count()); 12342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(brightness_down, delegate->last_accelerator()); 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_up_count()); 123646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(brightness_up)); 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_up_count()); 12382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(brightness_up, delegate->last_accelerator()); 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyBrightnessControlDelegate* delegate = 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DummyBrightnessControlDelegate(true); 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetBrightnessControlDelegate( 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrightnessControlDelegate>(delegate).Pass()); 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_down_count()); 124646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(brightness_down)); 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_down_count()); 12482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(brightness_down, delegate->last_accelerator()); 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_up_count()); 125046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(brightness_up)); 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_up_count()); 12522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(brightness_up, delegate->last_accelerator()); 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Volume 12552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator volume_mute(ui::VKEY_VOLUME_MUTE, ui::EF_NONE); 12562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator volume_down(ui::VKEY_VOLUME_DOWN, ui::EF_NONE); 12572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator volume_up(ui::VKEY_VOLUME_UP, ui::EF_NONE); 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 125946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(volume_mute)); 126046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(volume_down)); 126146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(volume_up)); 1262010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) TestVolumeControlDelegate* delegate = 1263010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) new TestVolumeControlDelegate(false); 12642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->system_tray_delegate()->SetVolumeControlDelegate( 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<VolumeControlDelegate>(delegate).Pass()); 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_mute_count()); 126746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(volume_mute)); 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_mute_count()); 12692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(volume_mute, delegate->last_accelerator()); 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_down_count()); 127146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(volume_down)); 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_down_count()); 12732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(volume_down, delegate->last_accelerator()); 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_up_count()); 127546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_FALSE(GetController()->Process(volume_up)); 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_up_count()); 12772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(volume_up, delegate->last_accelerator()); 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1280010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) TestVolumeControlDelegate* delegate = new TestVolumeControlDelegate(true); 12812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->system_tray_delegate()->SetVolumeControlDelegate( 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<VolumeControlDelegate>(delegate).Pass()); 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_mute_count()); 128446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(volume_mute)); 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_mute_count()); 12862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(volume_mute, delegate->last_accelerator()); 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_down_count()); 128846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(volume_down)); 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_down_count()); 12902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(volume_down, delegate->last_accelerator()); 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_up_count()); 129246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(GetController()->Process(volume_up)); 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_up_count()); 12942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(volume_up, delegate->last_accelerator()); 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(AcceleratorControllerTest, DisallowedWithNoWindow) { 1300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ui::Accelerator dummy; 1301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AccessibilityDelegate* delegate = 1302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ash::Shell::GetInstance()->accessibility_delegate(); 1303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t i = 0; i < kActionsNeedingWindowLength; ++i) { 1305f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delegate->TriggerAccessibilityAlert(A11Y_ALERT_NONE); 1306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 1307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()->PerformAction(kActionsNeedingWindow[i], dummy)); 1308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(delegate->GetLastAccessibilityAlert(), A11Y_ALERT_WINDOW_NEEDED); 1309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 1310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Make sure we don't alert if we do have a window. 1312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<aura::Window> window; 1313f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t i = 0; i < kActionsNeedingWindowLength; ++i) { 1314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch window.reset(CreateTestWindowInShellWithBounds(gfx::Rect(5, 5, 20, 20))); 1315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wm::ActivateWindow(window.get()); 1316f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delegate->TriggerAccessibilityAlert(A11Y_ALERT_NONE); 1317f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()->PerformAction(kActionsNeedingWindow[i], dummy); 1318cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NE(delegate->GetLastAccessibilityAlert(), A11Y_ALERT_WINDOW_NEEDED); 1319f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 1320f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1321f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Don't alert if we have a minimized window either. 1322f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t i = 0; i < kActionsNeedingWindowLength; ++i) { 1323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch window.reset(CreateTestWindowInShellWithBounds(gfx::Rect(5, 5, 20, 20))); 1324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch wm::ActivateWindow(window.get()); 1325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetController()->PerformAction(WINDOW_MINIMIZE, dummy); 1326f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delegate->TriggerAccessibilityAlert(A11Y_ALERT_NONE); 1327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()->PerformAction(kActionsNeedingWindow[i], dummy); 1328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_NE(delegate->GetLastAccessibilityAlert(), A11Y_ALERT_WINDOW_NEEDED); 1329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 1330f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 1333