[Signin][Android] Use real policies in FirstRunActivitySigninAndSyncTest

After this CL, FirstRunActivitySigninAndSyncTest no longer mocks
FirstRunAppRestrictionInfo. Instead, the test now uses @Policies
annotation.
This CL also adds a check for test policies into
FirstRunAppRestrictionInfo so it can work correctly with @Policies
annotation.

Bug: None
Change-Id: I8fc4c279b670586425410b5a0127ad80e430a3d8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3826282
Reviewed-by: Tanmoy Mollik <triploblastic@chromium.org>
Reviewed-by: Fabio Tirelo <ftirelo@chromium.org>
Auto-Submit: Boris Sazonov <bsazonov@chromium.org>
Commit-Queue: Fabio Tirelo <ftirelo@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1034460}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunAppRestrictionInfo.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunAppRestrictionInfo.java
index 040162a..e253e15 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunAppRestrictionInfo.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunAppRestrictionInfo.java
@@ -19,6 +19,7 @@
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.task.AsyncTask;
 import org.chromium.base.task.TaskTraits;
+import org.chromium.components.policy.AbstractAppRestrictionsProvider;
 import org.chromium.components.policy.AppRestrictionsProvider;
 import org.chromium.components.policy.PolicySwitches;
 
@@ -144,6 +145,11 @@
             return;
         }
 
+        if (AbstractAppRestrictionsProvider.hasTestRestrictions()) {
+            onRestrictionDetected(true, startTime);
+            return;
+        }
+
         Context appContext = ContextUtils.getApplicationContext();
         try {
             mFetchAppRestrictionAsyncTask = new AsyncTask<Boolean>() {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java
index fa61367..357d449 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java
@@ -29,7 +29,6 @@
 import androidx.test.filters.MediumTest;
 
 import org.hamcrest.Matcher;
-import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
@@ -37,7 +36,6 @@
 import org.junit.rules.TestRule;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
 
@@ -59,6 +57,7 @@
 import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule;
 import org.chromium.chrome.test.util.browser.sync.SyncTestUtil;
 import org.chromium.components.externalauth.ExternalAuthUtils;
+import org.chromium.components.policy.test.annotations.Policies;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 
 /**
@@ -89,9 +88,6 @@
     @Mock
     private LocaleManagerDelegate mLocalManagerDelegateMock;
 
-    @Mock
-    private FirstRunAppRestrictionInfo mFirstRunAppRestrictionInfoMock;
-
     @Before
     public void setUp() {
         when(mLocalManagerDelegateMock.getSearchEnginePromoShowType())
@@ -103,11 +99,6 @@
         ExternalAuthUtils.setInstanceForTesting(mExternalAuthUtilsMock);
     }
 
-    @After
-    public void tearDown() {
-        FirstRunAppRestrictionInfo.setInitializedInstanceForTest(null);
-    }
-
     @Test
     @MediumTest
     public void dismissButtonClickSkipsSyncConsentPageWhenNoAccountsAreOnDevice() {
@@ -146,10 +137,10 @@
 
     @Test
     @MediumTest
+    // ChildAccountStatusSupplier uses AppRestrictions to quickly detect non-supervised cases,
+    // adding at least one policy via AppRestrictions prevents that.
+    @Policies.Add(@Policies.Item(key = "ForceSafeSearch", string = "true"))
     public void continueButtonClickShowsSyncConsentPageWithChildAccount() {
-        // ChildAccountStatusSupplier uses AppRestrictions to quickly detect non-supervised cases.
-        Mockito.doNothing().when(mFirstRunAppRestrictionInfoMock).getHasAppRestriction(any());
-        FirstRunAppRestrictionInfo.setInitializedInstanceForTest(mFirstRunAppRestrictionInfoMock);
         mAccountManagerTestRule.addAccount(CHILD_EMAIL);
         launchFirstRunActivity();
         ensureCurrentPageIs(SigninFirstRunFragment.class);
diff --git a/components/policy/android/java/src/org/chromium/components/policy/AbstractAppRestrictionsProvider.java b/components/policy/android/java/src/org/chromium/components/policy/AbstractAppRestrictionsProvider.java
index 059f0ad..23556b12 100644
--- a/components/policy/android/java/src/org/chromium/components/policy/AbstractAppRestrictionsProvider.java
+++ b/components/policy/android/java/src/org/chromium/components/policy/AbstractAppRestrictionsProvider.java
@@ -121,4 +121,9 @@
                 (policies == null ? null : policies.keySet().toArray()));
         sTestRestrictions = policies;
     }
+
+    /** Returns whether any restrictions were set using {@link #setTestRestrictions}. */
+    public static boolean hasTestRestrictions() {
+        return sTestRestrictions != null;
+    }
 }