immersive_mode_controller_ash.h revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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. 4 5#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_CONTROLLER_ASH_H_ 6#define CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_CONTROLLER_ASH_H_ 7 8#include "chrome/browser/ui/views/frame/immersive_mode_controller.h" 9 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" 16 17namespace aura { 18class Window; 19} 20 21class ImmersiveModeControllerAsh 22 : public ImmersiveModeController, 23 public ash::ImmersiveFullscreenController::Delegate, 24 public ash::wm::WindowStateObserver, 25 public content::NotificationObserver { 26 public: 27 ImmersiveModeControllerAsh(); 28 virtual ~ImmersiveModeControllerAsh(); 29 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; 44 45 private: 46 // Enables or disables observers for window restore and entering / exiting 47 // tab fullscreen. 48 void EnableWindowObservers(bool enable); 49 50 // Updates the browser root view's layout including window caption controls. 51 void LayoutBrowserRootView(); 52 53 // Shrinks or expands the touch hit test by updating insets for the render 54 // window depending on if top_inset is positive or negative respectively. 55 // Used to ensure that touch events at the top of the screen go to the top 56 // container so a slide gesture can be generated when the content window is 57 // consuming all touch events sent to it. 58 void SetRenderWindowTopInsetsForTouch(int top_inset); 59 60 // Updates whether the tab strip is painted in a short "light bar" style. 61 // Returns true if the visibility of the tab indicators has changed. 62 bool UpdateTabIndicators(); 63 64 // ImmersiveFullscreenController::Delegate overrides: 65 virtual void OnImmersiveRevealStarted() OVERRIDE; 66 virtual void OnImmersiveRevealEnded() OVERRIDE; 67 virtual void OnImmersiveFullscreenExited() OVERRIDE; 68 virtual void SetVisibleFraction(double visible_fraction) OVERRIDE; 69 virtual std::vector<gfx::Rect> GetVisibleBoundsInScreen() const OVERRIDE; 70 71 // ash::wm::WindowStateObserver override: 72 virtual void OnWindowShowTypeChanged( 73 ash::wm::WindowState* window_state, 74 ash::wm::WindowShowType old_type) OVERRIDE; 75 76 // content::NotificationObserver override: 77 virtual void Observe(int type, 78 const content::NotificationSource& source, 79 const content::NotificationDetails& details) OVERRIDE; 80 81 scoped_ptr<ash::ImmersiveFullscreenController> controller_; 82 83 // Not owned. 84 BrowserView* browser_view_; 85 aura::Window* native_window_; 86 87 // True if the observers for window restore and entering / exiting tab 88 // fullscreen are enabled. 89 bool observers_enabled_; 90 91 // Whether a short "light bar" version of the tab strip should be painted when 92 // the top-of-window views are closed. If |use_tab_indicators_| is false, the 93 // tab strip is not painted at all when the top-of-window views are closed. 94 bool use_tab_indicators_; 95 96 // The current visible bounds of the find bar, in screen coordinates. This is 97 // an empty rect if the find bar is not visible. 98 gfx::Rect find_bar_visible_bounds_in_screen_; 99 100 // The fraction of the TopContainerView's height which is visible. Zero when 101 // the top-of-window views are not revealed regardless of 102 // |use_tab_indicators_|. 103 double visible_fraction_; 104 105 content::NotificationRegistrar registrar_; 106 107 DISALLOW_COPY_AND_ASSIGN(ImmersiveModeControllerAsh); 108}; 109 110#endif // CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_CONTROLLER_ASH_H_ 111