|  | // Copyright 2016 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_ANDROID_INFOBARS_DUPLICATE_DOWNLOAD_INFOBAR_H_ | 
|  | #define CHROME_BROWSER_UI_ANDROID_INFOBARS_DUPLICATE_DOWNLOAD_INFOBAR_H_ | 
|  |  | 
|  | #include "base/android/scoped_java_ref.h" | 
|  | #include "components/infobars/android/confirm_infobar.h" | 
|  |  | 
|  | namespace android { | 
|  | class DuplicateDownloadInfoBarDelegate; | 
|  | } | 
|  |  | 
|  | // Records user interactions with the duplicate download infobar. | 
|  | // Used in UMA, do not remove, change or reuse existing entries. | 
|  | // Update histograms.xml and enums.xml when adding entries. | 
|  | // A Java counterpart will be generated for this enum. | 
|  | // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.infobar | 
|  | enum class DuplicateDownloadInfobarEvent { | 
|  | // Infobar was shown. | 
|  | kShown = 0, | 
|  | // Accepted the duplicate download. | 
|  | kAccepted = 1, | 
|  | // Canceled the duplicate download. | 
|  | kCanceled = 2, | 
|  | // Link on the infobar is clicked. | 
|  | kLinkClicked = 3, | 
|  | // Dismissed the duplicate download. | 
|  | kDismissed = 4, | 
|  | kCount | 
|  | }; | 
|  |  | 
|  | // A native-side implementation of an infobar to ask whether to continue | 
|  | // downloading if target file already exists. | 
|  | class DuplicateDownloadInfoBar : public infobars::ConfirmInfoBar { | 
|  | public: | 
|  | static std::unique_ptr<infobars::InfoBar> CreateInfoBar( | 
|  | std::unique_ptr<android::DuplicateDownloadInfoBarDelegate> delegate); | 
|  |  | 
|  | DuplicateDownloadInfoBar(const DuplicateDownloadInfoBar&) = delete; | 
|  | DuplicateDownloadInfoBar& operator=(const DuplicateDownloadInfoBar&) = delete; | 
|  |  | 
|  | ~DuplicateDownloadInfoBar() override; | 
|  |  | 
|  | static void RecordDuplicateDownloadInfobarEvent( | 
|  | bool is_offline_page, | 
|  | DuplicateDownloadInfobarEvent event); | 
|  |  | 
|  | private: | 
|  | explicit DuplicateDownloadInfoBar( | 
|  | std::unique_ptr<android::DuplicateDownloadInfoBarDelegate> delegate); | 
|  |  | 
|  | // ConfirmInfoBar: | 
|  | base::android::ScopedJavaLocalRef<jobject> CreateRenderInfoBar( | 
|  | JNIEnv* env, | 
|  | const ResourceIdMapper& resource_id_mapper) override; | 
|  |  | 
|  | android::DuplicateDownloadInfoBarDelegate* GetDelegate(); | 
|  | }; | 
|  |  | 
|  | #endif  // CHROME_BROWSER_UI_ANDROID_INFOBARS_DUPLICATE_DOWNLOAD_INFOBAR_H_ |