summaryrefslogtreecommitdiffstats
path: root/sync/android
diff options
context:
space:
mode:
authorrogerta <rogerta@chromium.org>2014-10-09 15:27:22 -0700
committerCommit bot <commit-bot@chromium.org>2014-10-09 22:28:29 +0000
commitd013a1ff64f832016aa0980d74622d32e29276e3 (patch)
tree3c7441b787df1a93ad52ab7cb1eb4fc96c1ce697 /sync/android
parent9ed24d0a4d60d7d35cabb0acac6ed8df20e2a69a (diff)
downloadchromium_src-d013a1ff64f832016aa0980d74622d32e29276e3.zip
chromium_src-d013a1ff64f832016aa0980d74622d32e29276e3.tar.gz
chromium_src-d013a1ff64f832016aa0980d74622d32e29276e3.tar.bz2
Make sure GetAuthenticatedAccountId() returns a canonicalized id.
This CL is a prerequisite for: https://codereview.chromium.org/473153002/ BUG=341408 TBR=benwells@chromium.org Review URL: https://codereview.chromium.org/617183003 Cr-Commit-Position: refs/heads/master@{#298996}
Diffstat (limited to 'sync/android')
-rw-r--r--sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java26
-rw-r--r--sync/android/javatests/src/org/chromium/sync/notifier/signin/AccountManagerHelperTest.java57
2 files changed, 81 insertions, 2 deletions
diff --git a/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java b/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java
index 03df234..aa4c394 100644
--- a/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java
+++ b/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java
@@ -24,8 +24,10 @@ import org.chromium.net.NetworkChangeNotifier;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import java.util.Locale;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.regex.Pattern;
import javax.annotation.Nullable;
@@ -38,6 +40,12 @@ public class AccountManagerHelper {
private static final String TAG = "AccountManagerHelper";
+ private static final Pattern AT_SYMBOL = Pattern.compile("@");
+
+ private static final String GMAIL_COM = "gmail.com";
+
+ private static final String GOOGLEMAIL_COM = "googlemail.com";
+
public static final String GOOGLE_ACCOUNT_TYPE = "com.google";
private static final Object sLock = new Object();
@@ -124,13 +132,27 @@ public class AccountManagerHelper {
return getGoogleAccounts().length > 0;
}
+ private String canonicalizeName(String name) {
+ String[] parts = AT_SYMBOL.split(name);
+ if (parts.length != 2) return name;
+
+ if (GOOGLEMAIL_COM.equalsIgnoreCase(parts[1])) {
+ parts[1] = GMAIL_COM;
+ }
+ if (GMAIL_COM.equalsIgnoreCase(parts[1])) {
+ parts[0] = parts[0].replace(".", "");
+ }
+ return (parts[0] + "@" + parts[1]).toLowerCase(Locale.US);
+ }
+
/**
* Returns the account if it exists, null otherwise.
*/
public Account getAccountFromName(String accountName) {
- Account[] accounts = mAccountManager.getAccountsByType(GOOGLE_ACCOUNT_TYPE);
+ String canonicalName = canonicalizeName(accountName);
+ Account[] accounts = getGoogleAccounts();
for (Account account : accounts) {
- if (account.name.equals(accountName)) {
+ if (canonicalizeName(account.name).equals(canonicalName)) {
return account;
}
}
diff --git a/sync/android/javatests/src/org/chromium/sync/notifier/signin/AccountManagerHelperTest.java b/sync/android/javatests/src/org/chromium/sync/notifier/signin/AccountManagerHelperTest.java
new file mode 100644
index 0000000..8633fef
--- /dev/null
+++ b/sync/android/javatests/src/org/chromium/sync/notifier/signin/AccountManagerHelperTest.java
@@ -0,0 +1,57 @@
+// Copyright 2012 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.sync.notifier.signin;
+
+import android.accounts.Account;
+import android.content.Context;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.chromium.sync.signin.AccountManagerHelper;
+import org.chromium.sync.test.util.AccountHolder;
+import org.chromium.sync.test.util.MockAccountManager;
+
+public class AccountManagerHelperTest extends InstrumentationTestCase {
+
+ private MockAccountManager mAccountManager;
+ private AccountManagerHelper mHelper;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ Context context = getInstrumentation().getContext();
+ mAccountManager = new MockAccountManager(context, context);
+ AccountManagerHelper.overrideAccountManagerHelperForTests(context, mAccountManager);
+ mHelper = AccountManagerHelper.get(context);
+ }
+
+ private Account addTestAccount(String accountName, String password) {
+ Account account = AccountManagerHelper.createAccountFromName(accountName);
+ AccountHolder.Builder accountHolder =
+ AccountHolder.create().account(account).password(password).alwaysAccept(true);
+ mAccountManager.addAccountHolderExplicitly(accountHolder.build());
+ return account;
+ }
+
+ @SmallTest
+ public void testCanonicalAccount() throws InterruptedException {
+ addTestAccount("test@gmail.com", "password");
+
+ assertTrue(mHelper.hasAccountForName("test@gmail.com"));
+ assertTrue(mHelper.hasAccountForName("Test@gmail.com"));
+ assertTrue(mHelper.hasAccountForName("te.st@gmail.com"));
+ }
+
+ @SmallTest
+ public void testNonCanonicalAccount() throws InterruptedException {
+ addTestAccount("test.me@gmail.com", "password");
+
+ assertTrue(mHelper.hasAccountForName("test.me@gmail.com"));
+ assertTrue(mHelper.hasAccountForName("testme@gmail.com"));
+ assertTrue(mHelper.hasAccountForName("Testme@gmail.com"));
+ assertTrue(mHelper.hasAccountForName("te.st.me@gmail.com"));
+ }
+}