chromium/chrome/browser/ui/ash/shelf/crostini_app_window.h

// Copyright 2020 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_UI_ASH_SHELF_CROSTINI_APP_WINDOW_H_
#define CHROME_BROWSER_UI_ASH_SHELF_CROSTINI_APP_WINDOW_H_

#include <memory>

#include "ash/public/cpp/shelf_types.h"
#include "chrome/browser/ui/ash/shelf/app_window_base.h"

namespace views {
class Widget;
}

class Profile;

// A ui::BaseWindow for a chromeos launcher to control Crostini applications.
// Also handles loading the window icon and app icon for the application.
class CrostiniAppWindow : public AppWindowBase {
 public:
  CrostiniAppWindow(Profile* profile,
                    const ash::ShelfID& shelf_id,
                    views::Widget* widget);

  ~CrostiniAppWindow() override;

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

 private:
  class IconLoader;

  // Loads the app icon to the window's app icon key. The app icon is larger
  // than the window icon, and is used for things like Alt-Tab.
  std::unique_ptr<IconLoader> app_icon_loader_;

  // Loads the window icon to the window icon key. The window icon is smaller
  // than the app icon, and is used for things like shelf app menus.
  std::unique_ptr<IconLoader> window_icon_loader_;
};

#endif  // CHROME_BROWSER_UI_ASH_SHELF_CROSTINI_APP_WINDOW_H_