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

Side by Side Diff: sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java

Issue 617183003: Make sure GetAuthenticatedAccountId() returns a canonicalized id. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Hui's comments, fix cvox tests Created 6 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.sync.signin; 5 package org.chromium.sync.signin;
6 6
7 7
8 import android.accounts.Account; 8 import android.accounts.Account;
9 import android.accounts.AccountManager; 9 import android.accounts.AccountManager;
10 import android.accounts.AccountManagerFuture; 10 import android.accounts.AccountManagerFuture;
11 import android.accounts.AuthenticatorDescription; 11 import android.accounts.AuthenticatorDescription;
12 import android.accounts.AuthenticatorException; 12 import android.accounts.AuthenticatorException;
13 import android.accounts.OperationCanceledException; 13 import android.accounts.OperationCanceledException;
14 import android.app.Activity; 14 import android.app.Activity;
15 import android.content.Context; 15 import android.content.Context;
16 import android.content.Intent; 16 import android.content.Intent;
17 import android.os.AsyncTask; 17 import android.os.AsyncTask;
18 import android.os.Bundle; 18 import android.os.Bundle;
19 import android.util.Log; 19 import android.util.Log;
20 20
21 import org.chromium.base.ThreadUtils; 21 import org.chromium.base.ThreadUtils;
22 import org.chromium.base.VisibleForTesting; 22 import org.chromium.base.VisibleForTesting;
23 import org.chromium.net.NetworkChangeNotifier; 23 import org.chromium.net.NetworkChangeNotifier;
24 24
25 import java.io.IOException; 25 import java.io.IOException;
26 import java.util.ArrayList; 26 import java.util.ArrayList;
27 import java.util.List; 27 import java.util.List;
28 import java.util.Locale;
28 import java.util.concurrent.atomic.AtomicBoolean; 29 import java.util.concurrent.atomic.AtomicBoolean;
29 import java.util.concurrent.atomic.AtomicInteger; 30 import java.util.concurrent.atomic.AtomicInteger;
31 import java.util.regex.Pattern;
30 32
31 import javax.annotation.Nullable; 33 import javax.annotation.Nullable;
32 34
33 /** 35 /**
34 * AccountManagerHelper wraps our access of AccountManager in Android. 36 * AccountManagerHelper wraps our access of AccountManager in Android.
35 * 37 *
36 * Use the AccountManagerHelper.get(someContext) to instantiate it 38 * Use the AccountManagerHelper.get(someContext) to instantiate it
37 */ 39 */
38 public class AccountManagerHelper { 40 public class AccountManagerHelper {
39 41
40 private static final String TAG = "AccountManagerHelper"; 42 private static final String TAG = "AccountManagerHelper";
41 43
44 private static final Pattern AT_SYMBOL = Pattern.compile("@");
45
46 private static final String GMAIL_COM = "gmail.com";
47
48 private static final String GOOGLEMAIL_COM = "googlemail.com";
49
42 public static final String GOOGLE_ACCOUNT_TYPE = "com.google"; 50 public static final String GOOGLE_ACCOUNT_TYPE = "com.google";
43 51
44 private static final Object sLock = new Object(); 52 private static final Object sLock = new Object();
45 53
46 private static final int MAX_TRIES = 3; 54 private static final int MAX_TRIES = 3;
47 55
48 private static AccountManagerHelper sAccountManagerHelper; 56 private static AccountManagerHelper sAccountManagerHelper;
49 57
50 private final AccountManagerDelegate mAccountManager; 58 private final AccountManagerDelegate mAccountManager;
51 59
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 } 123 }
116 124
117 public Account[] getGoogleAccounts() { 125 public Account[] getGoogleAccounts() {
118 return mAccountManager.getAccountsByType(GOOGLE_ACCOUNT_TYPE); 126 return mAccountManager.getAccountsByType(GOOGLE_ACCOUNT_TYPE);
119 } 127 }
120 128
121 public boolean hasGoogleAccounts() { 129 public boolean hasGoogleAccounts() {
122 return getGoogleAccounts().length > 0; 130 return getGoogleAccounts().length > 0;
123 } 131 }
124 132
133 private String canonicalizeName(String name) {
134 String[] parts = AT_SYMBOL.split(name);
135 if (parts.length != 2) return name;
136
137 if (GOOGLEMAIL_COM.equalsIgnoreCase(parts[1])) {
138 parts[1] = GMAIL_COM;
139 }
140 if (GMAIL_COM.equalsIgnoreCase(parts[1])) {
141 parts[0] = parts[0].replace(".", "");
142 }
143 return (parts[0] + "@" + parts[1]).toLowerCase(Locale.US);
144 }
145
125 /** 146 /**
126 * Returns the account if it exists, null otherwise. 147 * Returns the account if it exists, null otherwise.
127 */ 148 */
128 public Account getAccountFromName(String accountName) { 149 public Account getAccountFromName(String accountName) {
129 Account[] accounts = mAccountManager.getAccountsByType(GOOGLE_ACCOUNT_TY PE); 150 String canonicalName = canonicalizeName(accountName);
151 Account[] accounts = getGoogleAccounts();
130 for (Account account : accounts) { 152 for (Account account : accounts) {
131 if (account.name.equals(accountName)) { 153 if (canonicalizeName(account.name).equals(canonicalName)) {
132 return account; 154 return account;
133 } 155 }
134 } 156 }
135 return null; 157 return null;
136 } 158 }
137 159
138 /** 160 /**
139 * Returns whether the accounts exists. 161 * Returns whether the accounts exists.
140 */ 162 */
141 public boolean hasAccountForName(String accountName) { 163 public boolean hasAccountForName(String accountName) {
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 null, account, authTokenType, callback, numTries, errorEncountered, null); 365 null, account, authTokenType, callback, numTries, errorEncountered, null);
344 } 366 }
345 367
346 /** 368 /**
347 * Removes an auth token from the AccountManager's cache. 369 * Removes an auth token from the AccountManager's cache.
348 */ 370 */
349 public void invalidateAuthToken(String authToken) { 371 public void invalidateAuthToken(String authToken) {
350 mAccountManager.invalidateAuthToken(GOOGLE_ACCOUNT_TYPE, authToken); 372 mAccountManager.invalidateAuthToken(GOOGLE_ACCOUNT_TYPE, authToken);
351 } 373 }
352 } 374 }
OLDNEW
« components/signin/core/browser/signin_manager_base.cc ('K') | « google_apis/drive/auth_service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698