Commit bf0b91e4 authored by afakhry's avatar afakhry Committed by Commit bot

Make sure the event blocker is destroyed when we leave maximize mode.

Turning off the internal display while an external one is connected will
enter the device into docked mode, and will exit the maximized mode (if any).
We need to make sure that the keyboard and touchpad events are re-enabled
when the maximize mode exits.

BUG=549803
TEST=ash_unittests --gtest_filter=MaximizeModeControllerTest.NoMaximizeModeWithDisabledInternalDisplay

Review URL: https://codereview.chromium.org/1588883005

Cr-Commit-Position: refs/heads/master@{#370436}
parent 44e4ef42
......@@ -290,38 +290,48 @@ void MaximizeModeController::HandleHingeRotation(
if (lid_open_past_180_ && is_angle_stable &&
lid_angle <= kExitMaximizeModeAngle) {
lid_open_past_180_ = false;
if (!base::CommandLine::ForCurrentProcess()->
HasSwitch(switches::kAshEnableTouchViewTesting)) {
LeaveMaximizeMode();
}
event_blocker_.reset();
LeaveMaximizeMode();
} else if (!lid_open_past_180_ && !lid_is_closed_ &&
lid_angle >= kEnterMaximizeModeAngle &&
(is_angle_stable || !WasLidOpenedRecently())) {
lid_open_past_180_ = true;
if (!base::CommandLine::ForCurrentProcess()->
HasSwitch(switches::kAshEnableTouchViewTesting)) {
EnterMaximizeMode();
}
// Always reset first to avoid creation before destruction of a previous
// object.
event_blocker_.reset();
#if defined(USE_X11)
event_blocker_.reset(new ScopedDisableInternalMouseAndKeyboardX11);
#elif defined(USE_OZONE)
event_blocker_.reset(new ScopedDisableInternalMouseAndKeyboardOzone);
#endif
EnterMaximizeMode();
}
}
#endif // OS_CHROMEOS
void MaximizeModeController::EnterMaximizeMode() {
// Always reset first to avoid creation before destruction of a previous
// object.
event_blocker_.reset();
#if defined(USE_X11)
event_blocker_.reset(new ScopedDisableInternalMouseAndKeyboardX11);
#elif defined(USE_OZONE)
event_blocker_.reset(new ScopedDisableInternalMouseAndKeyboardOzone);
#endif
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kAshEnableTouchViewTesting)) {
// We don't let accelerometer updates interfere with the maximize mode
// status as set by the touch-view-testing keyboard shortcut.
return;
}
if (IsMaximizeModeWindowManagerEnabled())
return;
EnableMaximizeModeWindowManager(true);
}
void MaximizeModeController::LeaveMaximizeMode() {
event_blocker_.reset();
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kAshEnableTouchViewTesting)) {
// We don't let accelerometer updates interfere with the maximize mode
// status as set by the touch-view-testing keyboard shortcut.
return;
}
if (!IsMaximizeModeWindowManagerEnabled())
return;
EnableMaximizeModeWindowManager(false);
......
......@@ -155,6 +155,10 @@ class MaximizeModeControllerTest : public test::AshTestBase {
return maximize_mode_controller()->WasLidOpenedRecently();
}
bool AreEventsBlocked() {
return !!maximize_mode_controller()->event_blocker_.get();
}
base::UserActionTester* user_action_tester() { return &user_action_tester_; }
private:
......@@ -454,6 +458,7 @@ TEST_F(MaximizeModeControllerTest, NoMaximizeModeWithDisabledInternalDisplay) {
OpenLidToAngle(270.0f);
EXPECT_TRUE(IsMaximizeModeStarted());
EXPECT_TRUE(AreEventsBlocked());
// Deactivate internal display to simulate Docked Mode.
std::vector<DisplayInfo> secondary_only;
......@@ -462,9 +467,11 @@ TEST_F(MaximizeModeControllerTest, NoMaximizeModeWithDisabledInternalDisplay) {
display_manager->OnNativeDisplaysChanged(secondary_only);
ASSERT_FALSE(display_manager->IsActiveDisplayId(internal_display_id));
EXPECT_FALSE(IsMaximizeModeStarted());
EXPECT_FALSE(AreEventsBlocked());
OpenLidToAngle(270.0f);
EXPECT_FALSE(IsMaximizeModeStarted());
EXPECT_FALSE(AreEventsBlocked());
}
class MaximizeModeControllerSwitchesTest : public MaximizeModeControllerTest {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment