| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/virtual_keyboard_controller.h" | 5 #include "ash/virtual_keyboard_controller.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
| 10 #include "ash/system/chromeos/virtual_keyboard/virtual_keyboard_observer.h" | 10 #include "ash/system/chromeos/virtual_keyboard/virtual_keyboard_observer.h" |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 EXPECT_FALSE(keyboard::IsKeyboardEnabled()); | 77 EXPECT_FALSE(keyboard::IsKeyboardEnabled()); |
| 78 } | 78 } |
| 79 | 79 |
| 80 // Mock event blocker that enables the internal keyboard when it's destructor | 80 // Mock event blocker that enables the internal keyboard when it's destructor |
| 81 // is called. | 81 // is called. |
| 82 class MockEventBlocker : public ScopedDisableInternalMouseAndKeyboard { | 82 class MockEventBlocker : public ScopedDisableInternalMouseAndKeyboard { |
| 83 public: | 83 public: |
| 84 MockEventBlocker() {} | 84 MockEventBlocker() {} |
| 85 ~MockEventBlocker() override { | 85 ~MockEventBlocker() override { |
| 86 std::vector<ui::KeyboardDevice> keyboards; | 86 std::vector<ui::KeyboardDevice> keyboards; |
| 87 keyboards.push_back(ui::KeyboardDevice( | 87 keyboards.push_back( |
| 88 1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL, "keyboard")); | 88 ui::KeyboardDevice(1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL)); |
| 89 ui::DeviceHotplugEventObserver* manager = | 89 ui::DeviceHotplugEventObserver* manager = |
| 90 ui::DeviceDataManager::GetInstance(); | 90 ui::DeviceDataManager::GetInstance(); |
| 91 manager->OnKeyboardDevicesUpdated(keyboards); | 91 manager->OnKeyboardDevicesUpdated(keyboards); |
| 92 } | 92 } |
| 93 | 93 |
| 94 private: | 94 private: |
| 95 DISALLOW_COPY_AND_ASSIGN(MockEventBlocker); | 95 DISALLOW_COPY_AND_ASSIGN(MockEventBlocker); |
| 96 }; | 96 }; |
| 97 | 97 |
| 98 // Tests that reenabling keyboard devices while shutting down does not | 98 // Tests that reenabling keyboard devices while shutting down does not |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 // Whether the keeyboard is suppressed. | 150 // Whether the keeyboard is suppressed. |
| 151 bool suppressed_; | 151 bool suppressed_; |
| 152 | 152 |
| 153 DISALLOW_COPY_AND_ASSIGN(VirtualKeyboardControllerAutoTest); | 153 DISALLOW_COPY_AND_ASSIGN(VirtualKeyboardControllerAutoTest); |
| 154 }; | 154 }; |
| 155 | 155 |
| 156 // Tests that the onscreen keyboard is disabled if an internal keyboard is | 156 // Tests that the onscreen keyboard is disabled if an internal keyboard is |
| 157 // present. | 157 // present. |
| 158 TEST_F(VirtualKeyboardControllerAutoTest, DisabledIfInternalKeyboardPresent) { | 158 TEST_F(VirtualKeyboardControllerAutoTest, DisabledIfInternalKeyboardPresent) { |
| 159 std::vector<ui::TouchscreenDevice> screens; | 159 std::vector<ui::TouchscreenDevice> screens; |
| 160 screens.push_back( | 160 screens.push_back(ui::TouchscreenDevice( |
| 161 ui::TouchscreenDevice(1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL, | 161 1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL, gfx::Size(1024, 768), 0)); |
| 162 "Touchscreen", gfx::Size(1024, 768), 0)); | |
| 163 UpdateTouchscreenDevices(screens); | 162 UpdateTouchscreenDevices(screens); |
| 164 std::vector<ui::KeyboardDevice> keyboards; | 163 std::vector<ui::KeyboardDevice> keyboards; |
| 165 keyboards.push_back(ui::KeyboardDevice( | 164 keyboards.push_back( |
| 166 1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL, "keyboard")); | 165 ui::KeyboardDevice(1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL)); |
| 167 UpdateKeyboardDevices(keyboards); | 166 UpdateKeyboardDevices(keyboards); |
| 168 ASSERT_FALSE(keyboard::IsKeyboardEnabled()); | 167 ASSERT_FALSE(keyboard::IsKeyboardEnabled()); |
| 169 // Remove the internal keyboard. Virtual keyboard should now show. | 168 // Remove the internal keyboard. Virtual keyboard should now show. |
| 170 UpdateKeyboardDevices(std::vector<ui::KeyboardDevice>()); | 169 UpdateKeyboardDevices(std::vector<ui::KeyboardDevice>()); |
| 171 EXPECT_TRUE(keyboard::IsKeyboardEnabled()); | 170 EXPECT_TRUE(keyboard::IsKeyboardEnabled()); |
| 172 // Replug in the internal keyboard. Virtual keyboard should hide. | 171 // Replug in the internal keyboard. Virtual keyboard should hide. |
| 173 UpdateKeyboardDevices(keyboards); | 172 UpdateKeyboardDevices(keyboards); |
| 174 EXPECT_FALSE(keyboard::IsKeyboardEnabled()); | 173 EXPECT_FALSE(keyboard::IsKeyboardEnabled()); |
| 175 } | 174 } |
| 176 | 175 |
| 177 TEST_F(VirtualKeyboardControllerAutoTest, DisabledIfNoTouchScreen) { | 176 TEST_F(VirtualKeyboardControllerAutoTest, DisabledIfNoTouchScreen) { |
| 178 std::vector<ui::TouchscreenDevice> devices; | 177 std::vector<ui::TouchscreenDevice> devices; |
| 179 // Add a touchscreen. Keyboard should deploy. | 178 // Add a touchscreen. Keyboard should deploy. |
| 180 devices.push_back( | 179 devices.push_back(ui::TouchscreenDevice( |
| 181 ui::TouchscreenDevice(1, ui::InputDeviceType::INPUT_DEVICE_EXTERNAL, | 180 1, ui::InputDeviceType::INPUT_DEVICE_EXTERNAL, gfx::Size(800, 600), 0)); |
| 182 "Touchscreen", gfx::Size(800, 600), 0)); | |
| 183 UpdateTouchscreenDevices(devices); | 181 UpdateTouchscreenDevices(devices); |
| 184 EXPECT_TRUE(keyboard::IsKeyboardEnabled()); | 182 EXPECT_TRUE(keyboard::IsKeyboardEnabled()); |
| 185 // Remove touchscreen. Keyboard should hide. | 183 // Remove touchscreen. Keyboard should hide. |
| 186 UpdateTouchscreenDevices(std::vector<ui::TouchscreenDevice>()); | 184 UpdateTouchscreenDevices(std::vector<ui::TouchscreenDevice>()); |
| 187 EXPECT_FALSE(keyboard::IsKeyboardEnabled()); | 185 EXPECT_FALSE(keyboard::IsKeyboardEnabled()); |
| 188 } | 186 } |
| 189 | 187 |
| 190 TEST_F(VirtualKeyboardControllerAutoTest, SuppressedIfExternalKeyboardPresent) { | 188 TEST_F(VirtualKeyboardControllerAutoTest, SuppressedIfExternalKeyboardPresent) { |
| 191 std::vector<ui::TouchscreenDevice> screens; | 189 std::vector<ui::TouchscreenDevice> screens; |
| 192 screens.push_back( | 190 screens.push_back(ui::TouchscreenDevice( |
| 193 ui::TouchscreenDevice(1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL, | 191 1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL, gfx::Size(1024, 768), 0)); |
| 194 "Touchscreen", gfx::Size(1024, 768), 0)); | |
| 195 UpdateTouchscreenDevices(screens); | 192 UpdateTouchscreenDevices(screens); |
| 196 std::vector<ui::KeyboardDevice> keyboards; | 193 std::vector<ui::KeyboardDevice> keyboards; |
| 197 keyboards.push_back(ui::KeyboardDevice( | 194 keyboards.push_back( |
| 198 1, ui::InputDeviceType::INPUT_DEVICE_EXTERNAL, "keyboard")); | 195 ui::KeyboardDevice(1, ui::InputDeviceType::INPUT_DEVICE_EXTERNAL)); |
| 199 UpdateKeyboardDevices(keyboards); | 196 UpdateKeyboardDevices(keyboards); |
| 200 ASSERT_FALSE(keyboard::IsKeyboardEnabled()); | 197 ASSERT_FALSE(keyboard::IsKeyboardEnabled()); |
| 201 ASSERT_TRUE(notified()); | 198 ASSERT_TRUE(notified()); |
| 202 ASSERT_TRUE(IsVirtualKeyboardSuppressed()); | 199 ASSERT_TRUE(IsVirtualKeyboardSuppressed()); |
| 203 // Toggle show keyboard. Keyboard should be visible. | 200 // Toggle show keyboard. Keyboard should be visible. |
| 204 ResetObserver(); | 201 ResetObserver(); |
| 205 Shell::GetInstance() | 202 Shell::GetInstance() |
| 206 ->virtual_keyboard_controller() | 203 ->virtual_keyboard_controller() |
| 207 ->ToggleIgnoreExternalKeyboard(); | 204 ->ToggleIgnoreExternalKeyboard(); |
| 208 ASSERT_TRUE(keyboard::IsKeyboardEnabled()); | 205 ASSERT_TRUE(keyboard::IsKeyboardEnabled()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 221 ResetObserver(); | 218 ResetObserver(); |
| 222 UpdateKeyboardDevices(std::vector<ui::KeyboardDevice>()); | 219 UpdateKeyboardDevices(std::vector<ui::KeyboardDevice>()); |
| 223 ASSERT_TRUE(keyboard::IsKeyboardEnabled()); | 220 ASSERT_TRUE(keyboard::IsKeyboardEnabled()); |
| 224 ASSERT_TRUE(notified()); | 221 ASSERT_TRUE(notified()); |
| 225 ASSERT_FALSE(IsVirtualKeyboardSuppressed()); | 222 ASSERT_FALSE(IsVirtualKeyboardSuppressed()); |
| 226 } | 223 } |
| 227 | 224 |
| 228 // Tests handling multiple keyboards. Catches crbug.com/430252 | 225 // Tests handling multiple keyboards. Catches crbug.com/430252 |
| 229 TEST_F(VirtualKeyboardControllerAutoTest, HandleMultipleKeyboardsPresent) { | 226 TEST_F(VirtualKeyboardControllerAutoTest, HandleMultipleKeyboardsPresent) { |
| 230 std::vector<ui::KeyboardDevice> keyboards; | 227 std::vector<ui::KeyboardDevice> keyboards; |
| 231 keyboards.push_back(ui::KeyboardDevice( | 228 keyboards.push_back( |
| 232 1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL, "keyboard")); | 229 ui::KeyboardDevice(1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL)); |
| 233 keyboards.push_back(ui::KeyboardDevice( | 230 keyboards.push_back( |
| 234 2, ui::InputDeviceType::INPUT_DEVICE_EXTERNAL, "keyboard")); | 231 ui::KeyboardDevice(2, ui::InputDeviceType::INPUT_DEVICE_EXTERNAL)); |
| 235 keyboards.push_back(ui::KeyboardDevice( | 232 keyboards.push_back( |
| 236 3, ui::InputDeviceType::INPUT_DEVICE_EXTERNAL, "keyboard")); | 233 ui::KeyboardDevice(3, ui::InputDeviceType::INPUT_DEVICE_EXTERNAL)); |
| 237 UpdateKeyboardDevices(keyboards); | 234 UpdateKeyboardDevices(keyboards); |
| 238 ASSERT_FALSE(keyboard::IsKeyboardEnabled()); | 235 ASSERT_FALSE(keyboard::IsKeyboardEnabled()); |
| 239 } | 236 } |
| 240 | 237 |
| 241 class VirtualKeyboardControllerAlwaysEnabledTest | 238 class VirtualKeyboardControllerAlwaysEnabledTest |
| 242 : public VirtualKeyboardControllerAutoTest { | 239 : public VirtualKeyboardControllerAutoTest { |
| 243 public: | 240 public: |
| 244 VirtualKeyboardControllerAlwaysEnabledTest() | 241 VirtualKeyboardControllerAlwaysEnabledTest() |
| 245 : VirtualKeyboardControllerAutoTest() {} | 242 : VirtualKeyboardControllerAutoTest() {} |
| 246 ~VirtualKeyboardControllerAlwaysEnabledTest() override {} | 243 ~VirtualKeyboardControllerAlwaysEnabledTest() override {} |
| 247 | 244 |
| 248 void SetUp() override { | 245 void SetUp() override { |
| 249 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 246 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 250 keyboard::switches::kEnableVirtualKeyboard); | 247 keyboard::switches::kEnableVirtualKeyboard); |
| 251 VirtualKeyboardControllerAutoTest::SetUp(); | 248 VirtualKeyboardControllerAutoTest::SetUp(); |
| 252 } | 249 } |
| 253 | 250 |
| 254 private: | 251 private: |
| 255 DISALLOW_COPY_AND_ASSIGN(VirtualKeyboardControllerAlwaysEnabledTest); | 252 DISALLOW_COPY_AND_ASSIGN(VirtualKeyboardControllerAlwaysEnabledTest); |
| 256 }; | 253 }; |
| 257 | 254 |
| 258 // Tests that the controller cannot suppress the keyboard if the virtual | 255 // Tests that the controller cannot suppress the keyboard if the virtual |
| 259 // keyboard always enabled flag is active. | 256 // keyboard always enabled flag is active. |
| 260 TEST_F(VirtualKeyboardControllerAlwaysEnabledTest, DoesNotSuppressKeyboard) { | 257 TEST_F(VirtualKeyboardControllerAlwaysEnabledTest, DoesNotSuppressKeyboard) { |
| 261 std::vector<ui::TouchscreenDevice> screens; | 258 std::vector<ui::TouchscreenDevice> screens; |
| 262 screens.push_back( | 259 screens.push_back(ui::TouchscreenDevice( |
| 263 ui::TouchscreenDevice(1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL, | 260 1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL, gfx::Size(1024, 768), 0)); |
| 264 "Touchscreen", gfx::Size(1024, 768), 0)); | |
| 265 UpdateTouchscreenDevices(screens); | 261 UpdateTouchscreenDevices(screens); |
| 266 std::vector<ui::KeyboardDevice> keyboards; | 262 std::vector<ui::KeyboardDevice> keyboards; |
| 267 keyboards.push_back(ui::KeyboardDevice( | 263 keyboards.push_back( |
| 268 1, ui::InputDeviceType::INPUT_DEVICE_EXTERNAL, "keyboard")); | 264 ui::KeyboardDevice(1, ui::InputDeviceType::INPUT_DEVICE_EXTERNAL)); |
| 269 UpdateKeyboardDevices(keyboards); | 265 UpdateKeyboardDevices(keyboards); |
| 270 ASSERT_TRUE(keyboard::IsKeyboardEnabled()); | 266 ASSERT_TRUE(keyboard::IsKeyboardEnabled()); |
| 271 } | 267 } |
| 272 | 268 |
| 273 } // namespace test | 269 } // namespace test |
| 274 } // namespace ash | 270 } // namespace ash |
| OLD | NEW |