| // 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_DOWNLOAD_BUBBLE_DOWNLOAD_BUBBLE_UTILS_H_ | 
 | #define CHROME_BROWSER_DOWNLOAD_BUBBLE_DOWNLOAD_BUBBLE_UTILS_H_ | 
 |  | 
 | #include "base/time/time.h" | 
 | #include "chrome/browser/download/bubble/download_bubble_accessible_alerts_map.h" | 
 | #include "chrome/browser/download/download_ui_model.h" | 
 | #include "components/offline_items_collection/core/offline_item.h" | 
 | #include "components/webapps/common/web_app_id.h" | 
 |  | 
 | base::Time GetItemStartTime(const download::DownloadItem* item); | 
 | base::Time GetItemStartTime(const offline_items_collection::OfflineItem& item); | 
 |  | 
 | const std::string& GetItemId(const download::DownloadItem* item); | 
 | const offline_items_collection::ContentId& GetItemId( | 
 |     const offline_items_collection::OfflineItem& item); | 
 |  | 
 | // Whether the download is more recent than |cutoff_time|. | 
 | bool ItemIsRecent(const download::DownloadItem* item, base::Time cutoff_time); | 
 | bool ItemIsRecent(const offline_items_collection::OfflineItem& item, | 
 |                   base::Time cutoff_time); | 
 | bool DownloadUIModelIsRecent(const DownloadUIModel* model, | 
 |                              base::Time cutoff_time); | 
 |  | 
 | // Whether the download is in progress and pending deep scanning. | 
 | bool IsPendingDeepScanning(const download::DownloadItem* item); | 
 | bool IsPendingDeepScanning(const DownloadUIModel* model); | 
 |  | 
 | // Whether the download is considered in-progress from the UI's point of view. | 
 | // Consider dangerous downloads as completed, because we don't want to encourage | 
 | // users to interact with them. Items that are paused count as in-progress. | 
 | bool IsItemInProgress(const download::DownloadItem* item); | 
 | bool IsItemInProgress(const offline_items_collection::OfflineItem& item); | 
 | bool IsModelInProgress(const DownloadUIModel* model); | 
 |  | 
 | // Whether the item is paused. | 
 | bool IsItemPaused(const download::DownloadItem* item); | 
 | bool IsItemPaused(const offline_items_collection::OfflineItem& item); | 
 |  | 
 | // Gets the appropriate accessible alert based on the status of the download. | 
 | // This should be called upon receiving an update for a download. | 
 | DownloadBubbleAccessibleAlertsMap::Alert GetAccessibleAlertForModel( | 
 |     const DownloadUIModel& model); | 
 |  | 
 | // Finds the browser most appropriate to show the "download started" animation | 
 | // in. | 
 | Browser* FindBrowserToShowAnimation(download::DownloadItem* item, | 
 |                                     Profile* profile); | 
 |  | 
 | // Gets a pointer to the web app id, if the browser is for a web app, otherwise | 
 | // nullptr. | 
 | const webapps::AppId* GetWebAppIdForBrowser(const Browser* browser); | 
 |  | 
 | #endif  // CHROME_BROWSER_DOWNLOAD_BUBBLE_DOWNLOAD_BUBBLE_UTILS_H_ |