| // Copyright 2013 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/confirm_infobar.h" |
| |
| #include "base/android/jni_android.h" |
| #include "base/android/jni_string.h" |
| #include "base/logging.h" |
| #include "chrome/browser/android/resource_mapper.h" |
| #include "chrome/browser/infobars/confirm_infobar_delegate.h" |
| #include "jni/ConfirmInfoBarDelegate_jni.h" |
| |
| |
| // ConfirmInfoBarDelegate ----------------------------------------------------- |
| |
| // static |
| InfoBar* ConfirmInfoBarDelegate::CreateInfoBar(InfoBarService* owner) { |
| return new ConfirmInfoBar(owner, this); |
| } |
| |
| |
| // ConfirmInfoBar ------------------------------------------------------------- |
| |
| ConfirmInfoBar::ConfirmInfoBar(InfoBarService* owner, InfoBarDelegate* delegate) |
| : InfoBarAndroid(owner, delegate), |
| delegate_(delegate->AsConfirmInfoBarDelegate()), |
| java_confirm_delegate_() { |
| } |
| |
| ConfirmInfoBar::~ConfirmInfoBar() { |
| } |
| |
| base::android::ScopedJavaLocalRef<jobject> ConfirmInfoBar::CreateRenderInfoBar( |
| JNIEnv* env) { |
| java_confirm_delegate_.Reset(Java_ConfirmInfoBarDelegate_create(env)); |
| base::android::ScopedJavaLocalRef<jstring> ok_button_text = |
| base::android::ConvertUTF16ToJavaString( |
| env, GetTextFor(ConfirmInfoBarDelegate::BUTTON_OK)); |
| base::android::ScopedJavaLocalRef<jstring> cancel_button_text = |
| base::android::ConvertUTF16ToJavaString( |
| env, GetTextFor(ConfirmInfoBarDelegate::BUTTON_CANCEL)); |
| base::android::ScopedJavaLocalRef<jstring> message_text = |
| base::android::ConvertUTF16ToJavaString( |
| env, delegate_->GetMessageText()); |
| |
| return Java_ConfirmInfoBarDelegate_showConfirmInfoBar( |
| env, java_confirm_delegate_.obj(), reinterpret_cast<jint>(this), |
| GetEnumeratedIconId(), message_text.obj(), ok_button_text.obj(), |
| cancel_button_text.obj()); |
| } |
| |
| void ConfirmInfoBar::ProcessButton(int action, |
| const std::string& action_value) { |
| DCHECK((action == InfoBarAndroid::ACTION_OK) || |
| (action == InfoBarAndroid::ACTION_CANCEL)); |
| if ((action == InfoBarAndroid::ACTION_OK) ? |
| delegate_->Accept() : delegate_->Cancel()) |
| CloseInfoBar(); |
| } |
| |
| string16 ConfirmInfoBar::GetTextFor( |
| ConfirmInfoBarDelegate::InfoBarButton button) { |
| return (delegate_->GetButtons() & button) ? |
| delegate_->GetButtonLabel(button) : string16(); |
| } |
| |
| |
| // Native JNI methods --------------------------------------------------------- |
| |
| bool RegisterConfirmInfoBarDelegate(JNIEnv* env) { |
| return RegisterNativesImpl(env); |
| } |