Index: chrome/browser/ui/views/immersive_mode_controller.cc |
diff --git a/chrome/browser/ui/views/immersive_mode_controller.cc b/chrome/browser/ui/views/immersive_mode_controller.cc |
index 99f505e073a9a8a027bb0186a10237d64d441219..a532c5529ceaa108287f2055ad36225646540d4c 100644 |
--- a/chrome/browser/ui/views/immersive_mode_controller.cc |
+++ b/chrome/browser/ui/views/immersive_mode_controller.cc |
@@ -244,11 +244,20 @@ class ImmersiveModeController::WindowObserver : public aura::WindowObserver { |
const void* key, |
intptr_t old) OVERRIDE { |
using aura::client::kShowStateKey; |
- if (key != kShowStateKey) |
- return; |
- // Disable immersive mode when leaving the maximized state. |
- if (window->GetProperty(kShowStateKey) != ui::SHOW_STATE_MAXIMIZED) |
- controller_->SetEnabled(false); |
+ if (key == kShowStateKey) { |
+ // Disable immersive mode when leaving the maximized state. |
+ if (window->GetProperty(kShowStateKey) != ui::SHOW_STATE_MAXIMIZED) |
+ controller_->SetEnabled(false); |
+ return; |
+ } |
+#if defined(USE_ASH) |
+ using ash::internal::kImmersiveModeKey; |
+ if (key == kImmersiveModeKey) { |
+ // Another component has toggled immersive mode. |
+ controller_->SetEnabled(window->GetProperty(kImmersiveModeKey)); |
+ return; |
+ } |
+#endif |
} |
private: |
@@ -280,6 +289,7 @@ void ImmersiveModeController::Init() { |
// window pointer so |this| can stop observing during destruction. |
native_window_ = browser_view_->GetNativeWindow(); |
DCHECK(native_window_); |
+ EnableWindowObservers(true); |
#if defined(USE_ASH) |
// Optionally allow the tab indicators to be hidden. |
@@ -302,6 +312,7 @@ void ImmersiveModeController::SetEnabled(bool enabled) { |
} |
#if defined(USE_ASH) |
+ // This causes a no-op call to SetEnabled() since enabled_ is already set. |
native_window_->SetProperty(ash::internal::kImmersiveModeKey, enabled_); |
// Ash on Windows may not have a shell. |
if (ash::Shell::HasInstance()) { |
@@ -317,8 +328,6 @@ void ImmersiveModeController::SetEnabled(bool enabled) { |
// Always ensure tab strip is in correct state. |
browser_view_->tabstrip()->SetImmersiveStyle(enabled_); |
browser_view_->Layout(); |
- |
- EnableWindowObservers(enabled_); |
} |
views::View* ImmersiveModeController::reveal_view() { |
@@ -347,7 +356,7 @@ void ImmersiveModeController::CancelReveal() { |
// ui::EventHandler overrides: |
void ImmersiveModeController::OnMouseEvent(ui::MouseEvent* event) { |
- if (event->type() != ui::ET_MOUSE_MOVED) |
+ if (!enabled_ || event->type() != ui::ET_MOUSE_MOVED) |
return; |
if (event->location().y() == 0) { |
// Start a reveal if the mouse touches the top of the screen and then stops |