| Index: chrome/android/java/src/org/chromium/chrome/browser/infobar/AutoLoginDelegate.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/AutoLoginDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/AutoLoginDelegate.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2ca6605dfed5ba5260be53d3733ad738c79971e3
|
| --- /dev/null
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/AutoLoginDelegate.java
|
| @@ -0,0 +1,107 @@
|
| +// 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.
|
| +
|
| +package org.chromium.chrome.browser.infobar;
|
| +
|
| +import android.accounts.Account;
|
| +import android.app.Activity;
|
| +import android.util.Log;
|
| +import android.util.SparseArray;
|
| +
|
| +import org.chromium.chrome.R;
|
| +
|
| +import org.chromium.base.CalledByNative;
|
| +
|
| +/**
|
| + * Java equivalent of the C++ AutoLoginDelegateAndroid.
|
| + *
|
| + * Offers functionality to log in using the account in the system and keeps track
|
| + * of all the native autologin infobars and their respective accounts.
|
| + */
|
| +public class AutoLoginDelegate {
|
| + private final Activity mActivity;
|
| + private final AutoLoginProcessor mAutoLoginProcessor;
|
| +
|
| + // indexed by nativeInfoBar, think of it as an efficient
|
| + // HashMap<nativeInfoBar, AutoLoginAccountDelegate>.
|
| + private final SparseArray<AutoLoginAccountDelegate> mAccountHelpers;
|
| +
|
| + public AutoLoginDelegate(AutoLoginProcessor autoLoginProcessor, Activity activity) {
|
| + mActivity = activity;
|
| + mAutoLoginProcessor = autoLoginProcessor;
|
| + mAccountHelpers = new SparseArray<AutoLoginAccountDelegate>();
|
| + }
|
| +
|
| + /**
|
| + * @return the account name of the device if any.
|
| + */
|
| + @CalledByNative
|
| + String initializeAccount(int nativeInfoBar, String realm, String account, String args) {
|
| + AutoLoginAccountDelegate accountHelper =
|
| + new AutoLoginAccountDelegate(mActivity, mAutoLoginProcessor, realm, account, args);
|
| +
|
| + if (!accountHelper.hasAccount()) {
|
| + return "";
|
| + }
|
| +
|
| + mAccountHelpers.put(nativeInfoBar, accountHelper);
|
| + return accountHelper.getAccountName();
|
| + }
|
| +
|
| + /**
|
| + * Log in a user to a given google service.
|
| + */
|
| + @CalledByNative
|
| + boolean logIn(int nativeInfoBar) {
|
| + AutoLoginAccountDelegate account = mAccountHelpers.get(nativeInfoBar);
|
| +
|
| + if (account == null || !account.logIn()) {
|
| + nativeLoginFailed(nativeInfoBar);
|
| + return false;
|
| + }
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * Clear account information for cancelled login requests.
|
| + */
|
| + @CalledByNative
|
| + boolean cancelLogIn(int nativeInfoBar) {
|
| + mAccountHelpers.remove(nativeInfoBar);
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * Clear all infobars in the same tab and tells native to proceed with login if successful.
|
| + */
|
| + public void dismissAutoLogins(String accountName, String authToken, boolean success,
|
| + String result) {
|
| + // Use a copy of the current active accounts so we can delete the
|
| + // original in the for loop.
|
| + SparseArray<AutoLoginAccountDelegate> accountInfo = mAccountHelpers.clone();
|
| + for (int i = 0; i < accountInfo.size(); i++) {
|
| + int infoBar = accountInfo.keyAt(i);
|
| + AutoLoginAccountDelegate delegate = accountInfo.get(infoBar);
|
| + if (!delegate.loginRequested()) {
|
| + nativeLoginDismiss(infoBar);
|
| + } else {
|
| + String accountAuthToken = delegate.getAuthToken();
|
| + if (accountAuthToken != null && accountAuthToken.equals(authToken)
|
| + && delegate.loginRequested()) {
|
| + if (success) {
|
| + nativeLoginSuccess(infoBar, result);
|
| + } else {
|
| + nativeLoginFailed(infoBar);
|
| + }
|
| + }
|
| + }
|
| + mAccountHelpers.remove(infoBar);
|
| + }
|
| + }
|
| +
|
| + private native void nativeLoginSuccess(int nativeAutoLoginInfoBarDelegateAndroid,
|
| + String result);
|
| + private native void nativeLoginFailed(int nativeAutoLoginInfoBarDelegateAndroid);
|
| + private native void nativeLoginDismiss(int nativeAutoLoginInfoBarDelegateAndroid);
|
| +}
|
|
|