| 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..2566a8b0433c2666b59377f7aac2c0bbfa8fc873 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_t primary_display_id = display_ids.first;
|
| + int64_t 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));
|
| +}
|
| +
|
| // Additional sticky key overlay tests that depend on chromeos::EventRewriter
|
| // are now in chrome/browser/chromeos/events/event_rewriter_unittest.cc .
|
|
|
|
|