1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef COMPONENTS_INFOBARS_ANDROID_INFOBAR_ANDROID_H_ 6 #define COMPONENTS_INFOBARS_ANDROID_INFOBAR_ANDROID_H_ 7 8 #include <string> 9 10 #include "base/android/scoped_java_ref.h" 11 #include "base/callback.h" 12 #include "base/macros.h" 13 #include "components/infobars/core/infobar.h" 14 15 namespace infobars { 16 17 class InfoBarAndroid : public InfoBar { 18 public: 19 // A Java counterpart will be generated for this enum. 20 // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.infobar 21 // GENERATED_JAVA_PREFIX_TO_STRIP: ACTION_ 22 enum ActionType { 23 ACTION_NONE = 0, 24 // Confirm infobar 25 ACTION_OK = 1, 26 ACTION_CANCEL = 2, 27 // Translate infobar 28 ACTION_TRANSLATE = 3, 29 ACTION_TRANSLATE_SHOW_ORIGINAL = 4, 30 }; 31 32 // A function that maps from Chromium IDs to Drawable IDs. 33 using ResourceIdMapper = base::RepeatingCallback<int(int)>; 34 35 InfoBarAndroid(std::unique_ptr<InfoBarDelegate> delegate, 36 const ResourceIdMapper& resource_id_mapper); 37 ~InfoBarAndroid() override; 38 39 // InfoBar: 40 virtual base::android::ScopedJavaLocalRef<jobject> CreateRenderInfoBar( 41 JNIEnv* env) = 0; 42 43 virtual void SetJavaInfoBar( 44 const base::android::JavaRef<jobject>& java_info_bar); 45 const base::android::JavaRef<jobject>& GetJavaInfoBar(); 46 bool HasSetJavaInfoBar() const; 47 48 int GetInfoBarIdentifier(JNIEnv* env, 49 const base::android::JavaParamRef<jobject>& obj); OnLinkClicked(JNIEnv * env,const base::android::JavaParamRef<jobject> & obj)50 virtual void OnLinkClicked(JNIEnv* env, 51 const base::android::JavaParamRef<jobject>& obj) {} 52 void OnButtonClicked(JNIEnv* env, 53 const base::android::JavaParamRef<jobject>& obj, 54 jint action); 55 void OnCloseButtonClicked(JNIEnv* env, 56 const base::android::JavaParamRef<jobject>& obj); 57 58 void CloseJavaInfoBar(); 59 60 // Maps from a Chromium ID (IDR_TRANSLATE) to a Drawable ID. 61 int GetJavaIconId(); 62 63 // Acquire the java infobar from a different one. This is used to do in-place 64 // replacements. PassJavaInfoBar(InfoBarAndroid * source)65 virtual void PassJavaInfoBar(InfoBarAndroid* source) {} 66 67 protected: 68 // Derived classes must implement this method to process the corresponding 69 // action. 70 virtual void ProcessButton(int action) = 0; 71 72 void CloseInfoBar(); infobar_android()73 InfoBarAndroid* infobar_android() { return this; } 74 75 private: 76 ResourceIdMapper resource_id_mapper_; 77 base::android::ScopedJavaGlobalRef<jobject> java_info_bar_; 78 79 DISALLOW_COPY_AND_ASSIGN(InfoBarAndroid); 80 }; 81 82 } // namespace infobars 83 84 #endif // COMPONENTS_INFOBARS_ANDROID_INFOBAR_ANDROID_H_ 85