chromium/chrome/browser/ash/borealis/testing/windows.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 CHROME_BROWSER_ASH_BOREALIS_TESTING_WINDOWS_H_
#define CHROME_BROWSER_ASH_BOREALIS_TESTING_WINDOWS_H_

#include <memory>
#include <string>

#include "base/memory/raw_ptr.h"
#include "base/unguessable_token.h"
#include "ui/aura/window.h"

namespace views {
class Widget;
}

namespace borealis {

class BorealisWindowManager;

// A helper class used to emulate the behaviour of the InstanceRegistry when
// windows are created/destroyed.
class ScopedTestWindow {
 public:
  ScopedTestWindow(std::unique_ptr<aura::Window> window,
                   borealis::BorealisWindowManager* manager);
  ~ScopedTestWindow();

  aura::Window* window() { return window_.get(); }

 private:
  base::UnguessableToken instance_id_;
  std::unique_ptr<aura::Window> window_;
  raw_ptr<borealis::BorealisWindowManager> manager_;
};

// Creates a window for use in testing.
std::unique_ptr<aura::Window> MakeWindow(std::string name);
std::unique_ptr<borealis::ScopedTestWindow> MakeAndTrackWindow(
    std::string name,
    borealis::BorealisWindowManager* manager);

// Creates and displays a widget with the given |name|.
std::unique_ptr<views::Widget> CreateFakeWidget(std::string name,
                                                bool fullscreen = false);

}  // namespace borealis

#endif  // CHROME_BROWSER_ASH_BOREALIS_TESTING_WINDOWS_H_