| // 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_APP_LIST_APP_LIST_ITEM_UTIL_H_ | 
 | #define ASH_APP_LIST_APP_LIST_ITEM_UTIL_H_ | 
 |  | 
 | #include <string> | 
 |  | 
 | #include "base/values.h" | 
 | #include "ui/base/clipboard/clipboard_format_type.h" | 
 | #include "ui/base/dragdrop/drag_drop_types.h" | 
 | #include "ui/base/dragdrop/os_exchange_data.h" | 
 |  | 
 | namespace ash { | 
 |  | 
 | enum class DraggableAppType { kAppGridItem = 0, kFolderAppGridItem = 1, kMax }; | 
 |  | 
 | struct DraggableAppItemInfo { | 
 |   DraggableAppItemInfo(const std::string& app_id, const DraggableAppType type); | 
 |   ~DraggableAppItemInfo(); | 
 |   DraggableAppItemInfo(const DraggableAppItemInfo& other); | 
 |   DraggableAppItemInfo(DraggableAppItemInfo&& other); | 
 |   DraggableAppItemInfo& operator=(const DraggableAppItemInfo& other); | 
 |  | 
 |   // Returns true if the application id is empty. | 
 |   // This is often used to determine if the id is invalid. | 
 |   bool IsValid() const; | 
 |  | 
 |   // The application id associated with a set of windows. | 
 |   std::string app_id; | 
 |   // The type of draggable app. | 
 |   DraggableAppType type = DraggableAppType::kAppGridItem; | 
 | }; | 
 |  | 
 | const ui::ClipboardFormatType& GetAppItemFormatType(); | 
 |  | 
 | // Retrieve app information carried in a OSExchangeData object during app list | 
 | // drag and drop action. | 
 | std::optional<DraggableAppItemInfo> GetAppInfoFromDropDataForAppType( | 
 |     const ui::OSExchangeData& data); | 
 |  | 
 | }  // namespace ash | 
 |  | 
 | #endif  // ASH_APP_LIST_APP_LIST_ITEM_UTIL_H_ |