chromium/ash/wm/overview/overview_test_util.h

// 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_WM_OVERVIEW_OVERVIEW_TEST_UTIL_H_
#define ASH_WM_OVERVIEW_OVERVIEW_TEST_UTIL_H_

#include "ash/wm/overview/overview_session.h"
#include "ui/events/keycodes/keyboard_codes_posix.h"

namespace views {
class View;
}  // namespace views

namespace ui::test {
class EventGenerator;
}  // namespace ui::test

namespace ash {

class OverviewGrid;
class OverviewItemBase;

void ToggleOverview(
    OverviewEnterExitType type = OverviewEnterExitType::kNormal);

// Waits for the overview enter/exit animations to finish. No-op and immediately
// returns if animations are disabled.
void WaitForOverviewEnterAnimation();
void WaitForOverviewExitAnimation();

// Like `WaitForOverviewEnterAnimation()` but waits even if using zero duration.
// Used to wait for async pine image read operation.
void WaitForOverviewEntered();

OverviewGrid* GetOverviewGridForRoot(aura::Window* root);

const std::vector<std::unique_ptr<OverviewItemBase>>& GetOverviewItemsForRoot(
    int index);

std::vector<aura::Window*> GetWindowsListInOverviewGrids();

// Returns the OverviewItem associated with |window| if it exists.
OverviewItemBase* GetOverviewItemForWindow(aura::Window* window);

// If `drop` is false, the dragged `item` won't be dropped; giving the caller
// a chance to do some validations before the item is dropped.
void DragItemToPoint(OverviewItemBase* item,
                     const gfx::Point& screen_location,
                     ui::test::EventGenerator* event_generator,
                     bool by_touch_gestures = false,
                     bool drop = true);

// Press the key repeatedly until a window is focused, i.e. ignoring any
// desk items.
void SendKeyUntilOverviewItemIsFocused(
    ui::KeyboardCode key,
    ui::test::EventGenerator* event_generator);

// Waits until the occlusion state for window is equal to `target_state`.
void WaitForOcclusionStateChange(aura::Window* window,
                                 aura::Window::OcclusionState target_state);

// Returns true if the given `window` is on its corresponding overview grid,
// returns false otherwise.
bool IsWindowInItsCorrespondingOverviewGrid(aura::Window* window);

views::View* GetFocusedView();

// Calls `views::test::RunScheduledLayout()` for the desk bar within overview
// mode for every root window. This is a no-op if a desk bar is not active.
void RunScheduledLayoutForAllOverviewDeskBars();

}  // namespace ash

#endif  // ASH_WM_OVERVIEW_OVERVIEW_TEST_UTIL_H_