chromium/chromeos/ui/frame/immersive/immersive_fullscreen_controller_test_api.h

// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMEOS_UI_FRAME_IMMERSIVE_IMMERSIVE_FULLSCREEN_CONTROLLER_TEST_API_H_
#define CHROMEOS_UI_FRAME_IMMERSIVE_IMMERSIVE_FULLSCREEN_CONTROLLER_TEST_API_H_

#include "base/component_export.h"
#include "base/memory/raw_ptr.h"

namespace chromeos {

class ImmersiveFullscreenController;

// Use by tests to access private state of ImmersiveFullscreenController.
class COMPONENT_EXPORT(CHROMEOS_UI_FRAME) ImmersiveFullscreenControllerTestApi {
 public:
  explicit ImmersiveFullscreenControllerTestApi(
      ImmersiveFullscreenController* controller);

  ImmersiveFullscreenControllerTestApi(
      const ImmersiveFullscreenControllerTestApi&) = delete;
  ImmersiveFullscreenControllerTestApi& operator=(
      const ImmersiveFullscreenControllerTestApi&) = delete;

  ~ImmersiveFullscreenControllerTestApi();

  // Disables animations for any ImmersiveFullscreenControllers created while
  // GlobalAnimationDisabler exists.
  class COMPONENT_EXPORT(CHROMEOS_UI_FRAME) GlobalAnimationDisabler {
   public:
    GlobalAnimationDisabler();

    GlobalAnimationDisabler(const GlobalAnimationDisabler&) = delete;
    GlobalAnimationDisabler& operator=(const GlobalAnimationDisabler&) = delete;

    ~GlobalAnimationDisabler();
  };

  // Disables animations and moves the mouse so that it is not over the
  // top-of-window views for the sake of testing.
  void SetupForTest();

  bool IsTopEdgeHoverTimerRunning() const;

  void EndAnimation();

 private:
  raw_ptr<ImmersiveFullscreenController, DanglingUntriaged>
      immersive_fullscreen_controller_;
};

}  // namespace chromeos

#endif  // CHROMEOS_UI_FRAME_IMMERSIVE_IMMERSIVE_FULLSCREEN_CONTROLLER_TEST_API_H_