| Index: ash/extended_desktop_unittest.cc
|
| diff --git a/ash/extended_desktop_unittest.cc b/ash/extended_desktop_unittest.cc
|
| index 5f4dd6c52d5e8a9f11c1c159cf679871899d48a7..4cc75faa136612d24197472f18dd7330e5bfaf19 100644
|
| --- a/ash/extended_desktop_unittest.cc
|
| +++ b/ash/extended_desktop_unittest.cc
|
| @@ -4,7 +4,9 @@
|
|
|
| #include "ash/display/display_controller.h"
|
| #include "ash/display/multi_display_manager.h"
|
| +#include "ash/screen_ash.h"
|
| #include "ash/shell.h"
|
| +#include "ash/shell_window_ids.h"
|
| #include "ash/system/tray/system_tray.h"
|
| #include "ash/test/ash_test_base.h"
|
| #include "ash/wm/coordinate_conversion.h"
|
| @@ -12,6 +14,7 @@
|
| #include "ash/wm/window_cycle_controller.h"
|
| #include "ash/wm/window_properties.h"
|
| #include "ash/wm/window_util.h"
|
| +#include "base/string_util.h"
|
| #include "ui/aura/client/activation_client.h"
|
| #include "ui/aura/client/capture_client.h"
|
| #include "ui/aura/env.h"
|
| @@ -23,6 +26,7 @@
|
| #include "ui/base/cursor/cursor.h"
|
| #include "ui/gfx/display.h"
|
| #include "ui/gfx/screen.h"
|
| +#include "ui/views/controls/textfield/textfield.h"
|
| #include "ui/views/widget/widget.h"
|
| #include "ui/views/widget/widget_delegate.h"
|
|
|
| @@ -599,5 +603,71 @@ TEST_F(ExtendedDesktopTest, StayInSameRootWindow) {
|
| EXPECT_EQ(root_windows[0], w1->GetNativeView()->GetRootWindow());
|
| }
|
|
|
| +TEST_F(ExtendedDesktopTest, KeyEventsOnLockScreen) {
|
| + UpdateDisplay("100x100,200x200");
|
| + Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
|
| +
|
| + // Create normal windows on both displays.
|
| + views::Widget* widget1 = CreateTestWidget(
|
| + gfx::Screen::GetPrimaryDisplay().bounds());
|
| + widget1->Show();
|
| + EXPECT_EQ(root_windows[0], widget1->GetNativeView()->GetRootWindow());
|
| + views::Widget* widget2 = CreateTestWidget(
|
| + ScreenAsh::GetSecondaryDisplay().bounds());
|
| + widget2->Show();
|
| + EXPECT_EQ(root_windows[1], widget2->GetNativeView()->GetRootWindow());
|
| +
|
| + // Create a LockScreen window.
|
| + views::Widget* lock_widget = CreateTestWidget(
|
| + gfx::Screen::GetPrimaryDisplay().bounds());
|
| + views::Textfield* textfield = new views::Textfield;
|
| + lock_widget->SetContentsView(textfield);
|
| +
|
| + ash::Shell::GetContainer(
|
| + Shell::GetPrimaryRootWindow(),
|
| + ash::internal::kShellWindowId_LockScreenContainer)->
|
| + AddChild(lock_widget->GetNativeView());
|
| + lock_widget->Show();
|
| + textfield->RequestFocus();
|
| +
|
| + aura::FocusManager* focus_manager = root_windows[0]->GetFocusManager();
|
| + EXPECT_EQ(lock_widget->GetNativeView(), focus_manager->GetFocusedWindow());
|
| +
|
| + // The lock window should get events on both root windows.
|
| + aura::test::EventGenerator generator1(root_windows[0]);
|
| + generator1.PressKey(ui::VKEY_A, 0);
|
| + generator1.ReleaseKey(ui::VKEY_A, 0);
|
| + EXPECT_EQ(lock_widget->GetNativeView(), focus_manager->GetFocusedWindow());
|
| + EXPECT_EQ("a", UTF16ToASCII(textfield->text()));
|
| +
|
| + aura::test::EventGenerator generator2(root_windows[1]);
|
| + generator2.PressKey(ui::VKEY_B, 0);
|
| + generator2.ReleaseKey(ui::VKEY_B, 0);
|
| + EXPECT_EQ(lock_widget->GetNativeView(), focus_manager->GetFocusedWindow());
|
| + EXPECT_EQ("ab", UTF16ToASCII(textfield->text()));
|
| +
|
| + // Deleting 2nd display. The lock window still should get the events.
|
| + UpdateDisplay("100x100");
|
| + generator2.PressKey(ui::VKEY_C, 0);
|
| + generator2.ReleaseKey(ui::VKEY_C, 0);
|
| + EXPECT_EQ(lock_widget->GetNativeView(), focus_manager->GetFocusedWindow());
|
| + EXPECT_EQ("abc", UTF16ToASCII(textfield->text()));
|
| +
|
| + // Creating 2nd display again, and lock window still should get events
|
| + // on both root windows.
|
| + UpdateDisplay("100x100,200x200");
|
| + root_windows = Shell::GetAllRootWindows();
|
| + generator1.PressKey(ui::VKEY_D, 0);
|
| + generator1.ReleaseKey(ui::VKEY_D, 0);
|
| + EXPECT_EQ(lock_widget->GetNativeView(), focus_manager->GetFocusedWindow());
|
| + EXPECT_EQ("abcd", UTF16ToASCII(textfield->text()));
|
| +
|
| + aura::test::EventGenerator generator22(root_windows[1]);
|
| + generator22.PressKey(ui::VKEY_E, 0);
|
| + generator22.ReleaseKey(ui::VKEY_E, 0);
|
| + EXPECT_EQ(lock_widget->GetNativeView(), focus_manager->GetFocusedWindow());
|
| + EXPECT_EQ("abcde", UTF16ToASCII(textfield->text()));
|
| +}
|
| +
|
| } // namespace internal
|
| } // namespace ash
|
|
|