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

Unified Diff: chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.cc

Issue 208393015: Revert "Remove desktop auto-login since we don't plan on shipping it there. Refactor the base and … (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 9 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
Index: chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.cc
diff --git a/chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.cc b/chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.cc
new file mode 100644
index 0000000000000000000000000000000000000000..87bd52d118f63b13e68eefd6c4291167c18911e7
--- /dev/null
+++ b/chrome/browser/ui/android/infobars/auto_login_infobar_delegate_android.cc
@@ -0,0 +1,120 @@
+// 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/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/infobar.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::ConvertUTF8ToJavaString;
+using base::android::ScopedJavaLocalRef;
+
+
+AutoLoginInfoBarDelegateAndroid::AutoLoginInfoBarDelegateAndroid(
+ const Params& params,
+ Profile* profile)
+ : AutoLoginInfoBarDelegate(params, profile),
+ 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 = base::android::AttachCurrentThread();
+ ScopedJavaLocalRef<jstring> jrealm = ConvertUTF8ToJavaString(env, realm());
+ ScopedJavaLocalRef<jstring> jaccount =
+ ConvertUTF8ToJavaString(env, account());
+ ScopedJavaLocalRef<jstring> jargs = ConvertUTF8ToJavaString(env, args());
+ DCHECK(!jrealm.is_null());
+ DCHECK(!jaccount.is_null());
+ DCHECK(!jargs.is_null());
+
+ ScopedJavaLocalRef<jobject> delegate =
+ weak_java_auto_login_delegate_.get(env);
+ DCHECK(delegate.obj());
+ user_ = base::android::ConvertJavaStringToUTF8(
+ Java_AutoLoginDelegate_initializeAccount(
+ env, delegate.obj(), reinterpret_cast<intptr_t>(this), jrealm.obj(),
+ jaccount.obj(), jargs.obj()));
+ return !user_.empty();
+}
+
+base::string16 AutoLoginInfoBarDelegateAndroid::GetMessageText() const {
+ return l10n_util::GetStringFUTF16(IDS_AUTOLOGIN_INFOBAR_MESSAGE,
+ base::UTF8ToUTF16(user_));
+}
+
+bool AutoLoginInfoBarDelegateAndroid::Accept() {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> delegate =
+ weak_java_auto_login_delegate_.get(env);
+ DCHECK(delegate.obj());
+ Java_AutoLoginDelegate_logIn(env, delegate.obj(),
+ reinterpret_cast<intptr_t>(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 = base::android::AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> delegate =
+ weak_java_auto_login_delegate_.get(env);
+ DCHECK(delegate.obj());
+ Java_AutoLoginDelegate_cancelLogIn(env, delegate.obj(),
+ reinterpret_cast<intptr_t>(this));
+ return true;
+}
+
+void AutoLoginInfoBarDelegateAndroid::LoginSuccess(JNIEnv* env,
+ jobject obj,
+ jstring result) {
+ if (!infobar()->owner())
+ return; // We're closing; don't call anything, it might access the owner.
+
+ // TODO(miguelg): Test whether the Stop() and RemoveInfoBar() calls here are
+ // necessary, or whether OpenURL() will do this for us.
+ content::WebContents* contents = web_contents();
+ contents->Stop();
+ infobar()->RemoveSelf();
+ // WARNING: |this| may be deleted at this point! Do not access any members!
+ contents->OpenURL(content::OpenURLParams(
+ GURL(base::android::ConvertJavaStringToUTF8(env, result)),
+ content::Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_AUTO_BOOKMARK,
+ false));
+}
+
+void AutoLoginInfoBarDelegateAndroid::LoginFailed(JNIEnv* env, jobject obj) {
+ if (!infobar()->owner())
+ return; // We're closing; don't call anything, it might access the owner.
+
+ // TODO(miguelg): Using SimpleAlertInfoBarDelegate::Create() animates in a new
+ // infobar while we animate the current one closed. It would be better to use
+ // ReplaceInfoBar().
+ SimpleAlertInfoBarDelegate::Create(
+ infobar()->owner(), IDR_INFOBAR_WARNING,
+ l10n_util::GetStringUTF16(IDS_AUTO_LOGIN_FAILED), false);
+ infobar()->RemoveSelf();
+}
+
+void AutoLoginInfoBarDelegateAndroid::LoginDismiss(JNIEnv* env, jobject obj) {
+ infobar()->RemoveSelf();
+}
+
+bool AutoLoginInfoBarDelegateAndroid::Register(JNIEnv* env) {
+ return RegisterNativesImpl(env);
+}

Powered by Google App Engine
This is Rietveld 408576698