blob: 58ff55fd25160fd6331020c7cde14fa8ebb3a53b [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_CONTROLLER_CHROMEOS_H_
#define CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_CONTROLLER_CHROMEOS_H_
#include <memory>
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "build/chromeos_buildflags.h"
#include "chrome/browser/ui/exclusive_access/fullscreen_controller.h"
#include "chrome/browser/ui/exclusive_access/fullscreen_observer.h"
#include "chrome/browser/ui/views/frame/immersive_mode_controller.h"
#include "chromeos/ui/frame/immersive/immersive_fullscreen_controller.h"
#include "chromeos/ui/frame/immersive/immersive_fullscreen_controller_delegate.h"
#include "ui/aura/window.h"
#include "ui/aura/window_observer.h"
#include "ui/gfx/geometry/rect.h"
class ImmersiveModeControllerChromeos
: public ImmersiveModeController,
public chromeos::ImmersiveFullscreenControllerDelegate,
public FullscreenObserver,
public aura::WindowObserver {
public:
ImmersiveModeControllerChromeos();
ImmersiveModeControllerChromeos(const ImmersiveModeControllerChromeos&) =
delete;
ImmersiveModeControllerChromeos& operator=(
const ImmersiveModeControllerChromeos&) = delete;
~ImmersiveModeControllerChromeos() override;
chromeos::ImmersiveFullscreenController* controller() { return &controller_; }
// ImmersiveModeController overrides:
void Init(BrowserView* browser_view) override;
void SetEnabled(bool enabled) override;
bool IsEnabled() const override;
bool ShouldHideTopViews() const override;
bool IsRevealed() const override;
int GetTopContainerVerticalOffset(
const gfx::Size& top_container_size) const override;
std::unique_ptr<ImmersiveRevealedLock> GetRevealedLock(
AnimateReveal animate_reveal) override;
void OnFindBarVisibleBoundsChanged(
const gfx::Rect& new_visible_bounds_in_screen) override;
bool ShouldStayImmersiveAfterExitingFullscreen() override;
void OnWidgetActivationChanged(views::Widget* widget, bool active) override;
int GetMinimumContentOffset() const override;
int GetExtraInfobarOffset() const override;
void OnContentFullscreenChanged(bool is_content_fullscreen) override;
private:
// Updates the browser root view's layout including window caption controls.
void LayoutBrowserRootView();
// ImmersiveFullscreenController::Delegate overrides:
void OnImmersiveRevealStarted() override;
void OnImmersiveRevealEnded() override;
void OnImmersiveFullscreenEntered() override;
void OnImmersiveFullscreenExited() override;
void SetVisibleFraction(double visible_fraction) override;
std::vector<gfx::Rect> GetVisibleBoundsInScreen() const override;
// FullscreenObserver:
void OnFullscreenStateChanged() override;
// aura::WindowObserver:
void OnWindowPropertyChanged(aura::Window* window,
const void* key,
intptr_t old) override;
void OnWindowDestroying(aura::Window* window) override;
chromeos::ImmersiveFullscreenController controller_;
raw_ptr<BrowserView> browser_view_ = nullptr;
// The current visible bounds of the find bar, in screen coordinates. This is
// an empty rect if the find bar is not visible.
gfx::Rect find_bar_visible_bounds_in_screen_;
// The fraction of the TopContainerView's height which is visible. Zero when
// the top-of-window views are not revealed.
double visible_fraction_ = 1.0;
base::ScopedObservation<FullscreenController, FullscreenObserver>
fullscreen_observer_{this};
base::ScopedObservation<aura::Window, aura::WindowObserver>
window_observation_{this};
};
#endif // CHROME_BROWSER_UI_VIEWS_FRAME_IMMERSIVE_MODE_CONTROLLER_CHROMEOS_H_