Commit 00e32133 authored by Tanmoy Mollik's avatar Tanmoy Mollik Committed by Chromium LUCI CQ

[Android] Add a histogram to record number of android accounts on device

Adds a histogram that records number of android accounts present on
device even if the user isn't signed in.

Bug: 1025410
Change-Id: Ide66597ea3da5857e6f7ccd5bec018b54ebc03e6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2607306Reviewed-by: default avatarAlex Ilin <alexilin@chromium.org>
Reviewed-by: default avatarBoris Sazonov <bsazonov@chromium.org>
Reviewed-by: default avatarAlice Wang <aliceywang@chromium.org>
Commit-Queue: Tanmoy Mollik <triploblastic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#840676}
parent f341fdf0
...@@ -448,6 +448,10 @@ public class AccountManagerFacadeImpl implements AccountManagerFacade { ...@@ -448,6 +448,10 @@ public class AccountManagerFacadeImpl implements AccountManagerFacade {
@Override @Override
protected void onPostExecute(Void v) { protected void onPostExecute(Void v) {
// Records number of Android accounts present on device.
RecordHistogram.recordExactLinearHistogram(
"Signin.AndroidNumberOfDeviceAccounts", tryGetGoogleAccounts().size(), 50);
for (Runnable callback : mCallbacksWaitingForCachePopulation) { for (Runnable callback : mCallbacksWaitingForCachePopulation) {
callback.run(); callback.run();
} }
......
...@@ -7,6 +7,7 @@ package org.chromium.components.signin.test; ...@@ -7,6 +7,7 @@ package org.chromium.components.signin.test;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.MockitoAnnotations.initMocks;
import static org.robolectric.Shadows.shadowOf; import static org.robolectric.Shadows.shadowOf;
import android.accounts.Account; import android.accounts.Account;
...@@ -23,11 +24,15 @@ import org.junit.Assert; ...@@ -23,11 +24,15 @@ import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import org.chromium.base.metrics.UmaRecorder;
import org.chromium.base.metrics.UmaRecorderHolder;
import org.chromium.base.task.test.CustomShadowAsyncTask; import org.chromium.base.task.test.CustomShadowAsyncTask;
import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.components.signin.AccountManagerDelegateException; import org.chromium.components.signin.AccountManagerDelegateException;
import org.chromium.components.signin.AccountManagerFacade; import org.chromium.components.signin.AccountManagerFacade;
import org.chromium.components.signin.AccountManagerFacadeImpl; import org.chromium.components.signin.AccountManagerFacadeImpl;
...@@ -39,6 +44,7 @@ import org.chromium.components.signin.test.util.FakeAccountManagerDelegate; ...@@ -39,6 +44,7 @@ import org.chromium.components.signin.test.util.FakeAccountManagerDelegate;
import org.chromium.testing.local.CustomShadowUserManager; import org.chromium.testing.local.CustomShadowUserManager;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
/** /**
...@@ -52,8 +58,13 @@ public class AccountManagerFacadeRobolectricTest { ...@@ -52,8 +58,13 @@ public class AccountManagerFacadeRobolectricTest {
private FakeAccountManagerDelegate mDelegate; private FakeAccountManagerDelegate mDelegate;
private AccountManagerFacade mFacade; private AccountManagerFacade mFacade;
@Mock
private UmaRecorder mUmaRecorderMock;
@Before @Before
public void setUp() { public void setUp() {
initMocks(this);
UmaRecorderHolder.setNonNativeDelegate(mUmaRecorderMock);
Context context = RuntimeEnvironment.application; Context context = RuntimeEnvironment.application;
UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE); UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mShadowUserManager = (CustomShadowUserManager) shadowOf(userManager); mShadowUserManager = (CustomShadowUserManager) shadowOf(userManager);
...@@ -87,6 +98,22 @@ public class AccountManagerFacadeRobolectricTest { ...@@ -87,6 +98,22 @@ public class AccountManagerFacadeRobolectricTest {
verify(delegate).registerObservers(); verify(delegate).registerObservers();
} }
@Test
@SmallTest
public void testCountOfAccountLoggedAfterAccountsFetched() {
addTestAccount("test@gmail.com");
AccountManagerFacade facade = new AccountManagerFacadeImpl(mDelegate);
CallbackHelper callbackHelper = new CallbackHelper();
facade.runAfterCacheIsPopulated(() -> callbackHelper.notifyCalled());
try {
callbackHelper.waitForFirst();
} catch (TimeoutException e) {
throw new RuntimeException("Timed out waiting for callback", e);
}
verify(mUmaRecorderMock)
.recordLinearHistogram("Signin.AndroidNumberOfDeviceAccounts", 1, 1, 50, 51);
}
@Test @Test
@SmallTest @SmallTest
public void testCanonicalAccount() { public void testCanonicalAccount() {
......
...@@ -173,6 +173,15 @@ prefs when the profile is loaded. --> ...@@ -173,6 +173,15 @@ prefs when the profile is loaded. -->
</summary> </summary>
</histogram> </histogram>
<histogram name="Signin.AndroidNumberOfDeviceAccounts" units="accounts"
expires_after="2021-08-31">
<owner>triploblastic@chromium.org</owner>
<owner>aliceywang@chromium.org</owner>
<summary>
The number of Android accounts present on the device. Recorded on startup.
</summary>
</histogram>
<histogram name="Signin.AndroidPopulateAccountCacheWaitingTime" units="ms" <histogram name="Signin.AndroidPopulateAccountCacheWaitingTime" units="ms"
expires_after="2021-08-16"> expires_after="2021-08-16">
<owner>bsazonov@chromium.org</owner> <owner>bsazonov@chromium.org</owner>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment