1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_CONTROLLER_ASH_H_
6 #define CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_CONTROLLER_ASH_H_
8 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h"
10 #include "ash/wm/immersive_fullscreen_controller.h"
11 #include "ash/wm/window_state_observer.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "content/public/browser/notification_observer.h"
14 #include "content/public/browser/notification_registrar.h"
15 #include "ui/gfx/rect.h"
21 class ImmersiveModeControllerAsh
22 : public ImmersiveModeController
,
23 public ash::ImmersiveFullscreenController::Delegate
,
24 public ash::wm::WindowStateObserver
,
25 public content::NotificationObserver
{
27 ImmersiveModeControllerAsh();
28 virtual ~ImmersiveModeControllerAsh();
30 // ImmersiveModeController overrides:
31 virtual void Init(BrowserView
* browser_view
) OVERRIDE
;
32 virtual void SetEnabled(bool enabled
) OVERRIDE
;
33 virtual bool IsEnabled() const OVERRIDE
;
34 virtual bool ShouldHideTabIndicators() const OVERRIDE
;
35 virtual bool ShouldHideTopViews() const OVERRIDE
;
36 virtual bool IsRevealed() const OVERRIDE
;
37 virtual int GetTopContainerVerticalOffset(
38 const gfx::Size
& top_container_size
) const OVERRIDE
;
39 virtual ImmersiveRevealedLock
* GetRevealedLock(
40 AnimateReveal animate_reveal
) OVERRIDE WARN_UNUSED_RESULT
;
41 virtual void OnFindBarVisibleBoundsChanged(
42 const gfx::Rect
& new_visible_bounds_in_screen
) OVERRIDE
;
43 virtual void SetupForTest() OVERRIDE
;
46 // Enables or disables observers for window restore and entering / exiting
48 void EnableWindowObservers(bool enable
);
50 // Updates the browser root view's layout including window caption controls.
51 void LayoutBrowserRootView();
53 // Updates whether the tab strip is painted in a short "light bar" style.
54 // Returns true if the visibility of the tab indicators has changed.
55 bool UpdateTabIndicators();
57 // ImmersiveFullscreenController::Delegate overrides:
58 virtual void OnImmersiveRevealStarted() OVERRIDE
;
59 virtual void OnImmersiveRevealEnded() OVERRIDE
;
60 virtual void OnImmersiveFullscreenExited() OVERRIDE
;
61 virtual void SetVisibleFraction(double visible_fraction
) OVERRIDE
;
62 virtual std::vector
<gfx::Rect
> GetVisibleBoundsInScreen() const OVERRIDE
;
64 // ash::wm::WindowStateObserver override:
65 virtual void OnPostWindowStateTypeChange(
66 ash::wm::WindowState
* window_state
,
67 ash::wm::WindowStateType old_type
) OVERRIDE
;
69 // content::NotificationObserver override:
70 virtual void Observe(int type
,
71 const content::NotificationSource
& source
,
72 const content::NotificationDetails
& details
) OVERRIDE
;
74 scoped_ptr
<ash::ImmersiveFullscreenController
> controller_
;
77 BrowserView
* browser_view_
;
78 aura::Window
* native_window_
;
80 // True if the observers for window restore and entering / exiting tab
81 // fullscreen are enabled.
82 bool observers_enabled_
;
84 // Whether a short "light bar" version of the tab strip should be painted when
85 // the top-of-window views are closed. If |use_tab_indicators_| is false, the
86 // tab strip is not painted at all when the top-of-window views are closed.
87 bool use_tab_indicators_
;
89 // The current visible bounds of the find bar, in screen coordinates. This is
90 // an empty rect if the find bar is not visible.
91 gfx::Rect find_bar_visible_bounds_in_screen_
;
93 // The fraction of the TopContainerView's height which is visible. Zero when
94 // the top-of-window views are not revealed regardless of
95 // |use_tab_indicators_|.
96 double visible_fraction_
;
98 content::NotificationRegistrar registrar_
;
100 DISALLOW_COPY_AND_ASSIGN(ImmersiveModeControllerAsh
);
103 #endif // CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_CONTROLLER_ASH_H_