Index: chrome/browser/ui/android/infobar/auto_login_infobar_delegate_android.cc |
diff --git a/chrome/browser/ui/android/infobar/auto_login_infobar_delegate_android.cc b/chrome/browser/ui/android/infobar/auto_login_infobar_delegate_android.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cec97337e78c249e21fb2c78a27cd94a14692cf0 |
--- /dev/null |
+++ b/chrome/browser/ui/android/infobar/auto_login_infobar_delegate_android.cc |
@@ -0,0 +1,123 @@ |
+// Copyright (c) 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/auto_login_infobar_delegate_android.h" |
+ |
+#include "base/android/jni_android.h" |
+#include "base/android/jni_helper.h" |
+#include "base/android/jni_string.h" |
+#include "base/strings/utf_string_conversions.h" |
+#include "chrome/browser/infobars/simple_alert_infobar_delegate.h" |
+#include "chrome/browser/ui/auto_login_infobar_delegate.h" |
+#include "content/public/browser/web_contents.h" |
+#include "grit/generated_resources.h" |
+#include "grit/theme_resources.h" |
+#include "jni/AutoLoginDelegate_jni.h" |
+#include "ui/base/l10n/l10n_util.h" |
+ |
+using base::android::AttachCurrentThread; |
+using base::android::ConvertUTF8ToJavaString; |
+using base::android::ScopedJavaGlobalRef; |
+using base::android::ScopedJavaLocalRef; |
+ |
+AutoLoginInfoBarDelegateAndroid::AutoLoginInfoBarDelegateAndroid( |
+ InfoBarService* owner, |
+ const Params& params) |
+ : AutoLoginInfoBarDelegate(owner, params), params_(params) {} |
+ |
+AutoLoginInfoBarDelegateAndroid::~AutoLoginInfoBarDelegateAndroid() {} |
+ |
+bool AutoLoginInfoBarDelegateAndroid::AttachAccount( |
+ JavaObjectWeakGlobalRef weak_java_auto_login_delegate) { |
+ weak_java_auto_login_delegate_ = weak_java_auto_login_delegate; |
+ JNIEnv* env = AttachCurrentThread(); |
+ ScopedJavaLocalRef<jstring> jrealm = ConvertUTF8ToJavaString(env, realm()); |
+ ScopedJavaLocalRef<jstring> jaccount = |
+ ConvertUTF8ToJavaString(env, account()); |
+ ScopedJavaLocalRef<jstring> jargs = ConvertUTF8ToJavaString(env, args()); |
+ DCHECK(!jrealm.is_null() && !jaccount.is_null() && !jargs.is_null()); |
+ |
+ ScopedJavaLocalRef<jobject> delegate = |
+ weak_java_auto_login_delegate_.get(env); |
+ DCHECK(delegate.obj()); |
+ user_ = ConvertJavaStringToUTF8( |
+ Java_AutoLoginDelegate_initializeAccount(env, |
+ delegate.obj(), |
+ reinterpret_cast<jint>(this), |
+ jrealm.obj(), |
+ jaccount.obj(), |
+ jargs.obj())); |
+ return !user_.empty(); |
+} |
+ |
+string16 AutoLoginInfoBarDelegateAndroid::GetMessageText() const { |
+ return l10n_util::GetStringFUTF16(IDS_AUTOLOGIN_INFOBAR_MESSAGE, |
+ UTF8ToUTF16(user_)); |
+} |
+ |
+bool AutoLoginInfoBarDelegateAndroid::Accept() { |
+ JNIEnv* env = AttachCurrentThread(); |
+ ScopedJavaLocalRef<jobject> delegate = |
+ weak_java_auto_login_delegate_.get(env); |
+ DCHECK(delegate.obj()); |
+ |
+ Java_AutoLoginDelegate_logIn( |
+ env, delegate.obj(), reinterpret_cast<jint>(this)); |
+ |
+ // Do not close the infobar on accept, it will be closed as part |
+ // of the log in callback. |
+ return false; |
+} |
+ |
+bool AutoLoginInfoBarDelegateAndroid::Cancel() { |
+ JNIEnv* env = AttachCurrentThread(); |
+ ScopedJavaLocalRef<jobject> delegate = |
+ weak_java_auto_login_delegate_.get(env); |
+ DCHECK(delegate.obj()); |
+ Java_AutoLoginDelegate_cancelLogIn( |
+ env, delegate.obj(), reinterpret_cast<jint>(this)); |
+ return true; |
+} |
+ |
+void AutoLoginInfoBarDelegateAndroid::LoginSuccess(JNIEnv* env, |
+ jobject obj, |
+ jstring result) { |
+ if (owner()) { |
+ content::WebContents* web_contents = owner()->web_contents(); |
+ if (web_contents) { |
+ web_contents->Stop(); |
+ web_contents->OpenURL(content::OpenURLParams( |
+ GURL(base::android::ConvertJavaStringToUTF8(env, result)), |
+ content::Referrer(), |
+ CURRENT_TAB, |
+ content::PAGE_TRANSITION_AUTO_BOOKMARK, |
+ false)); |
+ } |
+ owner()->RemoveInfoBar(this); |
+ } |
+} |
+ |
+void AutoLoginInfoBarDelegateAndroid::LoginFailed(JNIEnv* env, jobject obj) { |
+ ScopedJavaLocalRef<jobject> delegate = |
+ weak_java_auto_login_delegate_.get(env); |
+ DCHECK(delegate.obj()); |
+ if (owner()) { |
+ SimpleAlertInfoBarDelegate::Create( |
+ owner(), |
+ IDR_INFOBAR_WARNING, |
+ l10n_util::GetStringUTF16(IDS_AUTO_LOGIN_FAILED), |
+ false); |
+ owner()->RemoveInfoBar(this); |
+ } |
+} |
+ |
+void AutoLoginInfoBarDelegateAndroid::LoginDismiss(JNIEnv* env, jobject obj) { |
+ if (owner()) |
+ owner()->RemoveInfoBar(this); |
+} |
+ |
+// Register Android JNI bindings. |
+bool AutoLoginInfoBarDelegateAndroid::Register(JNIEnv* env) { |
+ return RegisterNativesImpl(env); |
+} |