diff options
author | rogerta <rogerta@chromium.org> | 2014-10-09 15:27:22 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-09 22:28:29 +0000 |
commit | d013a1ff64f832016aa0980d74622d32e29276e3 (patch) | |
tree | 3c7441b787df1a93ad52ab7cb1eb4fc96c1ce697 /sync/android | |
parent | 9ed24d0a4d60d7d35cabb0acac6ed8df20e2a69a (diff) | |
download | chromium_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.java | 26 | ||||
-rw-r--r-- | sync/android/javatests/src/org/chromium/sync/notifier/signin/AccountManagerHelperTest.java | 57 |
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")); + } +} |