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