143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// Copyright 2013 The Chromium Authors. All rights reserved. 243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// Use of this source code is governed by a BSD-style license that can be 343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// found in the LICENSE file. 443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 543dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "chrome/browser/ui/android/infobars/confirm_infobar.h" 643dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 743dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "base/android/jni_android.h" 843dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "base/android/jni_string.h" 943dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "base/logging.h" 1043dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "chrome/browser/android/resource_mapper.h" 1143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "components/infobars/core/confirm_infobar_delegate.h" 1243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "jni/ConfirmInfoBarDelegate_jni.h" 1343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 1443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 15ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek// ConfirmInfoBarDelegate ----------------------------------------------------- 16769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 17d1e5a89226da79f7e6f43d40facc46abda9e5245Jordy Rose// static 18769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidisscoped_ptr<infobars::InfoBar> ConfirmInfoBarDelegate::CreateInfoBar( 199fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis scoped_ptr<ConfirmInfoBarDelegate> delegate) { 2043dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis return scoped_ptr<infobars::InfoBar>(new ConfirmInfoBar(delegate.Pass())); 2143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis} 2243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 2343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 24d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis// ConfirmInfoBar ------------------------------------------------------------- 25d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis 26d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios KyrtzidisConfirmInfoBar::ConfirmInfoBar(scoped_ptr<ConfirmInfoBarDelegate> delegate) 27d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis : InfoBarAndroid(delegate.PassAs<infobars::InfoBarDelegate>()), 28d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis java_confirm_delegate_() {} 29d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis 30d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios KyrtzidisConfirmInfoBar::~ConfirmInfoBar() { 31d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis} 32d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis 33d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidisbase::android::ScopedJavaLocalRef<jobject> ConfirmInfoBar::CreateRenderInfoBar( 34d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis JNIEnv* env) { 35d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis java_confirm_delegate_.Reset(Java_ConfirmInfoBarDelegate_create(env)); 36d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis base::android::ScopedJavaLocalRef<jstring> ok_button_text = 37dff6ef903ff4fcb43b5ea292ecd772e381393b5dAnna Zaks base::android::ConvertUTF16ToJavaString( 38dff6ef903ff4fcb43b5ea292ecd772e381393b5dAnna Zaks env, GetTextFor(ConfirmInfoBarDelegate::BUTTON_OK)); 39d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis base::android::ScopedJavaLocalRef<jstring> cancel_button_text = 40d655ab28fdf7c940d3f79f8f287954d7f76e0977Argyrios Kyrtzidis base::android::ConvertUTF16ToJavaString( 41deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis env, GetTextFor(ConfirmInfoBarDelegate::BUTTON_CANCEL)); 42deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis ConfirmInfoBarDelegate* delegate = GetDelegate(); 43deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis base::android::ScopedJavaLocalRef<jstring> message_text = 44deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis base::android::ConvertUTF16ToJavaString( 45deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis env, delegate->GetMessageText()); 46deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis base::android::ScopedJavaLocalRef<jstring> link_text = 47deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis base::android::ConvertUTF16ToJavaString( 48deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis env, delegate->GetLinkText()); 49deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis 50deb6447d0029bdb122397fafb5fa2a4e76f2e555Argyrios Kyrtzidis return Java_ConfirmInfoBarDelegate_showConfirmInfoBar( 51769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis env, java_confirm_delegate_.obj(), reinterpret_cast<intptr_t>(this), 52769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis GetEnumeratedIconId(), message_text.obj(), link_text.obj(), 53769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis ok_button_text.obj(), cancel_button_text.obj()); 54769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis} 559fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 569fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidisvoid ConfirmInfoBar::OnLinkClicked(JNIEnv* env, jobject obj) { 579fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis if (!owner()) 589fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis return; // We're closing; don't call anything, it might access the owner. 599fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 609fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis if (GetDelegate()->LinkClicked(NEW_FOREGROUND_TAB)) 619fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis RemoveSelf(); 629fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis} 639fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 649fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidisvoid ConfirmInfoBar::ProcessButton(int action, 659fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis const std::string& action_value) { 669fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis if (!owner()) 679fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis return; // We're closing; don't call anything, it might access the owner. 689fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 699fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis DCHECK((action == InfoBarAndroid::ACTION_OK) || 70769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis (action == InfoBarAndroid::ACTION_CANCEL)); 719fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis ConfirmInfoBarDelegate* delegate = GetDelegate(); 729fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis if ((action == InfoBarAndroid::ACTION_OK) ? 739fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis delegate->Accept() : delegate->Cancel()) 749fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis RemoveSelf(); 759fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis} 76769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 77769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios KyrtzidisConfirmInfoBarDelegate* ConfirmInfoBar::GetDelegate() { 789fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis return delegate()->AsConfirmInfoBarDelegate(); 799fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis} 809fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 819fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidisbase::string16 ConfirmInfoBar::GetTextFor( 829fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis ConfirmInfoBarDelegate::InfoBarButton button) { 839fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis ConfirmInfoBarDelegate* delegate = GetDelegate(); 84769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis return (delegate->GetButtons() & button) ? 85769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis delegate->GetButtonLabel(button) : base::string16(); 86769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis} 87769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 88769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 89769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis// Native JNI methods --------------------------------------------------------- 90769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 91769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidisbool RegisterConfirmInfoBarDelegate(JNIEnv* env) { 92769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis return RegisterNativesImpl(env); 93c2e0db82139c70c0eac9d5c165b6bf3250af5bedArgyrios Kyrtzidis} 94c2e0db82139c70c0eac9d5c165b6bf3250af5bedArgyrios Kyrtzidis