13c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller// Copyright 2013 The Chromium Authors. All rights reserved. 23c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller// Use of this source code is governed by a BSD-style license that can be 33c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller// found in the LICENSE file. 43c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 53c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerpackage org.chromium.chrome.browser.infobar; 63c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 73c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerimport android.accounts.Account; 83c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerimport android.accounts.AccountManager; 93c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerimport android.accounts.AccountManagerCallback; 103c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerimport android.accounts.AccountManagerFuture; 113c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerimport android.app.Activity; 123c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerimport android.os.Bundle; 133c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerimport android.util.Log; 143c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 153c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerimport org.chromium.sync.signin.ChromeSigninController; 163c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 173c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller/** 183c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller * Performs the actual login to the requried service. 193c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller */ 203c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fullerpublic class AutoLoginAccountDelegate implements AccountManagerCallback<Bundle> { 213c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 223c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller private static final String WEB_LOGIN_PREFIX = "weblogin:"; 233c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller private final Activity mActivity; 243c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller private final AutoLoginProcessor mAutoLoginProcessor; 253c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller private final AccountManager mAccountManager; 263c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller private final Account mAccount; 273c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller private boolean mLogInRequested; 283c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller private final String mAuthTokenType; 293c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 303c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller public AutoLoginAccountDelegate(Activity activity, AutoLoginProcessor autoLoginProcessor, 313c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller String realm, String account, String accountArgs) { 323c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller mActivity = activity; 333c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller mAutoLoginProcessor = autoLoginProcessor; 343c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller mAccountManager = AccountManager.get(activity); 353c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller mAccount = ChromeSigninController.get(activity).getSignedInUser(); 363c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller mLogInRequested = false; 373c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller mAuthTokenType = WEB_LOGIN_PREFIX + accountArgs; 383c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 393c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 403c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller public boolean logIn() { 413c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller Log.i("AutoLoginAccountDelegate", "auto-login requested for " 423c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller + (mAccount != null ? mAccount.toString() : "?")); 433c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 443c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller Account currentAccount = ChromeSigninController.get(mActivity).getSignedInUser(); 453c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller if (mAccount == null || !mAccount.equals(currentAccount)) { 463c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller Log.i("InfoBar", "auto-login failed because account is no longer valid"); 473c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller return false; 483c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 493c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 503c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller // The callback for this request comes in on a non-UI thread. 513c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller mAccountManager.getAuthToken(mAccount, mAuthTokenType, null, mActivity, this, null); 523c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller mLogInRequested = true; 533c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller return true; 543c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 553c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 563c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller String getAuthToken() { 573c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller return mAuthTokenType; 583c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 593c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 603c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller String getAccountName() { 613c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller return mAccount != null ? mAccount.name : ""; 623c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 633c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 643c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller boolean loginRequested() { 653c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller return mLogInRequested; 663c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 673c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 683c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller boolean hasAccount() { 693c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller return mAccount != null; 703c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 713c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 723c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller @Override 733c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller public void run(AccountManagerFuture<Bundle> value) { 743c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller String result = null; 753c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller try { 763c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller result = value.getResult().getString(AccountManager.KEY_AUTHTOKEN); 773c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } catch (Exception e) { 783c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller result = null; 793c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 803c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 813c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller final boolean success = result != null; 823c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller 833c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller // Can't rely on the Bundle's auth token or account name as they might be null 843c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller // if this was a failed attempt. 853c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller if (mAutoLoginProcessor != null) { 863c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller mAutoLoginProcessor.processAutoLoginResult(getAccountName(), getAuthToken(), 873c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller success, result); 883c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 893c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller } 903c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller} 913c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller