Index: ui/keyboard/keyboard_controller_unittest.cc |
diff --git a/ui/keyboard/keyboard_controller_unittest.cc b/ui/keyboard/keyboard_controller_unittest.cc |
index 38094cebddd706ca9ccd7c90c40656fef62a5f9b..52d7608b831bcbfe036f6db9860d069cfd7e2afd 100644 |
--- a/ui/keyboard/keyboard_controller_unittest.cc |
+++ b/ui/keyboard/keyboard_controller_unittest.cc |
@@ -37,6 +37,13 @@ |
namespace keyboard { |
namespace { |
+// Verify if the |keyboard| window covers the |container| window completely. |
+void VerifyKeyboardWindowSize(aura::Window* container, aura::Window* keyboard) { |
+ ASSERT_EQ(gfx::Rect(0, 0, container->bounds().width(), |
+ container->bounds().height()), |
+ keyboard->bounds()); |
+} |
+ |
// Steps a layer animation until it is completed. Animations must be enabled. |
void RunAnimationForLayer(ui::Layer* layer) { |
// Animations must be enabled for stepping to work. |
@@ -201,6 +208,15 @@ class KeyboardControllerTest : public testing::Test { |
SetFocus(test_text_input_client_.get()); |
} |
+ void MockRotateScreen() { |
+ const gfx::Rect root_bounds = root_window()->bounds(); |
+ controller_->OnWindowBoundsChanged(root_window(), gfx::Rect(), |
+ gfx::Rect(0, |
+ 0, |
+ root_bounds.height(), |
+ root_bounds.width())); |
+ } |
+ |
protected: |
void SetFocus(ui::TextInputClient* client) { |
ui::InputMethod* input_method = proxy()->GetInputMethod(); |
@@ -215,8 +231,8 @@ class KeyboardControllerTest : public testing::Test { |
if (proxy_->GetKeyboardWindow()->bounds().height() == 0) { |
// Set initial bounds for test keyboard window. |
proxy_->GetKeyboardWindow()->SetBounds( |
- KeyboardBoundsFromWindowBounds( |
- controller()->GetContainerWindow()->bounds(), 100)); |
+ FullWidthKeyboardBoundsFromRootBounds(root_window()->bounds(), |
+ 100)); |
} |
} |
} |
@@ -243,26 +259,50 @@ class KeyboardControllerTest : public testing::Test { |
TEST_F(KeyboardControllerTest, KeyboardSize) { |
aura::Window* container(controller()->GetContainerWindow()); |
aura::Window* keyboard(proxy()->GetKeyboardWindow()); |
- container->SetBounds(gfx::Rect(0, 0, 200, 100)); |
- |
+ gfx::Rect screen_bounds = root_window()->bounds(); |
+ root_window()->AddChild(container); |
container->AddChild(keyboard); |
- const gfx::Rect& before_bounds = keyboard->bounds(); |
- // The initial keyboard should be positioned at the bottom of container and |
- // has 0 height. |
- ASSERT_EQ(gfx::Rect(0, 100, 200, 0), before_bounds); |
+ const gfx::Rect& initial_bounds = container->bounds(); |
+ // The container should be positioned at the bottom of screen and has 0 |
+ // height. |
+ ASSERT_EQ(gfx::Rect(), initial_bounds); |
+ VerifyKeyboardWindowSize(container, keyboard); |
- gfx::Rect new_bounds( |
- before_bounds.x(), before_bounds.y() - 50, |
- before_bounds.width(), 50); |
+ gfx::Rect new_bounds(0, 0, 50, 50); |
+ |
+ // In FULL_WIDTH mode, attempt to change window width or move window up from |
+ // the bottom are ignored. Changing window height is supported. |
+ gfx::Rect expected_bounds(0, |
+ screen_bounds.height() - 50, |
+ screen_bounds.width(), |
+ 50); |
keyboard->SetBounds(new_bounds); |
- ASSERT_EQ(new_bounds, keyboard->bounds()); |
+ ASSERT_EQ(expected_bounds, container->bounds()); |
+ VerifyKeyboardWindowSize(container, keyboard); |
- // Mock a screen rotation. |
- container->SetBounds(gfx::Rect(0, 0, 100, 200)); |
+ MockRotateScreen(); |
// The above call should resize keyboard to new width while keeping the old |
// height. |
- ASSERT_EQ(gfx::Rect(0, 150, 100, 50), keyboard->bounds()); |
+ ASSERT_EQ(gfx::Rect(0, |
+ screen_bounds.width() - 50, |
+ screen_bounds.height(), |
+ 50), |
+ container->bounds()); |
+ VerifyKeyboardWindowSize(container, keyboard); |
+} |
+ |
+TEST_F(KeyboardControllerTest, FloatingKeyboardSize) { |
+ aura::Window* container(controller()->GetContainerWindow()); |
+ aura::Window* keyboard(proxy()->GetKeyboardWindow()); |
+ gfx::Rect screen_bounds = root_window()->bounds(); |
+ root_window()->AddChild(container); |
+ controller()->SetKeyboardMode(FLOATING); |
+ container->AddChild(keyboard); |
+ gfx::Rect new_bounds(0, 50, 50, 50); |
+ keyboard->SetBounds(new_bounds); |
+ ASSERT_EQ(new_bounds, container->bounds()); |
+ VerifyKeyboardWindowSize(container, keyboard); |
} |
// Tests that tapping/clicking inside the keyboard does not give it focus. |
@@ -277,7 +317,6 @@ TEST_F(KeyboardControllerTest, ClickDoesNotFocusKeyboard) { |
window->Focus(); |
aura::Window* keyboard_container(controller()->GetContainerWindow()); |
- keyboard_container->SetBounds(root_bounds); |
root_window()->AddChild(keyboard_container); |
keyboard_container->Show(); |
@@ -295,7 +334,7 @@ TEST_F(KeyboardControllerTest, ClickDoesNotFocusKeyboard) { |
keyboard_container->AddPreTargetHandler(&observer); |
ui::test::EventGenerator generator(root_window()); |
- generator.MoveMouseTo(proxy()->GetKeyboardWindow()->bounds().CenterPoint()); |
+ generator.MoveMouseTo(keyboard_container->bounds().CenterPoint()); |
generator.ClickLeftButton(); |
EXPECT_TRUE(window->HasFocus()); |
EXPECT_FALSE(keyboard_container->HasFocus()); |
@@ -310,80 +349,7 @@ TEST_F(KeyboardControllerTest, ClickDoesNotFocusKeyboard) { |
keyboard_container->RemovePreTargetHandler(&observer); |
} |
-TEST_F(KeyboardControllerTest, EventHitTestingInContainer) { |
- const gfx::Rect& root_bounds = root_window()->bounds(); |
- aura::test::EventCountDelegate delegate; |
- scoped_ptr<aura::Window> window(new aura::Window(&delegate)); |
- window->Init(ui::LAYER_NOT_DRAWN); |
- window->SetBounds(root_bounds); |
- root_window()->AddChild(window.get()); |
- window->Show(); |
- window->Focus(); |
- |
- aura::Window* keyboard_container(controller()->GetContainerWindow()); |
- keyboard_container->SetBounds(root_bounds); |
- |
- root_window()->AddChild(keyboard_container); |
- keyboard_container->Show(); |
- |
- ShowKeyboard(); |
- |
- EXPECT_TRUE(window->IsVisible()); |
- EXPECT_TRUE(keyboard_container->IsVisible()); |
- EXPECT_TRUE(window->HasFocus()); |
- EXPECT_FALSE(keyboard_container->HasFocus()); |
- |
- // Make sure hit testing works correctly while the keyboard is visible. |
- aura::Window* keyboard_window = proxy()->GetKeyboardWindow(); |
- ui::EventTarget* root = root_window(); |
- ui::EventTargeter* targeter = root->GetEventTargeter(); |
- gfx::Point location = keyboard_window->bounds().CenterPoint(); |
- ui::MouseEvent mouse1(ui::ET_MOUSE_MOVED, location, location, |
- ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE); |
- EXPECT_EQ(keyboard_window, targeter->FindTargetForEvent(root, &mouse1)); |
- |
- location.set_y(keyboard_window->bounds().y() - 5); |
- ui::MouseEvent mouse2(ui::ET_MOUSE_MOVED, location, location, |
- ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE); |
- EXPECT_EQ(window.get(), targeter->FindTargetForEvent(root, &mouse2)); |
-} |
- |
-TEST_F(KeyboardControllerTest, KeyboardWindowCreation) { |
- const gfx::Rect& root_bounds = root_window()->bounds(); |
- aura::test::EventCountDelegate delegate; |
- scoped_ptr<aura::Window> window(new aura::Window(&delegate)); |
- window->Init(ui::LAYER_NOT_DRAWN); |
- window->SetBounds(root_bounds); |
- root_window()->AddChild(window.get()); |
- window->Show(); |
- window->Focus(); |
- |
- aura::Window* keyboard_container(controller()->GetContainerWindow()); |
- keyboard_container->SetBounds(root_bounds); |
- |
- root_window()->AddChild(keyboard_container); |
- keyboard_container->Show(); |
- |
- EXPECT_FALSE(proxy()->HasKeyboardWindow()); |
- |
- ui::EventTarget* root = root_window(); |
- ui::EventTargeter* targeter = root->GetEventTargeter(); |
- gfx::Point location(root_window()->bounds().width() / 2, |
- root_window()->bounds().height() - 10); |
- ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, location, location, |
- ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE); |
- EXPECT_EQ(window.get(), targeter->FindTargetForEvent(root, &mouse)); |
- EXPECT_FALSE(proxy()->HasKeyboardWindow()); |
- |
- EXPECT_EQ( |
- controller()->GetContainerWindow(), |
- controller()->GetContainerWindow()->GetEventHandlerForPoint(location)); |
- EXPECT_FALSE(proxy()->HasKeyboardWindow()); |
-} |
- |
TEST_F(KeyboardControllerTest, VisibilityChangeWithTextInputTypeChange) { |
- const gfx::Rect& root_bounds = root_window()->bounds(); |
- |
ui::DummyTextInputClient input_client_0(ui::TEXT_INPUT_TYPE_TEXT); |
ui::DummyTextInputClient input_client_1(ui::TEXT_INPUT_TYPE_TEXT); |
ui::DummyTextInputClient input_client_2(ui::TEXT_INPUT_TYPE_TEXT); |
@@ -393,7 +359,6 @@ TEST_F(KeyboardControllerTest, VisibilityChangeWithTextInputTypeChange) { |
aura::Window* keyboard_container(controller()->GetContainerWindow()); |
scoped_ptr<KeyboardContainerObserver> keyboard_container_observer( |
new KeyboardContainerObserver(keyboard_container)); |
- keyboard_container->SetBounds(root_bounds); |
root_window()->AddChild(keyboard_container); |
SetFocus(&input_client_0); |
@@ -425,13 +390,10 @@ TEST_F(KeyboardControllerTest, VisibilityChangeWithTextInputTypeChange) { |
// Test to prevent spurious overscroll boxes when changing tabs during keyboard |
// hide. Refer to crbug.com/401670 for more context. |
TEST_F(KeyboardControllerTest, CheckOverscrollInsetDuringVisibilityChange) { |
- const gfx::Rect& root_bounds = root_window()->bounds(); |
- |
ui::DummyTextInputClient input_client(ui::TEXT_INPUT_TYPE_TEXT); |
ui::DummyTextInputClient no_input_client(ui::TEXT_INPUT_TYPE_NONE); |
aura::Window* keyboard_container(controller()->GetContainerWindow()); |
- keyboard_container->SetBounds(root_bounds); |
root_window()->AddChild(keyboard_container); |
// Enable touch keyboard / overscroll mode to test insets. |
@@ -450,8 +412,6 @@ TEST_F(KeyboardControllerTest, CheckOverscrollInsetDuringVisibilityChange) { |
} |
TEST_F(KeyboardControllerTest, AlwaysVisibleWhenLocked) { |
- const gfx::Rect& root_bounds = root_window()->bounds(); |
- |
ui::DummyTextInputClient input_client_0(ui::TEXT_INPUT_TYPE_TEXT); |
ui::DummyTextInputClient input_client_1(ui::TEXT_INPUT_TYPE_TEXT); |
ui::DummyTextInputClient no_input_client_0(ui::TEXT_INPUT_TYPE_NONE); |
@@ -460,7 +420,6 @@ TEST_F(KeyboardControllerTest, AlwaysVisibleWhenLocked) { |
aura::Window* keyboard_container(controller()->GetContainerWindow()); |
scoped_ptr<KeyboardContainerObserver> keyboard_container_observer( |
new KeyboardContainerObserver(keyboard_container)); |
- keyboard_container->SetBounds(root_bounds); |
root_window()->AddChild(keyboard_container); |
SetFocus(&input_client_0); |
@@ -557,9 +516,9 @@ TEST_F(KeyboardControllerAnimationTest, ContainerAnimation) { |
float show_end_opacity = layer->opacity(); |
EXPECT_LT(show_start_opacity, show_end_opacity); |
EXPECT_EQ(gfx::Transform(), layer->transform()); |
- // KeyboardController should notify the bounds of keyboard window to its |
+ // KeyboardController should notify the bounds of container window to its |
// observers after show animation finished. |
- EXPECT_EQ(keyboard_window()->bounds(), notified_bounds()); |
+ EXPECT_EQ(keyboard_container()->bounds(), notified_bounds()); |
// Directly hide keyboard without delay. |
controller()->HideKeyboard(KeyboardController::HIDE_REASON_AUTOMATIC); |