// Copyright 2019 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_PUBLIC_CPP_OVERVIEW_TEST_API_H_
#define ASH_PUBLIC_CPP_OVERVIEW_TEST_API_H_
#include <cstdint>
#include <optional>
#include "ash/ash_export.h"
#include "base/containers/flat_map.h"
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "ui/gfx/geometry/rect.h"
namespace aura {
class Window;
} // namespace aura
namespace ash {
enum class OverviewAnimationState : int32_t {
kEnterAnimationComplete,
kExitAnimationComplete,
};
struct OverviewItemInfo {
// A window represented by an overview item.
raw_ptr<aura::Window> window = nullptr;
// Screen bounds of an overview item.
gfx::Rect bounds_in_screen;
// Whether an overview item is being dragged.
bool is_dragged = false;
};
// Overview item info keyed by app windows.
using OverviewInfo = base::flat_map<aura::Window*, OverviewItemInfo>;
// Provides access to the limited functions of OverviewController for autotest
// private API.
class ASH_EXPORT OverviewTestApi {
public:
OverviewTestApi();
OverviewTestApi(const OverviewTestApi&) = delete;
OverviewTestApi& operator=(const OverviewTestApi&) = delete;
~OverviewTestApi();
using DoneCallback = base::OnceCallback<void(bool animation_succeeded)>;
// Set the overview mode state to |start|. |done_callback| will be invoked
// synchronously if the animation is already complete, and asynchronously if
// the overview state does not match |start|.
void SetOverviewMode(bool start, DoneCallback done_callback);
// Runs the callback when overview is finished animating to |expected_state|.
// Passes true synchronously through |callback| if |expected_state| was
// already set. Otherwise |callback| is passed whether the animation succeeded
// asynchronously when the animation completes.
void WaitForOverviewState(OverviewAnimationState expected_state,
DoneCallback callback);
// Returns overview info for the current overview items if overview is
// started. Otherwise, returns std::nullopt;
std::optional<OverviewInfo> GetOverviewInfo() const;
};
} // namespace ash
#endif // ASH_PUBLIC_CPP_OVERVIEW_TEST_API_H_