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

Unified 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: Rebasing 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/android/infobars/simple_confirm_infobar_builder.cc
diff --git a/chrome/browser/ui/android/infobars/simple_confirm_infobar_builder.cc b/chrome/browser/ui/android/infobars/simple_confirm_infobar_builder.cc
new file mode 100644
index 0000000000000000000000000000000000000000..9e969d08bf069e870c938c250231aaffaa6ef311
--- /dev/null
+++ b/chrome/browser/ui/android/infobars/simple_confirm_infobar_builder.cc
@@ -0,0 +1,174 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/android/infobars/simple_confirm_infobar_builder.h"
+
+#include "base/android/jni_android.h"
+#include "base/android/jni_string.h"
+#include "base/android/scoped_java_ref.h"
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
+#include "chrome/browser/android/tab_android.h"
+#include "chrome/browser/infobars/infobar_service.h"
+#include "components/infobars/core/confirm_infobar_delegate.h"
+#include "components/infobars/core/infobar.h"
+#include "jni/SimpleConfirmInfoBarBuilder_jni.h"
+#include "ui/gfx/android/java_bitmap.h"
+#include "ui/gfx/image/image.h"
+#include "ui/gfx/vector_icons_public.h"
+
+namespace {
+
+// Delegate for a simple ConfirmInfoBar triggered via JNI.
+class SimpleConfirmInfoBarDelegate : public ConfirmInfoBarDelegate {
+ public:
+ SimpleConfirmInfoBarDelegate(
+ const JavaParamRef<jobject>& j_listener,
+ infobars::InfoBarDelegate::InfoBarIdentifier infobar_identifier,
+ const gfx::Image& bitmap,
+ const base::string16& message_str,
+ const base::string16& primary_str,
+ const base::string16& secondary_str,
+ bool auto_expire);
+
+ ~SimpleConfirmInfoBarDelegate() override;
+
+ // ConfirmInfoBarDelegate:
+ infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override;
+ gfx::Image GetIcon() const override;
+ bool ShouldExpire(const NavigationDetails& details) const override;
+ void InfoBarDismissed() override;
+ base::string16 GetMessageText() const override;
+ int GetButtons() const override;
+ base::string16 GetButtonLabel(InfoBarButton button) const override;
+ bool Accept() override;
+ bool Cancel() override;
+
+ private:
+ base::android::ScopedJavaGlobalRef<jobject> java_listener_;
+ infobars::InfoBarDelegate::InfoBarIdentifier identifier_;
+ gfx::Image icon_bitmap_;
+ base::string16 message_str_;
+ base::string16 primary_str_;
+ base::string16 secondary_str_;
+ bool auto_expire_;
+
+ DISALLOW_COPY_AND_ASSIGN(SimpleConfirmInfoBarDelegate);
+};
+
+SimpleConfirmInfoBarDelegate::SimpleConfirmInfoBarDelegate(
+ const JavaParamRef<jobject>& j_listener,
+ infobars::InfoBarDelegate::InfoBarIdentifier identifier,
+ const gfx::Image& bitmap,
+ const base::string16& message_str,
+ const base::string16& primary_str,
+ const base::string16& secondary_str,
+ bool auto_expire)
+ : identifier_(identifier),
+ icon_bitmap_(bitmap),
+ message_str_(message_str),
+ primary_str_(primary_str),
+ secondary_str_(secondary_str),
+ auto_expire_(auto_expire) {
+ java_listener_.Reset(j_listener);
+}
+
+SimpleConfirmInfoBarDelegate::~SimpleConfirmInfoBarDelegate() {
+}
+
+infobars::InfoBarDelegate::InfoBarIdentifier
+SimpleConfirmInfoBarDelegate::GetIdentifier() const {
+ return identifier_;
+}
+
+gfx::Image SimpleConfirmInfoBarDelegate::GetIcon() const {
+ return icon_bitmap_.IsEmpty() ? ConfirmInfoBarDelegate::GetIcon()
+ : icon_bitmap_;
+}
+
+bool SimpleConfirmInfoBarDelegate::ShouldExpire(
+ const NavigationDetails& details) const {
+ return auto_expire_ && ConfirmInfoBarDelegate::ShouldExpire(details);
+}
+
+void SimpleConfirmInfoBarDelegate::InfoBarDismissed() {
+ Java_SimpleConfirmInfoBarBuilder_onInfoBarDismissed(
+ base::android::AttachCurrentThread(), java_listener_.obj());
+}
+
+base::string16 SimpleConfirmInfoBarDelegate::GetMessageText() const {
+ return message_str_;
+}
+
+int SimpleConfirmInfoBarDelegate::GetButtons() const {
+ return (primary_str_.empty() ? 0 : BUTTON_OK) |
+ (secondary_str_.empty() ? 0 : BUTTON_CANCEL);
+}
+
+base::string16
+SimpleConfirmInfoBarDelegate::GetButtonLabel(InfoBarButton button) const {
+ return button == BUTTON_OK ? primary_str_ : secondary_str_;
+}
+
+bool SimpleConfirmInfoBarDelegate::Accept() {
+ Java_SimpleConfirmInfoBarBuilder_onInfoBarButtonClicked(
+ base::android::AttachCurrentThread(), java_listener_.obj(), true);
+ return true;
+}
+
+bool SimpleConfirmInfoBarDelegate::Cancel() {
+ Java_SimpleConfirmInfoBarBuilder_onInfoBarButtonClicked(
+ base::android::AttachCurrentThread(), java_listener_.obj(), false);
+ return true;
+}
+
+} // anonymous namespace
+
+// Native JNI methods ---------------------------------------------------------
+
+void Create(JNIEnv* env,
+ const JavaParamRef<jclass>& j_caller,
+ const JavaParamRef<jobject>& j_tab,
+ jint j_identifier,
+ const JavaParamRef<jobject>& j_icon,
+ const JavaParamRef<jstring>& j_message,
+ const JavaParamRef<jstring>& j_primary,
+ const JavaParamRef<jstring>& j_secondary,
+ jboolean auto_expire,
+ const JavaParamRef<jobject>& j_listener) {
+ infobars::InfoBarDelegate::InfoBarIdentifier infobar_identifier =
+ static_cast<infobars::InfoBarDelegate::InfoBarIdentifier>(j_identifier);
+
+ gfx::Image icon_bitmap;
+ if (j_icon) {
+ icon_bitmap = gfx::Image::CreateFrom1xBitmap(
+ gfx::CreateSkBitmapFromJavaBitmap(gfx::JavaBitmap(j_icon)));
+ }
+
+ base::string16 message_str = j_message.is_null()
+ ? base::string16()
+ : base::android::ConvertJavaStringToUTF16(env, j_message);
+ base::string16 primary_str = j_primary.is_null()
+ ? base::string16()
+ : base::android::ConvertJavaStringToUTF16(env, j_primary);
+ base::string16 secondary_str = j_secondary.is_null()
+ ? base::string16()
+ : base::android::ConvertJavaStringToUTF16(env, j_secondary);
+
+ InfoBarService* service = InfoBarService::FromWebContents(
+ TabAndroid::GetNativeTab(env, j_tab)->web_contents());
+ service->AddInfoBar(service->CreateConfirmInfoBar(
+ make_scoped_ptr(new SimpleConfirmInfoBarDelegate(
+ j_listener,
+ infobar_identifier,
+ icon_bitmap,
+ message_str,
+ primary_str,
+ secondary_str,
+ auto_expire))));
+}
+
+bool RegisterSimpleConfirmInfoBarBuilder(JNIEnv* env) {
+ return RegisterNativesImpl(env);
+}
« 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