Index: ash/root_window_controller_unittest.cc |
diff --git a/ash/root_window_controller_unittest.cc b/ash/root_window_controller_unittest.cc |
index 3edd28013e160131fde6d374312f1c40f5da724c..191ad379ad1c379e64463c714e93f28e853519dd 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 @@ class VirtualKeyboardRootWindowControllerTest : public RootWindowControllerTest |
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 @@ TEST_F(VirtualKeyboardRootWindowControllerTest, ClickWithActiveModalDialog) { |
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 |