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

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

Issue 24109002: [InfoBar] Upstram basic infobar flow for Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@upstream_infobar_full
Patch Set: Fix License header in two more files Created 7 years, 3 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/infobar/OWNERS ('k') | chrome/browser/ui/android/infobar/confirm_infobar.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
+}
« no previous file with comments | « chrome/browser/ui/android/infobar/OWNERS ('k') | chrome/browser/ui/android/infobar/confirm_infobar.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698