| // 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. |
| |
| #import <set> |
| |
| #import "ios/chrome/browser/shared/model/web_state_list/web_state_list_observer.h" |
| #import "ios/web/public/download/download_task_observer.h" |
| |
| struct WebStateListStatus; |
| class WebStateListChangeDetach; |
| |
| namespace web { |
| class DownloadTask; |
| } // namespace web |
| |
| #ifndef IOS_CHROME_BROWSER_DOWNLOAD_UI_UNOPENED_DOWNLOADS_TRACKER_H_ |
| #define IOS_CHROME_BROWSER_DOWNLOAD_UI_UNOPENED_DOWNLOADS_TRACKER_H_ |
| |
| // Tracks download tasks which were not opened by the user yet. Reports various |
| // metrics in DownloadTaskObserver callbacks. |
| class UnopenedDownloadsTracker : public web::DownloadTaskObserver, |
| public WebStateListObserver { |
| public: |
| UnopenedDownloadsTracker(); |
| UnopenedDownloadsTracker(const UnopenedDownloadsTracker&) = delete; |
| UnopenedDownloadsTracker& operator=(const UnopenedDownloadsTracker&) = delete; |
| ~UnopenedDownloadsTracker() override; |
| |
| // Starts tracking this download task. |
| void Add(web::DownloadTask* task); |
| // Stops tracking this download task. |
| void Remove(web::DownloadTask* task); |
| // DownloadTaskObserver overrides: |
| void OnDownloadUpdated(web::DownloadTask* task) override; |
| void OnDownloadDestroyed(web::DownloadTask* task) override; |
| |
| // Logs histograms. Called when DownloadTask or this object was destroyed. |
| void DownloadAborted(web::DownloadTask* task); |
| |
| // WebStateListObserver overrides: |
| void WebStateListWillChange(WebStateList* web_state_list, |
| const WebStateListChangeDetach& detach_change, |
| const WebStateListStatus& status) override; |
| |
| private: |
| // True if a web state was closed without user action. |
| bool did_close_web_state_without_user_action = false; |
| // Keeps track of observed tasks to remove observer when |
| // UnopenedDownloadsTracker is destructed. |
| std::set<web::DownloadTask*> observed_tasks_; |
| }; |
| |
| #endif // IOS_CHROME_BROWSER_DOWNLOAD_UI_UNOPENED_DOWNLOADS_TRACKER_H_ |