Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(718)

Unified Diff: ash/root_window_controller_unittest.cc

Issue 2445293002: Make the virtual keyboard show up on the display with input focus. (Closed)
Patch Set: address the comments Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/mus/keyboard_ui_mus.cc ('k') | ash/shell.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/root_window_controller_unittest.cc
diff --git a/ash/root_window_controller_unittest.cc b/ash/root_window_controller_unittest.cc
index 6c00bb92adaba65098f556652f63cdcf3ad964e4..490cc0a9b117139b525800f0762ae9fc84b5baf1 100644
--- a/ash/root_window_controller_unittest.cc
+++ b/ash/root_window_controller_unittest.cc
@@ -37,6 +37,9 @@
#include "ui/base/ime/input_method.h"
#include "ui/base/ime/text_input_client.h"
#include "ui/display/manager/display_manager.h"
+#include "ui/display/test/display_manager_test_api.h"
+#include "ui/events/devices/device_data_manager.h"
+#include "ui/events/devices/touchscreen_device.h"
#include "ui/events/test/event_generator.h"
#include "ui/events/test/test_event_handler.h"
#include "ui/keyboard/keyboard_controller.h"
@@ -703,8 +706,13 @@ class VirtualKeyboardRootWindowControllerTest
base::CommandLine::ForCurrentProcess()->AppendSwitch(
keyboard::switches::kEnableVirtualKeyboard);
test::AshTestBase::SetUp();
- Shell::GetPrimaryRootWindowController()->ActivateKeyboard(
- keyboard::KeyboardController::GetInstance());
+ keyboard::SetTouchKeyboardEnabled(true);
+ Shell::GetInstance()->CreateKeyboard();
+ }
+
+ void TearDown() override {
+ keyboard::SetTouchKeyboardEnabled(false);
+ test::AshTestBase::TearDown();
}
private:
@@ -743,9 +751,9 @@ class TargetHitTestEventHandler : public ui::test::TestEventHandler {
};
// Test for http://crbug.com/297858. Virtual keyboard container should only show
-// on primary root window.
+// on primary root window if no window has touch capability.
TEST_F(VirtualKeyboardRootWindowControllerTest,
- VirtualKeyboardOnPrimaryRootWindowOnly) {
+ VirtualKeyboardOnPrimaryRootWindowDefault) {
if (!SupportsMultipleDisplays())
return;
@@ -763,6 +771,162 @@ TEST_F(VirtualKeyboardRootWindowControllerTest,
kShellWindowId_VirtualKeyboardContainer));
}
+// Test for http://crbug.com/303429. Virtual keyboard container should show on
+// a display which has touch capability.
+TEST_F(VirtualKeyboardRootWindowControllerTest,
+ VirtualKeyboardOnTouchableDisplayOnly) {
+ if (!SupportsMultipleDisplays())
+ return;
+
+ UpdateDisplay("500x500,500x500");
+ display::Display secondary_display =
+ Shell::GetInstance()->display_manager()->GetSecondaryDisplay();
+ display::test::DisplayManagerTestApi(Shell::GetInstance()->display_manager())
+ .SetTouchSupport(secondary_display.id(),
+ display::Display::TouchSupport::TOUCH_SUPPORT_AVAILABLE);
+
+ // The primary display doesn't have touch capability and the secondary display
+ // does.
+ ASSERT_NE(display::Display::TouchSupport::TOUCH_SUPPORT_AVAILABLE,
+ display::Screen::GetScreen()->GetPrimaryDisplay().touch_support());
+ ASSERT_EQ(display::Display::TouchSupport::TOUCH_SUPPORT_AVAILABLE,
+ Shell::GetInstance()
+ ->display_manager()
+ ->GetSecondaryDisplay()
+ .touch_support());
+
+ aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+ aura::Window* primary_root_window = Shell::GetPrimaryRootWindow();
+ aura::Window* secondary_root_window = root_windows[0] == primary_root_window
+ ? root_windows[1]
+ : root_windows[0];
+
+ keyboard::KeyboardController::GetInstance()->ShowKeyboard(false);
+ ASSERT_FALSE(Shell::GetContainer(primary_root_window,
+ kShellWindowId_VirtualKeyboardContainer));
+ ASSERT_TRUE(Shell::GetContainer(secondary_root_window,
+ kShellWindowId_VirtualKeyboardContainer));
+
+ // Move the focus to the primary display.
+ aura::Window* focusable_window_in_primary_display =
+ CreateTestWindowInShellWithBounds(
+ primary_root_window->GetBoundsInScreen());
+ ASSERT_EQ(primary_root_window,
+ focusable_window_in_primary_display->GetRootWindow());
+ focusable_window_in_primary_display->Focus();
+ ASSERT_TRUE(focusable_window_in_primary_display->HasFocus());
+
+ // Virtual keyboard shows up on the secondary display even if a window in the
+ // primary screen has the focus.
+ keyboard::KeyboardController::GetInstance()->ShowKeyboard(false);
+ ASSERT_FALSE(Shell::GetContainer(primary_root_window,
oshima 2016/11/16 22:05:02 nit: EXPECT_
yhanada 2016/11/16 22:22:10 Done.
+ kShellWindowId_VirtualKeyboardContainer));
+ ASSERT_TRUE(Shell::GetContainer(secondary_root_window,
+ kShellWindowId_VirtualKeyboardContainer));
oshima 2016/11/16 22:05:02 ditto
yhanada 2016/11/16 22:22:10 Done.
+}
+
+// Test for http://crbug.com/303429. If both of displays have touch capability,
+// virtual keyboard follows the input focus.
+TEST_F(VirtualKeyboardRootWindowControllerTest, FollowInputFocus) {
+ if (!SupportsMultipleDisplays())
+ return;
+
+ UpdateDisplay("500x500,500x500");
+ const int64_t primary_display_id =
+ display::Screen::GetScreen()->GetPrimaryDisplay().id();
+ display::test::DisplayManagerTestApi(Shell::GetInstance()->display_manager())
+ .SetTouchSupport(primary_display_id,
+ display::Display::TouchSupport::TOUCH_SUPPORT_AVAILABLE);
+ const int64_t secondary_display_id =
+ Shell::GetInstance()->display_manager()->GetSecondaryDisplay().id();
+ display::test::DisplayManagerTestApi(Shell::GetInstance()->display_manager())
+ .SetTouchSupport(secondary_display_id,
+ display::Display::TouchSupport::TOUCH_SUPPORT_AVAILABLE);
+
+ // Both of displays have touch capability.
+ ASSERT_EQ(display::Display::TouchSupport::TOUCH_SUPPORT_AVAILABLE,
+ display::Screen::GetScreen()->GetPrimaryDisplay().touch_support());
+ ASSERT_EQ(display::Display::TouchSupport::TOUCH_SUPPORT_AVAILABLE,
+ Shell::GetInstance()
+ ->display_manager()
+ ->GetSecondaryDisplay()
+ .touch_support());
+
+ aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+ aura::Window* primary_root_window = Shell::GetPrimaryRootWindow();
+ aura::Window* secondary_root_window = root_windows[0] == primary_root_window
+ ? root_windows[1]
+ : root_windows[0];
+ aura::Window* focusable_window_in_primary_display =
+ CreateTestWindowInShellWithBounds(
+ primary_root_window->GetBoundsInScreen());
+ ASSERT_EQ(primary_root_window,
+ focusable_window_in_primary_display->GetRootWindow());
+ aura::Window* focusable_window_in_secondary_display =
+ CreateTestWindowInShellWithBounds(
+ secondary_root_window->GetBoundsInScreen());
+ ASSERT_EQ(secondary_root_window,
+ focusable_window_in_secondary_display->GetRootWindow());
+
+ keyboard::KeyboardController::GetInstance()->ShowKeyboard(false);
+ ASSERT_TRUE(Shell::GetContainer(primary_root_window,
+ kShellWindowId_VirtualKeyboardContainer));
oshima 2016/11/16 22:05:02 ditto
yhanada 2016/11/16 22:22:10 Done.
+ ASSERT_FALSE(Shell::GetContainer(secondary_root_window,
+ kShellWindowId_VirtualKeyboardContainer));
oshima 2016/11/16 22:05:02 ditto
yhanada 2016/11/16 22:22:10 Done.
+
+ // Move the focus to the secondary display.
+ focusable_window_in_secondary_display->Focus();
+ ASSERT_TRUE(focusable_window_in_secondary_display->HasFocus());
+
+ keyboard::KeyboardController::GetInstance()->ShowKeyboard(false);
+ ASSERT_FALSE(Shell::GetContainer(primary_root_window,
+ kShellWindowId_VirtualKeyboardContainer));
+ ASSERT_TRUE(Shell::GetContainer(secondary_root_window,
+ kShellWindowId_VirtualKeyboardContainer));
+
+ // Move back focus to the primary display.
+ focusable_window_in_primary_display->Focus();
+ ASSERT_TRUE(focusable_window_in_primary_display->HasFocus());
+
+ keyboard::KeyboardController::GetInstance()->ShowKeyboard(false);
+ ASSERT_TRUE(Shell::GetContainer(primary_root_window,
+ kShellWindowId_VirtualKeyboardContainer));
oshima 2016/11/16 22:05:02 ditto
yhanada 2016/11/16 22:22:10 Done.
+ ASSERT_FALSE(Shell::GetContainer(secondary_root_window,
+ kShellWindowId_VirtualKeyboardContainer));
oshima 2016/11/16 22:05:02 ditto
yhanada 2016/11/16 22:22:10 Done.
+}
+
+// Test for http://crbug.com/303429. Even if both of display don't have touch
+// capability, the virtual keyboard shows up on the specified display.
+TEST_F(VirtualKeyboardRootWindowControllerTest,
+ VirtualKeyboardShowOnSpecifiedDisplay) {
+ if (!SupportsMultipleDisplays())
+ return;
+
+ UpdateDisplay("500x500,500x500");
+ display::Display secondary_display =
+ Shell::GetInstance()->display_manager()->GetSecondaryDisplay();
+
+ aura::Window::Windows root_windows = Shell::GetAllRootWindows();
+ aura::Window* primary_root_window = Shell::GetPrimaryRootWindow();
+ aura::Window* secondary_root_window = root_windows[0] == primary_root_window
+ ? root_windows[1]
+ : root_windows[0];
+
+ ASSERT_TRUE(Shell::GetContainer(primary_root_window,
+ kShellWindowId_VirtualKeyboardContainer));
+ ASSERT_FALSE(Shell::GetContainer(secondary_root_window,
+ kShellWindowId_VirtualKeyboardContainer));
+
+ const int64_t secondary_display_id = secondary_display.id();
+ keyboard::KeyboardController::GetInstance()->ShowKeyboardInDisplay(
+ secondary_display_id);
+
+ ASSERT_FALSE(Shell::GetContainer(primary_root_window,
+ kShellWindowId_VirtualKeyboardContainer));
oshima 2016/11/16 22:05:02 dotto
yhanada 2016/11/16 22:22:10 Done.
+ ASSERT_TRUE(Shell::GetContainer(secondary_root_window,
+ kShellWindowId_VirtualKeyboardContainer));
oshima 2016/11/16 22:05:02 ditto
yhanada 2016/11/16 22:22:10 Done.
+}
+
// Test for http://crbug.com/263599. Virtual keyboard should be able to receive
// events at blocked user session.
TEST_F(VirtualKeyboardRootWindowControllerTest,
« no previous file with comments | « ash/mus/keyboard_ui_mus.cc ('k') | ash/shell.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698