Chromium Code Reviews| Index: ash/root_window_controller_unittest.cc |
| diff --git a/ash/root_window_controller_unittest.cc b/ash/root_window_controller_unittest.cc |
| index b27cc52ca1ad3b59c8b4a4b4de12a28e2b7e3c4d..48daee2af21ee7cf3149f7825d5c2f06e36502b7 100644 |
| --- a/ash/root_window_controller_unittest.cc |
| +++ b/ash/root_window_controller_unittest.cc |
| @@ -13,6 +13,7 @@ |
| #include "ash/wm/system_modal_container_layout_manager.h" |
| #include "ash/wm/window_properties.h" |
| #include "ash/wm/window_util.h" |
| +#include "base/command_line.h" |
| #include "ui/aura/client/focus_change_observer.h" |
| #include "ui/aura/client/focus_client.h" |
| #include "ui/aura/env.h" |
| @@ -22,6 +23,7 @@ |
| #include "ui/aura/test/test_windows.h" |
| #include "ui/aura/window.h" |
| #include "ui/aura/window_tracker.h" |
| +#include "ui/keyboard/keyboard_switches.h" |
| #include "ui/views/controls/menu/menu_controller.h" |
| #include "ui/views/widget/widget.h" |
| #include "ui/views/widget/widget_delegate.h" |
| @@ -80,6 +82,35 @@ class DeleteOnBlurDelegate : public aura::test::TestWindowDelegate, |
| DISALLOW_COPY_AND_ASSIGN(DeleteOnBlurDelegate); |
| }; |
| +class ClickTestWindow : public views::WidgetDelegateView { |
| + public: |
| + ClickTestWindow() : mouse_presses_(0) {} |
| + virtual ~ClickTestWindow() {} |
| + |
| + // Overridden from views::WidgetDelegate: |
| + virtual views::View* GetContentsView() OVERRIDE { |
| + return this; |
| + } |
| + |
| + aura::Window* CreateTestWindowWithParent(aura::Window* parent) { |
| + DCHECK(parent); |
| + views::Widget* widget = Widget::CreateWindowWithParent(this, parent); |
| + return widget->GetNativeView(); |
| + } |
| + |
| + // Overridden from views::View: |
| + virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE { |
| + mouse_presses_++; |
| + return false; |
| + } |
| + |
| + int mouse_presses() const { return mouse_presses_; } |
|
James Cook
2013/08/08 17:29:44
nit: blank line after this
bshe
2013/08/08 19:39:24
Done.
|
| + private: |
| + int mouse_presses_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ClickTestWindow); |
| +}; |
| + |
| } // namespace |
| namespace test { |
| @@ -473,5 +504,47 @@ TEST_F(RootWindowControllerTest, FocusBlockedWindow) { |
| } |
| } |
| +class VirtualKeyboardRootWindowControllerTest : public test::AshTestBase { |
| + public: |
| + virtual void SetUp() OVERRIDE { |
| + CommandLine::ForCurrentProcess()->AppendSwitch( |
| + keyboard::switches::kEnableVirtualKeyboard); |
| + test::AshTestBase::SetUp(); |
| + } |
|
oshima
2013/08/08 17:19:29
nit: DISALLOW_COPY_AND_ASSIGN
bshe
2013/08/08 19:37:02
Done.
|
| +}; |
| + |
| +// Test for http://crbug.com/263599. Virtual keyboard should be able to receive |
| +// events at blocked user session. |
| +TEST_F(VirtualKeyboardRootWindowControllerTest, |
| + ClickVirtualKeyboardInBlockedWindow) { |
| + UpdateDisplay("600x600"); |
|
oshima
2013/08/08 17:19:29
do you need to change the size of the display for
bshe
2013/08/08 19:37:02
No. I was just following the above example. It is
|
| + aura::RootWindow* root_window = Shell::GetInstance()->GetPrimaryRootWindow(); |
|
oshima
2013/08/08 17:19:29
GetPrimaryRootWindow is static
bshe
2013/08/08 19:37:02
Done.
|
| + aura::Window* vk_container = Shell::GetContainer(root_window, |
|
James Cook
2013/08/08 17:29:44
no abbreviations: vk_container -> keyboard_contain
bshe
2013/08/08 19:39:24
Done.
|
| + internal::kShellWindowId_VirtualKeyboardContainer); |
| + CHECK(vk_container); |
|
James Cook
2013/08/08 17:29:44
optional nit: ASSERT_TRUE ?
bshe
2013/08/08 19:39:24
Done.
|
| + vk_container->Show(); |
| + |
| + ClickTestWindow* main_delegate = new ClickTestWindow(); |
| + scoped_ptr<aura::Window> vk_window( |
|
James Cook
2013/08/08 17:29:44
vk_window -> keyboard_window or similar
bshe
2013/08/08 19:39:24
Done.
|
| + main_delegate->CreateTestWindowWithParent(vk_container)); |
| + vk_container->layout_manager()->OnWindowResized(); |
| + vk_window->Show(); |
| + aura::test::EventGenerator event_generator(root_window, |
| + vk_window.get()); |
| + event_generator.ClickLeftButton(); |
| + int expected_mouse_presses = 1; |
| + EXPECT_EQ(expected_mouse_presses, main_delegate->mouse_presses()); |
| + |
| + for (int block_reason = FIRST_BLOCK_REASON; |
| + block_reason < NUMBER_OF_BLOCK_REASONS; |
| + ++block_reason) { |
| + BlockUserSession(static_cast<UserSessionBlockReason>(block_reason)); |
| + event_generator.ClickLeftButton(); |
| + expected_mouse_presses++; |
| + EXPECT_EQ(expected_mouse_presses, main_delegate->mouse_presses()); |
| + UnblockUserSession(); |
| + } |
| +} |
| + |
| } // namespace test |
| } // namespace ash |