| Index: chrome/test/android/javatests/src/org/chromium/chrome/test/services/accountauthenticator/AccountAuthenticatorService.java
|
| diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/services/accountauthenticator/AccountAuthenticatorService.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/services/accountauthenticator/AccountAuthenticatorService.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..09074e5c2f33be9b944a74954f0397cfc4ce5ecb
|
| --- /dev/null
|
| +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/services/accountauthenticator/AccountAuthenticatorService.java
|
| @@ -0,0 +1,115 @@
|
| +// Copyright 2015 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.test.services.accountauthenticator;
|
| +
|
| +import android.accounts.AbstractAccountAuthenticator;
|
| +import android.accounts.Account;
|
| +import android.accounts.AccountAuthenticatorResponse;
|
| +import android.accounts.AccountManager;
|
| +import android.app.Service;
|
| +import android.content.ContentResolver;
|
| +import android.content.Context;
|
| +import android.content.Intent;
|
| +import android.os.Bundle;
|
| +import android.os.IBinder;
|
| +
|
| +/**
|
| + * Authenticators {@link Service} for test accounts. Allows adding fake accounts without password
|
| + * validation.
|
| + */
|
| +public class AccountAuthenticatorService extends Service {
|
| +
|
| + @Override
|
| + public IBinder onBind(Intent intent) {
|
| + return new AccountAuthenticator(this).getIBinder();
|
| + }
|
| +
|
| + /**
|
| + * Account authenticator implementation for test accounts.
|
| + */
|
| + private final class AccountAuthenticator extends AbstractAccountAuthenticator {
|
| + private final Context mContext;
|
| + private final ContentResolver mContentResolver;
|
| +
|
| + public AccountAuthenticator(Context mContext) {
|
| + super(mContext);
|
| + this.mContext = mContext;
|
| + this.mContentResolver = mContext.getContentResolver();
|
| + }
|
| +
|
| + @Override
|
| + public Bundle addAccount(AccountAuthenticatorResponse response, String accountType,
|
| + String authTokenType, String[] requiredFeatures, Bundle options) {
|
| + Intent intent = new Intent(mContext, null /* AddAccountActivity.class */);
|
| + intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
|
| +
|
| + Bundle result = new Bundle();
|
| + result.putParcelable(AccountManager.KEY_INTENT, intent);
|
| + return result;
|
| + }
|
| +
|
| + @Override
|
| + public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account,
|
| + Bundle options) {
|
| + Bundle result = new Bundle();
|
| + result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
|
| + return result;
|
| + }
|
| +
|
| + @Override
|
| + public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
|
| + // Properties aren't supported
|
| + return Bundle.EMPTY;
|
| + }
|
| +
|
| + @Override
|
| + public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account,
|
| + String authTokenType, Bundle options) {
|
| + String authToken = null;
|
| + AccountManager accountManager = AccountManager.get(mContext);
|
| + Bundle result = new Bundle();
|
| +
|
| + authToken = accountManager.getUserData(account, AccountManager.KEY_AUTHTOKEN);
|
| + if (authToken == null) {
|
| + authToken = "myToken";
|
| + }
|
| +
|
| + accountManager.setUserData(account, AccountManager.KEY_AUTHTOKEN, authToken);
|
| + result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
|
| + result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
|
| + result.putString(AccountManager.KEY_AUTHTOKEN, authToken);
|
| + return result;
|
| + }
|
| +
|
| + @Override
|
| + public String getAuthTokenLabel(String authTokenType) {
|
| + return authTokenType;
|
| + }
|
| +
|
| + @Override
|
| + public Bundle hasFeatures(
|
| + AccountAuthenticatorResponse response, Account account, String[] features) {
|
| + Bundle result = new Bundle();
|
| + result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
|
| + return result;
|
| + }
|
| +
|
| + @Override
|
| + public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account,
|
| + String authTokenType, Bundle options) {
|
| + Bundle result = new Bundle();
|
| + if (!shouldFailAuth(account)) {
|
| + result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
|
| + result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
|
| + }
|
| + return result;
|
| + }
|
| +
|
| + private boolean shouldFailAuth(Account account) {
|
| + AccountManager accountManager = AccountManager.get(mContext);
|
| + return "AUTH_FAILS".equals(accountManager.getPassword(account));
|
| + }
|
| + }
|
| +}
|
|
|