Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: chrome/browser/ui/android/infobars/simple_confirm_infobar_builder.cc

Issue 1596713003: Discourage creation of Java infobars without InfoBarDelegates (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/ui/android/infobars/simple_confirm_infobar_builder.h ('k') | chrome/chrome.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 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 #include "chrome/browser/ui/android/infobars/simple_confirm_infobar_builder.h"
6
7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h"
9 #include "base/android/scoped_java_ref.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "chrome/browser/android/tab_android.h"
12 #include "chrome/browser/infobars/infobar_service.h"
13 #include "components/infobars/core/confirm_infobar_delegate.h"
14 #include "components/infobars/core/infobar.h"
15 #include "jni/SimpleConfirmInfoBarBuilder_jni.h"
16 #include "ui/gfx/android/java_bitmap.h"
17 #include "ui/gfx/image/image.h"
18 #include "ui/gfx/vector_icons_public.h"
19
20 namespace {
21
22 // Delegate for a simple ConfirmInfoBar triggered via JNI.
23 class SimpleConfirmInfoBarDelegate : public ConfirmInfoBarDelegate {
24 public:
25 SimpleConfirmInfoBarDelegate(
26 const JavaParamRef<jobject>& j_listener,
27 infobars::InfoBarDelegate::InfoBarIdentifier infobar_identifier,
28 const gfx::Image& bitmap,
29 const base::string16& message_str,
30 const base::string16& primary_str,
31 const base::string16& secondary_str,
32 bool auto_expire);
33
34 ~SimpleConfirmInfoBarDelegate() override;
35
36 // InfoBarDelegate overrides:
Peter Kasting 2016/01/16 01:00:56 Nit: You don't directly subclass this class, so th
gone 2016/01/19 23:43:03 Done.
37 infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override;
38 gfx::Image GetIcon() const override;
39 bool ShouldExpire(const NavigationDetails& details) const override;
40 void InfoBarDismissed() override;
41
42 // ConfirmInfoBarDelegate overrides:
Peter Kasting 2016/01/16 01:00:56 Nit: No need for " overrides"
gone 2016/01/19 23:43:03 Done.
43 base::string16 GetMessageText() const override;
44 int GetButtons() const override;
45 base::string16 GetButtonLabel(InfoBarButton button) const override;
46 bool Accept() override;
47 bool Cancel() override;
48
49 private:
50 base::android::ScopedJavaGlobalRef<jobject> java_listener_;
51 infobars::InfoBarDelegate::InfoBarIdentifier identifier_;
52 gfx::Image icon_bitmap_;
53 base::string16 message_str_;
54 base::string16 primary_str_;
55 base::string16 secondary_str_;
56 bool auto_expire_;
57 };
Peter Kasting 2016/01/16 01:00:56 Nit: DISALLOW_COPY_AND_ASSIGN
gone 2016/01/19 23:43:03 Argh, I always miss that one when I stay in Java t
58
59 SimpleConfirmInfoBarDelegate::SimpleConfirmInfoBarDelegate(
60 const JavaParamRef<jobject>& j_listener,
61 infobars::InfoBarDelegate::InfoBarIdentifier identifier,
62 const gfx::Image& bitmap,
63 const base::string16& message_str,
64 const base::string16& primary_str,
65 const base::string16& secondary_str,
66 bool auto_expire)
67 : identifier_(identifier),
68 icon_bitmap_(bitmap),
69 message_str_(message_str),
70 primary_str_(primary_str),
71 secondary_str_(secondary_str),
72 auto_expire_(auto_expire) {
73 java_listener_.Reset(j_listener);
74 }
75
76 SimpleConfirmInfoBarDelegate::~SimpleConfirmInfoBarDelegate() {
77 }
78
79 infobars::InfoBarDelegate::InfoBarIdentifier
80 SimpleConfirmInfoBarDelegate::GetIdentifier() const {
81 return identifier_;
82 }
83
84 gfx::Image SimpleConfirmInfoBarDelegate::GetIcon() const {
85 return icon_bitmap_.IsEmpty() ? ConfirmInfoBarDelegate::GetIcon()
86 : icon_bitmap_;
87 }
88
89 bool SimpleConfirmInfoBarDelegate::ShouldExpire(
90 const NavigationDetails& details) const {
91 return auto_expire_ && ConfirmInfoBarDelegate::ShouldExpire(details);
92 }
93
94 void SimpleConfirmInfoBarDelegate::InfoBarDismissed() {
95 Java_SimpleConfirmInfoBarBuilder_onInfoBarDismissed(
96 base::android::AttachCurrentThread(), java_listener_.obj());
97 }
98
99 base::string16 SimpleConfirmInfoBarDelegate::GetMessageText() const {
100 return message_str_;
101 }
102
103 int SimpleConfirmInfoBarDelegate::GetButtons() const {
104 int buttons = 0;
105 if (primary_str_.size() > 0) buttons |= BUTTON_OK;
Peter Kasting 2016/01/16 01:00:56 Nit: Chromium style avoids placing even short cond
gone 2016/01/19 23:43:03 Nice; switched over
106 if (secondary_str_.size() > 0) buttons |= BUTTON_CANCEL;
107 return buttons;
108 }
109
110 base::string16
111 SimpleConfirmInfoBarDelegate::GetButtonLabel(InfoBarButton button) const {
112 return button == BUTTON_OK ? primary_str_ : secondary_str_;
113 }
114
115 bool SimpleConfirmInfoBarDelegate::Accept() {
116 Java_SimpleConfirmInfoBarBuilder_onInfoBarButtonClicked(
117 base::android::AttachCurrentThread(), java_listener_.obj(), true);
118 return true;
119 }
120
121 bool SimpleConfirmInfoBarDelegate::Cancel() {
122 Java_SimpleConfirmInfoBarBuilder_onInfoBarButtonClicked(
123 base::android::AttachCurrentThread(), java_listener_.obj(), false);
124 return true;
125 }
126
127 } // anonymous namespace
128
129
Peter Kasting 2016/01/16 01:00:56 Nit: Too many blank lines
gone 2016/01/19 23:43:03 Done.
130
131 // Native JNI methods ---------------------------------------------------------
132
133 void Create(JNIEnv* env,
134 const JavaParamRef<jclass>& j_caller,
135 const JavaParamRef<jobject>& j_tab,
136 jint j_identifier,
137 const JavaParamRef<jobject>& j_icon,
138 const JavaParamRef<jstring>& j_message,
139 const JavaParamRef<jstring>& j_primary,
140 const JavaParamRef<jstring>& j_secondary,
141 jboolean auto_expire,
142 const JavaParamRef<jobject>& j_listener) {
143 infobars::InfoBarDelegate::InfoBarIdentifier infobar_identifier =
144 static_cast<infobars::InfoBarDelegate::InfoBarIdentifier>(j_identifier);
145
146 gfx::Image icon_bitmap;
147 if (j_icon) {
148 icon_bitmap = gfx::Image::CreateFrom1xBitmap(
149 gfx::CreateSkBitmapFromJavaBitmap(gfx::JavaBitmap(j_icon)));
150 }
151
152 InfoBarService* service = InfoBarService::FromWebContents(
153 TabAndroid::GetNativeTab(env, j_tab)->web_contents());
154 service->AddInfoBar(service->CreateConfirmInfoBar(
155 scoped_ptr<ConfirmInfoBarDelegate>(new SimpleConfirmInfoBarDelegate(
Peter Kasting 2016/01/16 01:00:56 Nit: make_scoped_ptr?
gone 2016/01/19 23:43:03 Done.
156 j_listener,
157 infobar_identifier,
158 icon_bitmap,
159 base::android::ConvertJavaStringToUTF16(env, j_message),
160 base::android::ConvertJavaStringToUTF16(env, j_primary),
161 base::android::ConvertJavaStringToUTF16(env, j_secondary),
162 auto_expire))));
163 }
164
165 bool RegisterSimpleConfirmInfoBarBuilder(JNIEnv* env) {
166 return RegisterNativesImpl(env);
167 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/android/infobars/simple_confirm_infobar_builder.h ('k') | chrome/chrome.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698