accelerator_controller_unittest.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
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" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/accelerators/accelerator_table.h" 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/accessibility_delegate.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ash/ash_switches.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/display/display_manager.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/ime_control_delegate.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/screen_util.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell_window_ids.h" 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/system/brightness_control_delegate.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/keyboard_brightness/keyboard_brightness_control_delegate.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/system/tray/system_tray_delegate.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/test/ash_test_base.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/test/display_manager_test_api.h" 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/test/test_screenshot_delegate.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/test/test_shell_delegate.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/volume_control_delegate.h" 2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ash/wm/window_state.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/wm/window_util.h" 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/command_line.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/test/test_window_delegate.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/test/test_windows.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/window.h" 28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event.h" 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/events/event_processor.h" 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/screen.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_X11) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <X11/Xlib.h> 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/events/test/events_test_utils_x11.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestTarget : public ui::AcceleratorTarget { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TestTarget() : accelerator_pressed_count_(0) {} 443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~TestTarget() {} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int accelerator_pressed_count() const { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return accelerator_pressed_count_; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_accelerator_pressed_count(int accelerator_pressed_count) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) accelerator_pressed_count_ = accelerator_pressed_count; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from ui::AcceleratorTarget: 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CanHandleAccelerators() const OVERRIDE; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int accelerator_pressed_count_; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestTarget); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ReleaseAccelerator : public ui::Accelerator { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ReleaseAccelerator(ui::KeyboardCode keycode, int modifiers) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ui::Accelerator(keycode, modifiers) { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_type(ui::ET_KEY_RELEASED); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DummyVolumeControlDelegate : public VolumeControlDelegate { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit DummyVolumeControlDelegate(bool consume) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : consume_(consume), 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_volume_mute_count_(0), 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_volume_down_count_(0), 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_volume_up_count_(0) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DummyVolumeControlDelegate() {} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleVolumeMute(const ui::Accelerator& accelerator) OVERRIDE { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_volume_mute_count_; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_accelerator_ = accelerator; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleVolumeDown(const ui::Accelerator& accelerator) OVERRIDE { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_volume_down_count_; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_accelerator_ = accelerator; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleVolumeUp(const ui::Accelerator& accelerator) OVERRIDE { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_volume_up_count_; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_accelerator_ = accelerator; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_volume_mute_count() const { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_volume_mute_count_; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_volume_down_count() const { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_volume_down_count_; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_volume_up_count() const { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_volume_up_count_; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& last_accelerator() const { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return last_accelerator_; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool consume_; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_volume_mute_count_; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_volume_down_count_; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_volume_up_count_; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator last_accelerator_; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DummyVolumeControlDelegate); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DummyBrightnessControlDelegate : public BrightnessControlDelegate { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit DummyBrightnessControlDelegate(bool consume) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : consume_(consume), 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_brightness_down_count_(0), 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_brightness_up_count_(0) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DummyBrightnessControlDelegate() {} 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleBrightnessDown( 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& accelerator) OVERRIDE { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_brightness_down_count_; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_accelerator_ = accelerator; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleBrightnessUp(const ui::Accelerator& accelerator) OVERRIDE { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_brightness_up_count_; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_accelerator_ = accelerator; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBrightnessPercent(double percent, bool gradual) OVERRIDE {} 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetBrightnessPercent( 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(double)>& callback) OVERRIDE { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback.Run(100.0); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_brightness_down_count() const { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_brightness_down_count_; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_brightness_up_count() const { 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_brightness_up_count_; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& last_accelerator() const { 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return last_accelerator_; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool consume_; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_brightness_down_count_; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_brightness_up_count_; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator last_accelerator_; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DummyBrightnessControlDelegate); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DummyImeControlDelegate : public ImeControlDelegate { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit DummyImeControlDelegate(bool consume) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : consume_(consume), 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_next_ime_count_(0), 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_previous_ime_count_(0), 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_switch_ime_count_(0) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DummyImeControlDelegate() {} 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleNextIme() OVERRIDE { 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_next_ime_count_; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 180a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch virtual bool HandlePreviousIme(const ui::Accelerator& accelerator) OVERRIDE { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_previous_ime_count_; 182a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch last_accelerator_ = accelerator; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleSwitchIme(const ui::Accelerator& accelerator) OVERRIDE { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_switch_ime_count_; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_accelerator_ = accelerator; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_next_ime_count() const { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_next_ime_count_; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_previous_ime_count() const { 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_previous_ime_count_; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_switch_ime_count() const { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_switch_ime_count_; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& last_accelerator() const { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return last_accelerator_; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ui::Accelerator RemapAccelerator( 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator& accelerator) OVERRIDE { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ui::Accelerator(accelerator); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool consume_; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_next_ime_count_; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_previous_ime_count_; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_switch_ime_count_; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator last_accelerator_; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DummyImeControlDelegate); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DummyKeyboardBrightnessControlDelegate 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public KeyboardBrightnessControlDelegate { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit DummyKeyboardBrightnessControlDelegate(bool consume) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : consume_(consume), 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_keyboard_brightness_down_count_(0), 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handle_keyboard_brightness_up_count_(0) { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DummyKeyboardBrightnessControlDelegate() {} 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleKeyboardBrightnessDown( 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& accelerator) OVERRIDE { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_keyboard_brightness_down_count_; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_accelerator_ = accelerator; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleKeyboardBrightnessUp( 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& accelerator) OVERRIDE { 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++handle_keyboard_brightness_up_count_; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_accelerator_ = accelerator; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return consume_; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_keyboard_brightness_down_count() const { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_keyboard_brightness_down_count_; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_keyboard_brightness_up_count() const { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handle_keyboard_brightness_up_count_; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& last_accelerator() const { 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return last_accelerator_; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool consume_; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_keyboard_brightness_down_count_; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int handle_keyboard_brightness_up_count_; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator last_accelerator_; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DummyKeyboardBrightnessControlDelegate); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestTarget::AcceleratorPressed(const ui::Accelerator& accelerator) { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++accelerator_pressed_count_; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestTarget::CanHandleAccelerators() const { 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AcceleratorControllerTest : public test::AshTestBase { 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) AcceleratorControllerTest() {} 2773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~AcceleratorControllerTest() {} 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EnableInternalDisplay() { 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test::DisplayManagerTestApi(Shell::GetInstance()->display_manager()). 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetFirstDisplayAsInternalDisplay(); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static AcceleratorController* GetController(); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool ProcessWithContext(const ui::Accelerator& accelerator); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Several functions to access ExitWarningHandler (as friend). 28990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static void StubForTest(ExitWarningHandler* ewh) { 29090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ewh->stub_timer_for_test_ = true; 29190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 29290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static void Reset(ExitWarningHandler* ewh) { 29390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ewh->state_ = ExitWarningHandler::IDLE; 29490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 29590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static void SimulateTimerExpired(ExitWarningHandler* ewh) { 29690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ewh->TimerAction(); 29790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 29890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static bool is_ui_shown(ExitWarningHandler* ewh) { 29990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return !!ewh->widget_; 30090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 30190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static bool is_idle(ExitWarningHandler* ewh) { 30290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return ewh->state_ == ExitWarningHandler::IDLE; 30390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 30490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static bool is_exiting(ExitWarningHandler* ewh) { 30590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return ewh->state_ == ExitWarningHandler::EXITING; 30690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 30790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AcceleratorControllerTest); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AcceleratorController* AcceleratorControllerTest::GetController() { 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Shell::GetInstance()->accelerator_controller(); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool AcceleratorControllerTest::ProcessWithContext( 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& accelerator) { 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AcceleratorController* controller = GetController(); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller->context()->UpdateContext(accelerator); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return controller->Process(accelerator); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if !defined(OS_WIN) 32490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Double press of exit shortcut => exiting 32590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(AcceleratorControllerTest, ExitWarningHandlerTestDoublePress) { 32690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui::Accelerator press(ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN); 32790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui::Accelerator release(press); 32890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) release.set_type(ui::ET_KEY_RELEASED); 32990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); 33090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(!!ewh); 33190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) StubForTest(ewh); 33290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_idle(ewh)); 33390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_ui_shown(ewh)); 33490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext(press)); 33590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext(release)); 33690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_idle(ewh)); 33790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_ui_shown(ewh)); 3383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(press)); // second press before timer. 33990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext(release)); 34090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SimulateTimerExpired(ewh); 34190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_exiting(ewh)); 34290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_ui_shown(ewh)); 34390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Reset(ewh); 34490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 34590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 34690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Single press of exit shortcut before timer => idle 34790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(AcceleratorControllerTest, ExitWarningHandlerTestSinglePress) { 34890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui::Accelerator press(ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN); 34990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ui::Accelerator release(press); 35090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) release.set_type(ui::ET_KEY_RELEASED); 35190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); 35290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(!!ewh); 35390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) StubForTest(ewh); 35490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_idle(ewh)); 35590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_ui_shown(ewh)); 35690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext(press)); 35790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext(release)); 35890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_idle(ewh)); 35990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_ui_shown(ewh)); 36090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SimulateTimerExpired(ewh); 36190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_idle(ewh)); 36290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_ui_shown(ewh)); 36390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Reset(ewh); 36490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 3653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Shutdown ash with exit warning bubble open should not crash. 3673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(AcceleratorControllerTest, LingeringExitWarningBubble) { 3683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); 3693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ASSERT_TRUE(!!ewh); 3703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) StubForTest(ewh); 3713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Trigger once to show the bubble. 3733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ewh->HandleAccelerator(); 3743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_FALSE(is_idle(ewh)); 3753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(is_ui_shown(ewh)); 3763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Exit ash and there should be no crash 3783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 37990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // !defined(OS_WIN) 38090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, Register) { 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The registered accelerator is processed. 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(accelerator_a)); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, target.accelerator_pressed_count()); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, RegisterMultipleTarget) { 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target1; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target1); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target2; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target2); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If multiple targets are registered with the same accelerator, the target 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // registered later processes the accelerator. 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(accelerator_a)); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, target1.accelerator_pressed_count()); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, target2.accelerator_pressed_count()); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, Unregister) { 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target; 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_b(ui::VKEY_B, ui::EF_NONE); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_b, &target); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Unregistering a different accelerator does not affect the other 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // accelerator. 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Unregister(accelerator_b, &target); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(accelerator_a)); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, target.accelerator_pressed_count()); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The unregistered accelerator is no longer processed. 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target.set_accelerator_pressed_count(0); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Unregister(accelerator_a, &target); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(accelerator_a)); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, target.accelerator_pressed_count()); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, UnregisterAll) { 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target1; 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target1); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_b(ui::VKEY_B, ui::EF_NONE); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_b, &target1); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_c(ui::VKEY_C, ui::EF_NONE); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target2; 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_c, &target2); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->UnregisterAll(&target1); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All the accelerators registered for |target1| are no longer processed. 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(accelerator_a)); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(accelerator_b)); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, target1.accelerator_pressed_count()); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UnregisterAll with a different target does not affect the other target. 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(accelerator_c)); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, target2.accelerator_pressed_count()); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, Process) { 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target1; 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target1); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The registered accelerator is processed. 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(accelerator_a)); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, target1.accelerator_pressed_count()); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The non-registered accelerator is not processed. 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_b(ui::VKEY_B, ui::EF_NONE); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(accelerator_b)); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, IsRegistered) { 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator_shift_a(ui::VKEY_A, ui::EF_SHIFT_DOWN); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target; 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetController()->IsRegistered(accelerator_a)); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetController()->IsRegistered(accelerator_shift_a)); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->UnregisterAll(&target); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetController()->IsRegistered(accelerator_a)); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, WindowSnap) { 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> window( 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateTestWindowInShellWithBounds(gfx::Rect(5, 5, 20, 20))); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator dummy; 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 47668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) wm::WindowState* window_state = wm::GetWindowState(window.get()); 47768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 47868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->Activate(); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(WINDOW_SNAP_LEFT, dummy); 482a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect expected_bounds = wm::GetDefaultLeftSnappedWindowBoundsInParent( 483a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) window.get()); 484a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(expected_bounds.ToString(), window->bounds().ToString()); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(WINDOW_SNAP_RIGHT, dummy); 488a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect expected_bounds = wm::GetDefaultRightSnappedWindowBoundsInParent( 489a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) window.get()); 490a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(expected_bounds.ToString(), window->bounds().ToString()); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 493a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gfx::Rect normal_bounds = window_state->GetRestoreBoundsInParent(); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy); 49668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(window_state->IsMaximized()); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(normal_bounds.ToString(), window->bounds().ToString()); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy); 50068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_FALSE(window_state->IsMaximized()); 501a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Window gets restored to its restore bounds since side-maximized state 502a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // is treated as a "maximized" state. 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(normal_bounds.ToString(), window->bounds().ToString()); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(WINDOW_SNAP_LEFT, dummy); 50768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_FALSE(window_state->IsMaximized()); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(WINDOW_SNAP_RIGHT, dummy); 51168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_FALSE(window_state->IsMaximized()); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(TOGGLE_MAXIMIZED, dummy); 51468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(window_state->IsMaximized()); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(WINDOW_MINIMIZE, dummy); 51668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_FALSE(window_state->IsMaximized()); 51768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(window_state->IsMinimized()); 51868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->Restore(); 51968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->Activate(); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(WINDOW_MINIMIZE, dummy); 52368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(window_state->IsMinimized()); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 527f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(AcceleratorControllerTest, CenterWindowAccelerator) { 528f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<aura::Window> window( 529f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTestWindowInShellWithBounds(gfx::Rect(5, 5, 20, 20))); 530f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ui::Accelerator dummy; 531f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) wm::WindowState* window_state = wm::GetWindowState(window.get()); 532f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) window_state->Activate(); 533f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 534f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Center the window using accelerator. 535f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()->PerformAction(WINDOW_POSITION_CENTER, dummy); 536f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect work_area = 537f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Shell::GetScreen()->GetDisplayNearestWindow(window.get()).work_area(); 538f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect bounds = window->GetBoundsInScreen(); 539f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_NEAR(bounds.x() - work_area.x(), 540f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) work_area.right() - bounds.right(), 541f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1); 542f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_NEAR(bounds.y() - work_area.y(), 543f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) work_area.bottom() - bounds.bottom(), 544f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1); 545f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 546f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Add the window to docked container and try to center it. 547f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) window->SetBounds(gfx::Rect(0, 0, 20, 20)); 548f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) aura::Window* docked_container = Shell::GetContainer( 549c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch window->GetRootWindow(), kShellWindowId_DockedContainer); 550f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) docked_container->AddChild(window.get()); 551f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Rect docked_bounds = window->GetBoundsInScreen(); 552f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()->PerformAction(WINDOW_POSITION_CENTER, dummy); 553f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // It should not get centered and should remain docked. 554c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); 555f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(docked_bounds.ToString(), window->GetBoundsInScreen().ToString()); 556f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 5578bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 558f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(AcceleratorControllerTest, ControllerContext) { 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator accelerator_a2(ui::VKEY_A, ui::EF_NONE); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator accelerator_b(ui::VKEY_B, ui::EF_NONE); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) accelerator_a.set_type(ui::ET_KEY_PRESSED); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) accelerator_a2.set_type(ui::ET_KEY_RELEASED); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) accelerator_b.set_type(ui::ET_KEY_PRESSED); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetController()->context()->repeated()); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::ET_UNKNOWN, 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->context()->previous_accelerator().type()); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->context()->UpdateContext(accelerator_a); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetController()->context()->repeated()); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::ET_UNKNOWN, 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->context()->previous_accelerator().type()); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->context()->UpdateContext(accelerator_a2); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetController()->context()->repeated()); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::ET_KEY_PRESSED, 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->context()->previous_accelerator().type()); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->context()->UpdateContext(accelerator_a2); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetController()->context()->repeated()); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::ET_KEY_RELEASED, 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->context()->previous_accelerator().type()); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->context()->UpdateContext(accelerator_b); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetController()->context()->repeated()); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::ET_KEY_RELEASED, 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->context()->previous_accelerator().type()); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_WIN) && defined(USE_AURA) 5930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// crbug.com/314674 5940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#define MAYBE_SuppressToggleMaximized DISABLED_SuppressToggleMaximized 5950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#else 5960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#define MAYBE_SuppressToggleMaximized SuppressToggleMaximized 5970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif 5980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(AcceleratorControllerTest, MAYBE_SuppressToggleMaximized) { 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> window( 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateTestWindowInShellWithBounds(gfx::Rect(5, 5, 20, 20))); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wm::ActivateWindow(window.get()); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator accelerator(ui::VKEY_A, ui::EF_NONE); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator empty_accelerator; 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 60668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) wm::WindowState* window_state = wm::GetWindowState(window.get()); 60768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Toggling not suppressed. 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->context()->UpdateContext(accelerator); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(TOGGLE_MAXIMIZED, accelerator); 61168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(window_state->IsMaximized()); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The same accelerator - toggling suppressed. 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->context()->UpdateContext(accelerator); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(TOGGLE_MAXIMIZED, accelerator); 61668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(window_state->IsMaximized()); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Suppressed but not for gesture events. 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->PerformAction(TOGGLE_MAXIMIZED, empty_accelerator); 62068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_FALSE(window_state->IsMaximized()); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 623f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_WIN) && defined(USE_AURA) 624f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// crbug.com/317592 625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_ProcessOnce DISABLED_ProcessOnce 626f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else 627f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_ProcessOnce ProcessOnce 628f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 629f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) || defined(USE_X11) 631f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(AcceleratorControllerTest, MAYBE_ProcessOnce) { 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator accelerator_a(ui::VKEY_A, ui::EF_NONE); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestTarget target; 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->Register(accelerator_a, &target); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The accelerator is processed only once. 637a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ui::EventProcessor* dispatcher = 638a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Shell::GetPrimaryRootWindow()->GetHost()->event_processor(); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MSG msg1 = { NULL, WM_KEYDOWN, ui::VKEY_A, 0 }; 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::TranslatedKeyEvent key_event1(msg1, false); 6425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::EventDispatchDetails details = dispatcher->OnEventFromSource(&key_event1); 6435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(key_event1.handled() || details.dispatcher_destroyed); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MSG msg2 = { NULL, WM_CHAR, L'A', 0 }; 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::TranslatedKeyEvent key_event2(msg2, true); 6475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) details = dispatcher->OnEventFromSource(&key_event2); 6485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(key_event2.handled() || details.dispatcher_destroyed); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MSG msg3 = { NULL, WM_KEYUP, ui::VKEY_A, 0 }; 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::TranslatedKeyEvent key_event3(msg3, false); 6525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) details = dispatcher->OnEventFromSource(&key_event3); 6535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(key_event3.handled() || details.dispatcher_destroyed); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(USE_X11) 655f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::ScopedXI2Event key_event; 656f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) key_event.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_A, 0); 657f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::TranslatedKeyEvent key_event1(key_event, false); 6585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::EventDispatchDetails details = dispatcher->OnEventFromSource(&key_event1); 6595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(key_event1.handled() || details.dispatcher_destroyed); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 661f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::TranslatedKeyEvent key_event2(key_event, true); 6625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) details = dispatcher->OnEventFromSource(&key_event2); 6635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(key_event2.handled() || details.dispatcher_destroyed); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) key_event.InitKeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_A, 0); 666f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::TranslatedKeyEvent key_event3(key_event, false); 6675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) details = dispatcher->OnEventFromSource(&key_event3); 6685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(key_event3.handled() || details.dispatcher_destroyed); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, target.accelerator_pressed_count()); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, GlobalAccelerators) { 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CycleBackward 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_TAB, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN))); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CycleForward 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_TAB, ui::EF_ALT_DOWN))); 68158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // CycleLinear 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE))); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 68558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_CHROMEOS) 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Take screenshot / partial screenshot 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True should always be returned regardless of the existence of the delegate. 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test::TestScreenshotDelegate* delegate = GetScreenshotDelegate(); 6904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delegate->set_can_take_screenshot(false); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN))); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_PRINT, ui::EF_NONE))); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 6984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 6994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delegate->set_can_take_screenshot(true); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_take_screenshot_count()); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN))); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_take_screenshot_count()); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_PRINT, ui::EF_NONE))); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_take_screenshot_count()); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_take_screenshot_count()); 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator volume_mute(ui::VKEY_VOLUME_MUTE, ui::EF_NONE); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator volume_down(ui::VKEY_VOLUME_DOWN, ui::EF_NONE); 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator volume_up(ui::VKEY_VOLUME_UP, ui::EF_NONE); 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyVolumeControlDelegate* delegate = 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DummyVolumeControlDelegate(false); 7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->system_tray_delegate()->SetVolumeControlDelegate( 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<VolumeControlDelegate>(delegate).Pass()); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_mute_count()); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(volume_mute)); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_mute_count()); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(volume_mute, delegate->last_accelerator()); 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_down_count()); 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(volume_down)); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_down_count()); 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(volume_down, delegate->last_accelerator()); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_up_count()); 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(volume_up)); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_up_count()); 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(volume_up, delegate->last_accelerator()); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyVolumeControlDelegate* delegate = new DummyVolumeControlDelegate(true); 7362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->system_tray_delegate()->SetVolumeControlDelegate( 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<VolumeControlDelegate>(delegate).Pass()); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_mute_count()); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(volume_mute)); 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_mute_count()); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(volume_mute, delegate->last_accelerator()); 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_down_count()); 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(volume_down)); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_down_count()); 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(volume_down, delegate->last_accelerator()); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_up_count()); 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(volume_up)); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_up_count()); 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(volume_up, delegate->last_accelerator()); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Brightness 7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ui::VKEY_BRIGHTNESS_DOWN/UP are not defined on Windows. 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator brightness_down(ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE); 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator brightness_up(ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE); 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyBrightnessControlDelegate* delegate = 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DummyBrightnessControlDelegate(false); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetBrightnessControlDelegate( 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrightnessControlDelegate>(delegate).Pass()); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_down_count()); 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(brightness_down)); 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_down_count()); 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(brightness_down, delegate->last_accelerator()); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_up_count()); 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(brightness_up)); 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_up_count()); 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(brightness_up, delegate->last_accelerator()); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyBrightnessControlDelegate* delegate = 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DummyBrightnessControlDelegate(true); 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetBrightnessControlDelegate( 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrightnessControlDelegate>(delegate).Pass()); 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_down_count()); 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(brightness_down)); 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_down_count()); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(brightness_down, delegate->last_accelerator()); 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_up_count()); 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(brightness_up)); 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_up_count()); 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(brightness_up, delegate->last_accelerator()); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Keyboard brightness 7862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator alt_brightness_down(ui::VKEY_BRIGHTNESS_DOWN, 7872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN); 7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator alt_brightness_up(ui::VKEY_BRIGHTNESS_UP, 7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_ALT_DOWN); 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext(alt_brightness_down)); 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext(alt_brightness_up)); 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyKeyboardBrightnessControlDelegate* delegate = 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DummyKeyboardBrightnessControlDelegate(false); 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetKeyboardBrightnessControlDelegate( 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<KeyboardBrightnessControlDelegate>(delegate).Pass()); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_keyboard_brightness_down_count()); 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext(alt_brightness_down)); 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_keyboard_brightness_down_count()); 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(alt_brightness_down, delegate->last_accelerator()); 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_keyboard_brightness_up_count()); 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext(alt_brightness_up)); 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_keyboard_brightness_up_count()); 8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(alt_brightness_up, delegate->last_accelerator()); 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyKeyboardBrightnessControlDelegate* delegate = 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DummyKeyboardBrightnessControlDelegate(true); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetKeyboardBrightnessControlDelegate( 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<KeyboardBrightnessControlDelegate>(delegate).Pass()); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_keyboard_brightness_down_count()); 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext(alt_brightness_down)); 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_keyboard_brightness_down_count()); 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(alt_brightness_down, delegate->last_accelerator()); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_keyboard_brightness_up_count()); 8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext(alt_brightness_up)); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_keyboard_brightness_up_count()); 8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(alt_brightness_up, delegate->last_accelerator()); 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(NDEBUG) 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ToggleDesktopBackgroundMode 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_B, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN))); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_LINUX) 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ToggleDesktopFullScreen (not implemented yet on Linux) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_F11, ui::EF_CONTROL_DOWN))); 8303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif // OS_LINUX 8313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif // !NDEBUG 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_WIN) 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Exit 83590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ExitWarningHandler* ewh = GetController()->GetExitWarningHandlerForTest(); 83690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(!!ewh); 83790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) StubForTest(ewh); 83890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_idle(ewh)); 83990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_ui_shown(ewh)); 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_Q, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 84290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_idle(ewh)); 84390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_ui_shown(ewh)); 84490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SimulateTimerExpired(ewh); 84590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(is_idle(ewh)); 84690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_FALSE(is_ui_shown(ewh)); 84790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Reset(ewh); 8482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New tab 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_T, ui::EF_CONTROL_DOWN))); 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New incognito window 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // New window 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_N, ui::EF_CONTROL_DOWN))); 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore tab 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Show task manager 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN))); 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 8712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Open file manager 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 8732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_M, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN))); 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Lock screen 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: Accelerators that do not work on the lock screen need to be 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // tested before the sequence below is invoked because it causes a side 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // effect of locking the screen. 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_L, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AcceleratorControllerTest, GlobalAcceleratorsToggleAppList) { 8851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AccessibilityDelegate* delegate = 8861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ash::Shell::GetInstance()->accessibility_delegate(); 8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ash::Shell::GetInstance()->GetAppListTargetVisibility()); 8882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The press event should not open the AppList, the release should instead. 8902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext( 8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_LWIN, ui::EF_NONE))); 8922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 8932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ReleaseAccelerator(ui::VKEY_LWIN, ui::EF_NONE))); 8942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ash::Shell::GetInstance()->GetAppListTargetVisibility()); 8952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // When spoken feedback is on, the AppList should not toggle. 8972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ToggleSpokenFeedback(A11Y_NOTIFICATION_NONE); 8982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext( 8992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_LWIN, ui::EF_NONE))); 9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext( 9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ReleaseAccelerator(ui::VKEY_LWIN, ui::EF_NONE))); 9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ToggleSpokenFeedback(A11Y_NOTIFICATION_NONE); 9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ash::Shell::GetInstance()->GetAppListTargetVisibility()); 9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext( 9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_LWIN, ui::EF_NONE))); 9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 9082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ReleaseAccelerator(ui::VKEY_LWIN, ui::EF_NONE))); 9092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ash::Shell::GetInstance()->GetAppListTargetVisibility()); 9102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // When spoken feedback is on, the AppList should not toggle. 9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ToggleSpokenFeedback(A11Y_NOTIFICATION_NONE); 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext( 9142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_LWIN, ui::EF_NONE))); 9152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext( 9162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ReleaseAccelerator(ui::VKEY_LWIN, ui::EF_NONE))); 9172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->ToggleSpokenFeedback(A11Y_NOTIFICATION_NONE); 9182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ash::Shell::GetInstance()->GetAppListTargetVisibility()); 9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, ImeGlobalAccelerators) { 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test IME shortcuts. 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator control_space(ui::VKEY_SPACE, ui::EF_CONTROL_DOWN); 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator convert(ui::VKEY_CONVERT, ui::EF_NONE); 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator non_convert(ui::VKEY_NONCONVERT, ui::EF_NONE); 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator wide_half_1(ui::VKEY_DBE_SBCSCHAR, ui::EF_NONE); 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator wide_half_2(ui::VKEY_DBE_DBCSCHAR, ui::EF_NONE); 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator hangul(ui::VKEY_HANGUL, ui::EF_NONE); 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(control_space)); 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(convert)); 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(non_convert)); 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(wide_half_1)); 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(wide_half_2)); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(hangul)); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyImeControlDelegate* delegate = new DummyImeControlDelegate(true); 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetImeControlDelegate( 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ImeControlDelegate>(delegate).Pass()); 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_previous_ime_count()); 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(control_space)); 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_previous_ime_count()); 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_switch_ime_count()); 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(convert)); 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_switch_ime_count()); 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(non_convert)); 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_switch_ime_count()); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(wide_half_1)); 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3, delegate->handle_switch_ime_count()); 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(wide_half_2)); 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4, delegate->handle_switch_ime_count()); 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(hangul)); 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(5, delegate->handle_switch_ime_count()); 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test IME shortcuts that are triggered on key release. 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_press(ui::VKEY_MENU, 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator shift_alt(ui::VKEY_MENU, ui::EF_SHIFT_DOWN); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator alt_shift_press(ui::VKEY_SHIFT, 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator alt_shift(ui::VKEY_SHIFT, ui::EF_ALT_DOWN); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyImeControlDelegate* delegate = new DummyImeControlDelegate(true); 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetImeControlDelegate( 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ImeControlDelegate>(delegate).Pass()); 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_next_ime_count()); 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_press)); 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(shift_alt)); 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_next_ime_count()); 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(alt_shift_press)); 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(alt_shift)); 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_next_ime_count()); 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should NOT switch IME when e.g. Shift+Alt+X is pressed and X is 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // released. 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_x_press( 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_X, 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator shift_alt_x(ui::VKEY_X, 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_press)); 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_x_press)); 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_x)); 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt)); 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_next_ime_count()); 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But we _should_ if X is either VKEY_RETURN or VKEY_SPACE. 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nona|mazda): Remove this when crbug.com/139556 in a better way. 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_return_press( 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_RETURN, 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator shift_alt_return( 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_RETURN, 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_press)); 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_return_press)); 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_return)); 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(shift_alt)); 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3, delegate->handle_next_ime_count()); 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_space_press( 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_SPACE, 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator shift_alt_space( 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_SPACE, 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_press)); 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_space_press)); 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_space)); 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(shift_alt)); 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4, delegate->handle_next_ime_count()); 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test IME shortcuts again with unnormalized accelerators (Chrome OS only). 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_press(ui::VKEY_MENU, ui::EF_SHIFT_DOWN); 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator shift_alt(ui::VKEY_MENU, ui::EF_SHIFT_DOWN); 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator alt_shift_press(ui::VKEY_SHIFT, ui::EF_ALT_DOWN); 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator alt_shift(ui::VKEY_SHIFT, ui::EF_ALT_DOWN); 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyImeControlDelegate* delegate = new DummyImeControlDelegate(true); 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetImeControlDelegate( 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ImeControlDelegate>(delegate).Pass()); 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_next_ime_count()); 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_press)); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(shift_alt)); 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_next_ime_count()); 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(alt_shift_press)); 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext(alt_shift)); 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_next_ime_count()); 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should NOT switch IME when e.g. Shift+Alt+X is pressed and X is 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // released. 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_x_press( 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_X, 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ReleaseAccelerator shift_alt_x(ui::VKEY_X, 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_press)); 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_x_press)); 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_x)); 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt)); 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_next_ime_count()); 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(nona|mazda): Remove this when crbug.com/139556 in a better way. 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, ImeGlobalAcceleratorsWorkaround139556) { 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The workaround for crbug.com/139556 depends on the fact that we don't 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // use Shift+Alt+Enter/Space with ET_KEY_PRESSED as an accelerator. Test it. 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_return_press( 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_RETURN, 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_return_press)); 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator shift_alt_space_press( 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::VKEY_SPACE, 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN); 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ProcessWithContext(shift_alt_space_press)); 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, ReservedAccelerators) { 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (Shift+)Alt+Tab and Chrome OS top-row keys are reserved. 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetController()->IsReservedAccelerator( 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_TAB, ui::EF_ALT_DOWN))); 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetController()->IsReservedAccelerator( 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_TAB, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN))); 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetController()->IsReservedAccelerator( 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_POWER, ui::EF_NONE))); 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Others are not reserved. 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetController()->IsReservedAccelerator( 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_PRINT, ui::EF_NONE))); 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetController()->IsReservedAccelerator( 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_TAB, ui::EF_NONE))); 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetController()->IsReservedAccelerator( 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_A, ui::EF_NONE))); 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AcceleratorControllerTest, DisallowedAtModalWindow) { 108990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::set<AcceleratorAction> all_actions; 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0 ; i < kAcceleratorDataLength; ++i) 109190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) all_actions.insert(kAcceleratorData[i].action); 109290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if !defined(NDEBUG) 109390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::set<AcceleratorAction> all_desktop_actions; 109490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) for (size_t i = 0 ; i < kDesktopAcceleratorDataLength; ++i) 109590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) all_desktop_actions.insert(kDesktopAcceleratorData[i].action); 109690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 109790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<AcceleratorAction> actionsAllowedAtModalWindow; 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t k = 0 ; k < kActionsAllowedAtModalWindowLength; ++k) 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actionsAllowedAtModalWindow.insert(kActionsAllowedAtModalWindow[k]); 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::set<AcceleratorAction>::const_iterator it = 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actionsAllowedAtModalWindow.begin(); 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != actionsAllowedAtModalWindow.end(); ++it) { 110490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_TRUE(all_actions.find(*it) != all_actions.end() 110590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 110690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if !defined(NDEBUG) 110790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) || all_desktop_actions.find(*it) != all_desktop_actions.end() 110890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 110990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ) 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " action from kActionsAllowedAtModalWindow" 111190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) << " not found in kAcceleratorData or kDesktopAcceleratorData. " 111290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) << "action: " << *it; 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> window( 11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateTestWindowInShellWithBounds(gfx::Rect(5, 5, 20, 20))); 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator dummy; 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wm::ActivateWindow(window.get()); 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Shell::GetInstance()->SimulateModalWindowOpenForTesting(true); 111990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) for (std::set<AcceleratorAction>::const_iterator it = all_actions.begin(); 112090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) it != all_actions.end(); ++it) { 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (actionsAllowedAtModalWindow.find(*it) == 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) actionsAllowedAtModalWindow.end()) { 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetController()->PerformAction(*it, dummy)) 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " for action (disallowed at modal window): " << *it; 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Testing of top row (F5-F10) accelerators that should still work 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when a modal window is open 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Screenshot 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test::TestScreenshotDelegate* delegate = GetScreenshotDelegate(); 11334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delegate->set_can_take_screenshot(false); 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 11352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN))); 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_PRINT, ui::EF_NONE))); 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 11392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, 11402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 11414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delegate->set_can_take_screenshot(true); 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_take_screenshot_count()); 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 11442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN))); 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_take_screenshot_count()); 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::Accelerator(ui::VKEY_PRINT, ui::EF_NONE))); 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_take_screenshot_count()); 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ProcessWithContext( 11502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator(ui::VKEY_MEDIA_LAUNCH_APP1, 11513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN))); 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, delegate->handle_take_screenshot_count()); 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Brightness 11552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator brightness_down(ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE); 11562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator brightness_up(ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE); 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyBrightnessControlDelegate* delegate = 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DummyBrightnessControlDelegate(false); 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetBrightnessControlDelegate( 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrightnessControlDelegate>(delegate).Pass()); 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_down_count()); 11632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext(brightness_down)); 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_down_count()); 11652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(brightness_down, delegate->last_accelerator()); 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_up_count()); 11672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext(brightness_up)); 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_up_count()); 11692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(brightness_up, delegate->last_accelerator()); 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyBrightnessControlDelegate* delegate = 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DummyBrightnessControlDelegate(true); 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetController()->SetBrightnessControlDelegate( 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrightnessControlDelegate>(delegate).Pass()); 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_down_count()); 11772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext(brightness_down)); 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_down_count()); 11792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(brightness_down, delegate->last_accelerator()); 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_brightness_up_count()); 11812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext(brightness_up)); 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_brightness_up_count()); 11832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(brightness_up, delegate->last_accelerator()); 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Volume 11862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator volume_mute(ui::VKEY_VOLUME_MUTE, ui::EF_NONE); 11872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator volume_down(ui::VKEY_VOLUME_DOWN, ui::EF_NONE); 11882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::Accelerator volume_up(ui::VKEY_VOLUME_UP, ui::EF_NONE); 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 11902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext(volume_mute)); 11912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext(volume_down)); 11922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext(volume_up)); 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyVolumeControlDelegate* delegate = 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new DummyVolumeControlDelegate(false); 11952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->system_tray_delegate()->SetVolumeControlDelegate( 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<VolumeControlDelegate>(delegate).Pass()); 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_mute_count()); 11982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext(volume_mute)); 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_mute_count()); 12002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(volume_mute, delegate->last_accelerator()); 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_down_count()); 12022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext(volume_down)); 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_down_count()); 12042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(volume_down, delegate->last_accelerator()); 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_up_count()); 12062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(ProcessWithContext(volume_up)); 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_up_count()); 12082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(volume_up, delegate->last_accelerator()); 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DummyVolumeControlDelegate* delegate = new DummyVolumeControlDelegate(true); 12122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->system_tray_delegate()->SetVolumeControlDelegate( 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<VolumeControlDelegate>(delegate).Pass()); 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_mute_count()); 12152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext(volume_mute)); 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_mute_count()); 12172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(volume_mute, delegate->last_accelerator()); 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_down_count()); 12192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext(volume_down)); 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_down_count()); 12212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(volume_down, delegate->last_accelerator()); 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, delegate->handle_volume_up_count()); 12232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(ProcessWithContext(volume_up)); 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, delegate->handle_volume_up_count()); 12252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(volume_up, delegate->last_accelerator()); 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(AcceleratorControllerTest, DisallowedWithNoWindow) { 1231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ui::Accelerator dummy; 1232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AccessibilityDelegate* delegate = 1233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ash::Shell::GetInstance()->accessibility_delegate(); 1234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t i = 0; i < kActionsNeedingWindowLength; ++i) { 1236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delegate->TriggerAccessibilityAlert(A11Y_ALERT_NONE); 1237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 1238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()->PerformAction(kActionsNeedingWindow[i], dummy)); 1239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(delegate->GetLastAccessibilityAlert(), A11Y_ALERT_WINDOW_NEEDED); 1240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 1241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Make sure we don't alert if we do have a window. 1243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<aura::Window> window( 1244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateTestWindowInShellWithBounds(gfx::Rect(5, 5, 20, 20))); 1245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) wm::ActivateWindow(window.get()); 1246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t i = 0; i < kActionsNeedingWindowLength; ++i) { 1247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delegate->TriggerAccessibilityAlert(A11Y_ALERT_NONE); 1248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()->PerformAction(kActionsNeedingWindow[i], dummy); 1249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(delegate->GetLastAccessibilityAlert(), A11Y_ALERT_NONE); 1250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 1251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Don't alert if we have a minimized window either. 1253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()->PerformAction(WINDOW_MINIMIZE, dummy); 1254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t i = 0; i < kActionsNeedingWindowLength; ++i) { 1255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delegate->TriggerAccessibilityAlert(A11Y_ALERT_NONE); 1256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetController()->PerformAction(kActionsNeedingWindow[i], dummy); 1257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(delegate->GetLastAccessibilityAlert(), A11Y_ALERT_NONE); 1258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 1259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 1262