Chromium Code Reviews| Index: ash/sticky_keys/sticky_keys_overlay_unittest.cc |
| diff --git a/ash/sticky_keys/sticky_keys_overlay_unittest.cc b/ash/sticky_keys/sticky_keys_overlay_unittest.cc |
| index b6078255bb72b2d8ed6a4efe022721518e5430e2..a00d850f1e6f9d9cd04d6e7459493a2419b2d1e6 100644 |
| --- a/ash/sticky_keys/sticky_keys_overlay_unittest.cc |
| +++ b/ash/sticky_keys/sticky_keys_overlay_unittest.cc |
| @@ -4,18 +4,17 @@ |
| #include "ash/sticky_keys/sticky_keys_overlay.h" |
| +#include "ash/display/display_controller.h" |
| +#include "ash/display/display_manager.h" |
| #include "ash/shell.h" |
| #include "ash/sticky_keys/sticky_keys_controller.h" |
| #include "ash/test/ash_test_base.h" |
| #include "ui/events/event.h" |
| +#include "ui/views/widget/widget.h" |
| namespace ash { |
| -class StickyKeysOverlayTest : public test::AshTestBase { |
| - public: |
| - StickyKeysOverlayTest() {} |
| - virtual ~StickyKeysOverlayTest() {} |
| -}; |
| +using StickyKeysOverlayTest = test::AshTestBase; |
| TEST_F(StickyKeysOverlayTest, OverlayVisibility) { |
| StickyKeysOverlay overlay; |
| @@ -41,6 +40,40 @@ TEST_F(StickyKeysOverlayTest, ModifierKeyState) { |
| overlay.GetModifierKeyState(ui::EF_COMMAND_DOWN)); |
| } |
| +// This test addresses the crash report at crbug.com/435600, speculated to be |
| +// caused by using sticky keys with multiple displays. |
| +TEST_F(StickyKeysOverlayTest, OverlayNotDestroyedAfterDisplayRemoved) { |
| + // Add a secondary display to the left of the primary one. |
| + UpdateDisplay("1280x1024,1980x1080"); |
| + DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| + DisplayIdPair display_ids = display_manager->GetCurrentDisplayIdPair(); |
| + int64 primary_display_id = display_ids.first; |
|
James Cook
2014/12/04 22:00:45
nit: int64_t and next line too
Tim Song
2014/12/04 23:53:37
Done.
|
| + int64 secondary_display_id = display_ids.second; |
| + display_manager->SetLayoutForCurrentDisplays( |
| + DisplayLayout(DisplayLayout::LEFT, 0)); |
| + |
| + // The overlay should belong to the secondary root window. |
| + StickyKeysOverlay overlay; |
| + views::Widget* overlay_widget = overlay.GetWidgetForTesting(); |
| + DisplayController* display_controller = |
| + Shell::GetInstance()->display_controller(); |
| + EXPECT_EQ(display_controller->GetRootWindowForDisplayId(secondary_display_id), |
| + overlay_widget->GetNativeWindow()->GetRootWindow()); |
| + |
| + // Removing the second display should move the overlay to the primary root |
| + // window. |
| + UpdateDisplay("1280x1024"); |
| + EXPECT_EQ(display_controller->GetRootWindowForDisplayId(primary_display_id), |
| + overlay_widget->GetNativeWindow()->GetRootWindow()); |
| + |
| + overlay.SetModifierKeyState(ui::EF_SHIFT_DOWN, STICKY_KEY_STATE_ENABLED); |
| + EXPECT_EQ(STICKY_KEY_STATE_ENABLED, |
| + overlay.GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| + overlay.SetModifierKeyState(ui::EF_SHIFT_DOWN, STICKY_KEY_STATE_DISABLED); |
| + EXPECT_EQ(STICKY_KEY_STATE_DISABLED, |
| + overlay.GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
| +} |
|
James Cook
2014/12/04 22:00:45
Much better test!
Tim Song
2014/12/04 23:53:37
Thanks!
|
| + |
| // Additional sticky key overlay tests that depend on chromeos::EventRewriter |
| // are now in chrome/browser/chromeos/events/event_rewriter_unittest.cc . |