| // Copyright 2015 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_ANDROID_CHROME_DUPLICATE_DOWNLOAD_INFOBAR_DELEGATE_H_ |
| #define CHROME_BROWSER_DOWNLOAD_ANDROID_CHROME_DUPLICATE_DOWNLOAD_INFOBAR_DELEGATE_H_ |
| |
| #include "base/files/file_path.h" |
| #include "base/functional/callback.h" |
| #include "base/memory/raw_ptr.h" |
| #include "chrome/browser/download/android/duplicate_download_infobar_delegate.h" |
| #include "chrome/browser/download/download_target_determiner_delegate.h" |
| #include "components/download/public/common/download_item.h" |
| #include "components/infobars/core/infobar_delegate.h" |
| |
| namespace infobars { |
| class ContentInfoBarManager; |
| } |
| |
| namespace android { |
| |
| // An infobar delegate that starts from the given file path. |
| class ChromeDuplicateDownloadInfoBarDelegate |
| : public DuplicateDownloadInfoBarDelegate, |
| public download::DownloadItem::Observer { |
| public: |
| ChromeDuplicateDownloadInfoBarDelegate( |
| const ChromeDuplicateDownloadInfoBarDelegate&) = delete; |
| ChromeDuplicateDownloadInfoBarDelegate& operator=( |
| const ChromeDuplicateDownloadInfoBarDelegate&) = delete; |
| |
| ~ChromeDuplicateDownloadInfoBarDelegate() override; |
| |
| static void Create(infobars::ContentInfoBarManager* infobar_manager, |
| download::DownloadItem* download_item, |
| const base::FilePath& file_path, |
| DownloadTargetDeterminerDelegate::ConfirmationCallback |
| file_selected_callback); |
| |
| // download::DownloadItem::Observer |
| void OnDownloadDestroyed(download::DownloadItem* download_item) override; |
| |
| private: |
| ChromeDuplicateDownloadInfoBarDelegate( |
| download::DownloadItem* download_item, |
| const base::FilePath& file_path, |
| DownloadTargetDeterminerDelegate::ConfirmationCallback callback); |
| |
| // DownloadOverwriteInfoBarDelegate: |
| infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override; |
| bool Accept() override; |
| bool Cancel() override; |
| std::string GetFilePath() const override; |
| void InfoBarDismissed() override; |
| absl::optional<Profile::OTRProfileID> GetOTRProfileID() const override; |
| |
| // The download item that is requesting the infobar. Could get deleted while |
| // the infobar is showing. |
| raw_ptr<download::DownloadItem> download_item_; |
| |
| // The target file path to be downloaded. This is used to show users the |
| // file name that will be used. |
| base::FilePath file_path_; |
| |
| // A callback to download target determiner to notify that file selection |
| // is made (or cancelled). |
| DownloadTargetDeterminerDelegate::ConfirmationCallback |
| file_selected_callback_; |
| }; |
| |
| } // namespace android |
| |
| #endif // CHROME_BROWSER_DOWNLOAD_ANDROID_CHROME_DUPLICATE_DOWNLOAD_INFOBAR_DELEGATE_H_ |