chromium/ash/wm/test/fake_window_state.h

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

#ifndef ASH_WM_TEST_FAKE_WINDOW_STATE_H_
#define ASH_WM_TEST_FAKE_WINDOW_STATE_H_

#include "ash/wm/window_state.h"
#include "ash/wm/window_state_delegate.h"
#include "chromeos/ui/base/window_state_type.h"

namespace ash {

// WindowState based on a given initial state. Records things such as if the
// window was visible on minimize event, number of system UI area changes, and
// last requested bounds.
class FakeWindowState : public WindowState::State {
 public:
  explicit FakeWindowState(chromeos::WindowStateType initial_state_type);
  FakeWindowState(const FakeWindowState&) = delete;
  FakeWindowState& operator=(const FakeWindowState&) = delete;
  ~FakeWindowState() override;

  bool was_visible_on_minimize() const { return was_visible_on_minimize_; }

  const gfx::Rect& last_requested_bounds() const {
    return last_requested_bounds_;
  }

  // WindowState::State:
  void OnWMEvent(WindowState* window_state, const WMEvent* event) override;
  chromeos::WindowStateType GetType() const override;
  void AttachState(WindowState* window_state,
                   WindowState::State* previous_state) override {}
  void DetachState(WindowState* window_state) override {}

 private:
  bool was_visible_on_minimize_ = true;
  gfx::Rect last_requested_bounds_;
  const chromeos::WindowStateType state_type_;
};

class FakeWindowStateDelegate : public WindowStateDelegate {
 public:
  FakeWindowStateDelegate();
  FakeWindowStateDelegate(const FakeWindowStateDelegate&) = delete;
  FakeWindowStateDelegate& operator=(const FakeWindowStateDelegate&) = delete;
  ~FakeWindowStateDelegate() override;

  int toggle_locked_fullscreen_count() const {
    return toggle_locked_fullscreen_count_;
  }

  bool drag_in_progress() const { return drag_in_progress_; }
  int drag_start_component() const { return drag_start_component_; }
  gfx::PointF drag_end_location() const { return drag_end_location_; }

  // WindowStateDelegate:
  bool ToggleFullscreen(WindowState* window_state) override;
  void ToggleLockedFullscreen(WindowState* window_state) override;
  std::unique_ptr<PresentationTimeRecorder> OnDragStarted(
      int component) override;
  void OnDragFinished(bool cancel, const gfx::PointF& location) override;

 private:
  int toggle_locked_fullscreen_count_ = 0;
  bool drag_in_progress_ = false;
  int drag_start_component_ = -1;
  gfx::PointF drag_end_location_;
};

}  // namespace ash

#endif  // ASH_WM_TEST_FAKE_WINDOW_STATE_H_