Fix calculation of usable area of screen when VK is shown.
First part of a 2-sided patch to fix scroll-into-view with VK overscroll.
BUG=370592
Review URL: https://codereview.chromium.org/276483002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@270092 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/ash/root_window_controller_unittest.cc b/ash/root_window_controller_unittest.cc
index 3edd2801..191ad379a 100644
--- a/ash/root_window_controller_unittest.cc
+++ b/ash/root_window_controller_unittest.cc
@@ -25,6 +25,9 @@
#include "ui/aura/window.h"
#include "ui/aura/window_event_dispatcher.h"
#include "ui/aura/window_tracker.h"
+#include "ui/base/ime/dummy_text_input_client.h"
+#include "ui/base/ime/input_method.h"
+#include "ui/base/ime/text_input_client.h"
#include "ui/events/test/test_event_handler.h"
#include "ui/keyboard/keyboard_controller_proxy.h"
#include "ui/keyboard/keyboard_switches.h"
@@ -616,6 +619,25 @@
DISALLOW_COPY_AND_ASSIGN(VirtualKeyboardRootWindowControllerTest);
};
+class MockTextInputClient : public ui::DummyTextInputClient {
+ public:
+ MockTextInputClient() :
+ ui::DummyTextInputClient(ui::TEXT_INPUT_TYPE_TEXT) {}
+
+ virtual void EnsureCaretInRect(const gfx::Rect& rect) OVERRIDE {
+ visible_rect_ = rect;
+ }
+
+ const gfx::Rect& visible_rect() const {
+ return visible_rect_;
+ }
+
+ private:
+ gfx::Rect visible_rect_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockTextInputClient);
+};
+
// Test for http://crbug.com/297858. Virtual keyboard container should only show
// on primary root window.
TEST_F(VirtualKeyboardRootWindowControllerTest,
@@ -766,5 +788,37 @@
root_window->RemovePreTargetHandler(&handler);
}
+// Ensure that the visible area for scrolling the text caret excludes the
+// region occluded by the on-screen keyboard.
+TEST_F(VirtualKeyboardRootWindowControllerTest, EnsureCaretInWorkArea) {
+ keyboard::KeyboardController* keyboard_controller =
+ keyboard::KeyboardController::GetInstance();
+ keyboard::KeyboardControllerProxy* proxy = keyboard_controller->proxy();
+
+ MockTextInputClient text_input_client;
+ ui::InputMethod* input_method = proxy->GetInputMethod();
+ ASSERT_TRUE(input_method);
+ input_method->SetFocusedTextInputClient(&text_input_client);
+
+ aura::Window* root_window = Shell::GetPrimaryRootWindow();
+ aura::Window* keyboard_container =
+ Shell::GetContainer(root_window, kShellWindowId_VirtualKeyboardContainer);
+ ASSERT_TRUE(keyboard_container);
+ keyboard_container->Show();
+
+ const int keyboard_height = 100;
+ aura::Window* keyboard_window =proxy->GetKeyboardWindow();
+ keyboard_container->AddChild(keyboard_window);
+ keyboard_window->set_owned_by_parent(false);
+ keyboard_window->SetBounds(keyboard::KeyboardBoundsFromWindowBounds(
+ keyboard_container->bounds(), keyboard_height));
+
+ proxy->EnsureCaretInWorkArea();
+ ASSERT_EQ(keyboard_container->bounds().width(),
+ text_input_client.visible_rect().width());
+ ASSERT_EQ(keyboard_container->bounds().height() - keyboard_height,
+ text_input_client.visible_rect().height());
+}
+
} // namespace test
} // namespace ash