Extending timeouts to accommodate slow devices

Bug: 271621178
Bug: 271671403
Bug: 271672007
Bug: 271653822
Bug: 271755589
Test: ABDT
Change-Id: I4f5a6daad2b7c29e6ff5d49fc93744267a329273
diff --git a/adservices/tests/unittest/fixtures/java/com/android/adservices/service/PhFlagsFixture.java b/adservices/tests/unittest/fixtures/java/com/android/adservices/service/PhFlagsFixture.java
index f24aaad..2262fde 100644
--- a/adservices/tests/unittest/fixtures/java/com/android/adservices/service/PhFlagsFixture.java
+++ b/adservices/tests/unittest/fixtures/java/com/android/adservices/service/PhFlagsFixture.java
@@ -16,6 +16,14 @@
 
 package com.android.adservices.service;
 
+import static com.android.adservices.service.Flags.FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
+import static com.android.adservices.service.Flags.FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+import static com.android.adservices.service.Flags.FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+import static com.android.adservices.service.Flags.FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+import static com.android.adservices.service.Flags.FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+import static com.android.adservices.service.Flags.FLEDGE_BACKGROUND_FETCH_NETWORK_CONNECT_TIMEOUT_MS;
+import static com.android.adservices.service.Flags.FLEDGE_BACKGROUND_FETCH_NETWORK_READ_TIMEOUT_MS;
+import static com.android.adservices.service.Flags.FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS;
 import static com.android.adservices.service.Flags.SDK_REQUEST_PERMITS_PER_SECOND;
 import static com.android.adservices.service.PhFlags.KEY_ENFORCE_FOREGROUND_STATUS_FLEDGE_OVERRIDE;
 import static com.android.adservices.service.PhFlags.KEY_ENFORCE_FOREGROUND_STATUS_FLEDGE_REPORT_IMPRESSION;
@@ -50,6 +58,25 @@
     public static final long DEFAULT_API_RATE_LIMIT_SLEEP_MS =
             (long) (1000 / SDK_REQUEST_PERMITS_PER_SECOND) + 10L;
 
+    // TODO(b/273656890): Investigate dynamic timeouts for device types
+    public static final long ADDITIONAL_TIMEOUT = 3_000L;
+    public static final long EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS =
+            FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS + ADDITIONAL_TIMEOUT;
+    public static final long EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS =
+            FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS + ADDITIONAL_TIMEOUT;
+    public static final long EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS =
+            FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS + ADDITIONAL_TIMEOUT;
+    public static final long EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS =
+            FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS + ADDITIONAL_TIMEOUT;
+    public static final long EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS =
+            FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS + ADDITIONAL_TIMEOUT;
+    public static final long EXTENDED_FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS =
+            FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS + ADDITIONAL_TIMEOUT;
+    public static final int EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_READ_TIMEOUT_MS =
+            FLEDGE_BACKGROUND_FETCH_NETWORK_READ_TIMEOUT_MS + (int) ADDITIONAL_TIMEOUT;
+    public static final int EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_CONNECT_TIMEOUT_MS =
+            FLEDGE_BACKGROUND_FETCH_NETWORK_CONNECT_TIMEOUT_MS + (int) ADDITIONAL_TIMEOUT;
+
     public static void configureFledgeBackgroundFetchEligibleUpdateBaseIntervalS(
             final long phOverridingValue) {
         DeviceConfig.setProperty(
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdBidGeneratorImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdBidGeneratorImplTest.java
index 2ab63ba..ace590b 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdBidGeneratorImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdBidGeneratorImplTest.java
@@ -20,6 +20,7 @@
 import static android.adservices.common.AdServicesStatusUtils.STATUS_SUCCESS;
 import static android.adservices.common.AdServicesStatusUtils.STATUS_UNSET;
 
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
 import static com.android.adservices.service.adselection.AdBidGeneratorImpl.BIDDING_TIMED_OUT;
 import static com.android.adservices.service.adselection.AdBidGeneratorImpl.MISSING_TRUSTED_BIDDING_SIGNALS;
 import static com.android.adservices.service.stats.AdSelectionExecutionLogger.SCRIPT_JAVASCRIPT;
@@ -78,7 +79,6 @@
 import com.android.adservices.data.customaudience.DBCustomAudienceOverride;
 import com.android.adservices.data.customaudience.DBTrustedBiddingData;
 import com.android.adservices.service.Flags;
-import com.android.adservices.service.FlagsFactory;
 import com.android.adservices.service.common.cache.CacheProviderFactory;
 import com.android.adservices.service.common.httpclient.AdServicesHttpsClient;
 import com.android.adservices.service.devapi.CustomAudienceDevOverridesHelper;
@@ -281,6 +281,7 @@
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
 
+        mFlags = new AdBidGeneratorImplTestFlags();
         mDevContext = DevContext.createForDevOptionsDisabled();
         mLightweightExecutorService = AdServicesExecutors.getLightWeightExecutor();
         mBackgroundExecutorService = AdServicesExecutors.getBackgroundExecutor();
@@ -316,8 +317,6 @@
                 CustomAudienceBiddingInfo.create(
                         mDecisionLogicUri, BUYER_DECISION_LOGIC_JS, mCustomAudienceSignals);
 
-        mFlags = FlagsFactory.getFlagsForTest();
-
         mIsolateSettings = IsolateSettings.forMaxHeapSizeEnforcementDisabled();
 
         mRequestMatcherExactMatch =
@@ -1753,4 +1752,11 @@
             return true;
         }
     }
+
+    private static class AdBidGeneratorImplTestFlags implements Flags {
+        @Override
+        public long getAdSelectionBiddingTimeoutPerCaMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
+        }
+    }
 }
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdOutcomeSelectorImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdOutcomeSelectorImplTest.java
index 618e967..262ba58 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdOutcomeSelectorImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdOutcomeSelectorImplTest.java
@@ -16,6 +16,7 @@
 
 package com.android.adservices.service.adselection;
 
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
 import static com.android.adservices.service.adselection.AdOutcomeSelectorImpl.OUTCOME_SELECTION_TIMED_OUT;
 import static com.android.adservices.service.adselection.PrebuiltLogicGenerator.AD_OUTCOME_SELECTION_WATERFALL_MEDIATION_TRUNCATION;
 import static com.android.adservices.service.adselection.PrebuiltLogicGenerator.AD_SELECTION_FROM_OUTCOMES_USE_CASE;
@@ -96,6 +97,7 @@
     public void setup() {
         MockitoAnnotations.initMocks(this);
 
+        mFlags = new AdOutcomeSelectorImplTestFlags();
         mLightweightExecutorService = AdServicesExecutors.getLightWeightExecutor();
         mBackgroundExecutorService = AdServicesExecutors.getBackgroundExecutor();
         mBlockingExecutorService = AdServicesExecutors.getBlockingExecutor();
@@ -128,13 +130,6 @@
                                 AdSelectionDatabase.class)
                         .build()
                         .adSelectionEntryDao();
-        mFlags =
-                new Flags() {
-                    @Override
-                    public long getAdSelectionSelectingOutcomeTimeoutMs() {
-                        return 300;
-                    }
-                };
 
         mAdOutcomeSelector =
                 new AdOutcomeSelectorImpl(
@@ -277,6 +272,17 @@
                     }
                 };
 
+        AdOutcomeSelector adOutcomeSelector =
+                new AdOutcomeSelectorImpl(
+                        mMockAdSelectionScriptEngine,
+                        mLightweightExecutorService,
+                        mBackgroundExecutorService,
+                        mSchedulingExecutor,
+                        mWebClient,
+                        new AdSelectionDevOverridesHelper(
+                                DevContext.createForDevOptionsDisabled(), mAdSelectionEntryDao),
+                        flagsWithSmallerLimits);
+
         List<AdSelectionIdWithBidAndRenderUri> adverts =
                 Collections.singletonList(
                         AdSelectionIdWithBidAndRenderUri.builder()
@@ -307,7 +313,7 @@
                         () ->
                                 waitForFuture(
                                         () ->
-                                                mAdOutcomeSelector.runAdOutcomeSelector(
+                                                adOutcomeSelector.runAdOutcomeSelector(
                                                         adverts, config)));
         Assert.assertTrue(exception.getCause() instanceof UncheckedTimeoutException);
         Assert.assertEquals(exception.getCause().getMessage(), OUTCOME_SELECTION_TIMED_OUT);
@@ -388,4 +394,11 @@
         resultLatch.await();
         return futureResult.get();
     }
+
+    private static class AdOutcomeSelectorImplTestFlags implements Flags {
+        @Override
+        public long getAdSelectionSelectingOutcomeTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+        }
+    }
 }
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionE2ETest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionE2ETest.java
index ef64991..c085c3c 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionE2ETest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionE2ETest.java
@@ -26,6 +26,14 @@
 import static android.adservices.common.AdServicesStatusUtils.STATUS_USER_CONSENT_REVOKED;
 
 import static com.android.adservices.data.adselection.AdSelectionDatabase.DATABASE_NAME;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_CONNECT_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_READ_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS;
 import static com.android.adservices.service.adselection.AdSelectionRunner.ERROR_AD_SELECTION_FAILURE;
 import static com.android.adservices.service.adselection.AdSelectionRunner.ERROR_NO_BUYERS_OR_CONTEXTUAL_ADS_AVAILABLE;
 import static com.android.adservices.service.adselection.AdSelectionRunner.ERROR_NO_CA_AND_CONTEXTUAL_ADS_AVAILABLE;
@@ -5172,6 +5180,46 @@
         }
 
         @Override
+        public long getAdSelectionBiddingTimeoutPerCaMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
+        }
+
+        @Override
+        public long getAdSelectionScoringTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+        }
+
+        @Override
+        public long getAdSelectionSelectingOutcomeTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+        }
+
+        @Override
+        public long getAdSelectionOverallTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+        }
+
+        @Override
+        public long getAdSelectionFromOutcomesOverallTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+        }
+
+        @Override
+        public long getReportImpressionOverallTimeoutMs() {
+            return EXTENDED_FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS;
+        }
+
+        @Override
+        public int getFledgeBackgroundFetchNetworkConnectTimeoutMs() {
+            return EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_CONNECT_TIMEOUT_MS;
+        }
+
+        @Override
+        public int getFledgeBackgroundFetchNetworkReadTimeoutMs() {
+            return EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_READ_TIMEOUT_MS;
+        }
+
+        @Override
         public float getSdkRequestPermitsPerSecond() {
             // Unlimited rate for unit tests to avoid flake in tests due to rate
             // limiting
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionFromOutcomesE2ETest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionFromOutcomesE2ETest.java
index 964e790..988dba8 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionFromOutcomesE2ETest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionFromOutcomesE2ETest.java
@@ -21,6 +21,8 @@
 import static android.adservices.common.AdServicesStatusUtils.STATUS_INVALID_ARGUMENT;
 
 import static com.android.adservices.data.adselection.AdSelectionDatabase.DATABASE_NAME;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
 import static com.android.adservices.service.adselection.OutcomeSelectionRunner.SELECTED_OUTCOME_MUST_BE_ONE_OF_THE_INPUTS;
 import static com.android.adservices.service.stats.AdSelectionExecutionLoggerTest.DB_AD_SELECTION_FILE_SIZE;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
@@ -577,6 +579,16 @@
         }
 
         @Override
+        public long getAdSelectionSelectingOutcomeTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+        }
+
+        @Override
+        public long getAdSelectionFromOutcomesOverallTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+        }
+
+        @Override
         public float getSdkRequestPermitsPerSecond() {
             // Unlimited rate for unit tests to avoid flake in tests due to rate
             // limiting
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionServiceImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionServiceImplTest.java
index ed1f257..dcc6a34 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionServiceImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionServiceImplTest.java
@@ -28,6 +28,11 @@
 import static android.adservices.common.AdServicesStatusUtils.STATUS_USER_CONSENT_REVOKED;
 import static android.adservices.common.CommonFixture.TEST_PACKAGE_NAME;
 
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS;
 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED__API_CLASS__UNKNOWN;
 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED__API_NAME__API_NAME_UNKNOWN;
 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED__API_NAME__OVERRIDE_AD_SELECTION_CONFIG_REMOTE_INFO;
@@ -255,8 +260,7 @@
                     new EnrollmentDao(CONTEXT, DbTestUtil.getDbHelperForTest()),
                     mAdServicesLoggerMock);
 
-    private Flags mFlags = new FlagsWithEnrollmentCheckEnabledSwitch(false);
-
+    private Flags mFlags;
     private MockitoSession mStaticMockSession = null;
     @Mock private ConsentManager mConsentManagerMock;
     private CustomAudienceDao mCustomAudienceDao;
@@ -274,6 +278,7 @@
 
     @Before
     public void setUp() {
+        mFlags = new AdSelectionServicesTestsFlags(false);
         mStaticMockSession =
                 ExtendedMockito.mockitoSession()
                         .spyStatic(JSScriptEngine.class)
@@ -366,8 +371,9 @@
     public void testReportImpressionSuccessWithRegisterAdBeaconDisabled() throws Exception {
         Assume.assumeTrue(JSScriptEngine.AvailabilityChecker.isJSSandboxAvailable());
         // Re init flags with registerAdBeaconDisabled
+        boolean enrollmentCheckDisabled = false;
         mFlags =
-                new FlagsWithEnrollmentCheckEnabledSwitch(false) {
+                new AdSelectionServicesTestsFlags(enrollmentCheckDisabled) {
                     @Override
                     public boolean getFledgeRegisterAdBeaconEnabled() {
                         return false;
@@ -1072,8 +1078,9 @@
     public void testReportImpressionFailsWithRegisterAdBeaconDisabled() throws Exception {
         Assume.assumeTrue(JSScriptEngine.AvailabilityChecker.isJSSandboxAvailable());
         // Re init flags with registerAdBeaconDisabled
+        boolean enrollmentCheckDisabled = false;
         mFlags =
-                new FlagsWithEnrollmentCheckEnabledSwitch(false) {
+                new AdSelectionServicesTestsFlags(enrollmentCheckDisabled) {
                     @Override
                     public boolean getFledgeRegisterAdBeaconEnabled() {
                         return false;
@@ -1868,8 +1875,9 @@
         long maxRegisteredAdBeacons = 3;
 
         // Create new flag with overridden value so that only 3 entries can be registered
+        boolean enrollmentCheckDisabled = false;
         Flags flagsWithSmallerMaxEventUris =
-                new FlagsWithEnrollmentCheckEnabledSwitch(false) {
+                new AdSelectionServicesTestsFlags(enrollmentCheckDisabled) {
                     @Override
                     public long getFledgeReportImpressionMaxRegisteredAdBeaconsTotalCount() {
                         return maxRegisteredAdBeacons;
@@ -1955,8 +1963,9 @@
         Uri hoverUriBuyer = mMockWebServerRule.uriForPath(HOVER_BUYER_PATH);
 
         // Override flags to return a smaller max interaction key size
+        boolean enrollmentCheckDisabled = false;
         Flags flagsWithSmallerMaxInteractionKeySize =
-                new FlagsWithEnrollmentCheckEnabledSwitch(false) {
+                new AdSelectionServicesTestsFlags(enrollmentCheckDisabled) {
                     @Override
                     public long
                             getFledgeReportImpressionRegisteredAdBeaconsMaxInteractionKeySizeB() {
@@ -4703,7 +4712,8 @@
         Assume.assumeTrue(JSScriptEngine.AvailabilityChecker.isJSSandboxAvailable());
 
         // Reset flags to perform enrollment check
-        mFlags = new FlagsWithEnrollmentCheckEnabledSwitch(true);
+        boolean enrollmentCheckEnabled = true;
+        mFlags = new AdSelectionServicesTestsFlags(enrollmentCheckEnabled);
 
         Uri sellerReportingUri = mMockWebServerRule.uriForPath(mSellerReportingPath);
         Uri buyerReportingUri = mMockWebServerRule.uriForPath(mBuyerReportingPath);
@@ -7424,10 +7434,10 @@
         }
     }
 
-    private static class FlagsWithEnrollmentCheckEnabledSwitch implements Flags {
+    private static class AdSelectionServicesTestsFlags implements Flags {
         private final boolean mEnrollmentCheckEnabled;
 
-        FlagsWithEnrollmentCheckEnabledSwitch(boolean enrollmentCheckEnabled) {
+        AdSelectionServicesTestsFlags(boolean enrollmentCheckEnabled) {
             mEnrollmentCheckEnabled = enrollmentCheckEnabled;
         }
 
@@ -7452,11 +7462,6 @@
         }
 
         @Override
-        public long getReportImpressionOverallTimeoutMs() {
-            return 1000;
-        }
-
-        @Override
         public boolean getEnforceIsolateMaxHeapSize() {
             return false;
         }
@@ -7476,5 +7481,30 @@
         public boolean getFledgeAdSelectionFilteringEnabled() {
             return false;
         }
+
+        @Override
+        public long getAdSelectionBiddingTimeoutPerCaMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
+        }
+
+        @Override
+        public long getAdSelectionScoringTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+        }
+
+        @Override
+        public long getAdSelectionOverallTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+        }
+
+        @Override
+        public long getAdSelectionFromOutcomesOverallTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+        }
+
+        @Override
+        public long getReportImpressionOverallTimeoutMs() {
+            return EXTENDED_FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS;
+        }
     }
 }
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdsScoreGeneratorImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdsScoreGeneratorImplTest.java
index 3e6befd..a1617f4 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdsScoreGeneratorImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdsScoreGeneratorImplTest.java
@@ -19,6 +19,8 @@
 import static android.adservices.common.AdServicesStatusUtils.STATUS_SUCCESS;
 import static android.adservices.common.AdServicesStatusUtils.STATUS_UNSET;
 
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
 import static com.android.adservices.service.adselection.AdsScoreGeneratorImpl.MISSING_TRUSTED_SCORING_SIGNALS;
 import static com.android.adservices.service.adselection.AdsScoreGeneratorImpl.QUERY_PARAM_RENDER_URIS;
 import static com.android.adservices.service.adselection.AdsScoreGeneratorImpl.SCORES_COUNT_LESS_THAN_EXPECTED;
@@ -164,6 +166,8 @@
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
+
+        mFlags = new AdsScoreGeneratorImplTestFlags();
         mDevContext = DevContext.createForDevOptionsDisabled();
         mLightweightExecutorService = AdServicesExecutors.getLightWeightExecutor();
         mBackgroundExecutorService = AdServicesExecutors.getBackgroundExecutor();
@@ -249,18 +253,7 @@
 
         mRequestMatcherExactMatch =
                 (actualRequest, expectedRequest) -> actualRequest.equals(expectedRequest);
-        mFlags =
-                new Flags() {
-                    @Override
-                    public long getAdSelectionScoringTimeoutMs() {
-                        return 300;
-                    }
 
-                    @Override
-                    public boolean getFledgeAdSelectionContextualAdsEnabled() {
-                        return true;
-                    }
-                };
         when(mAdSelectionExecutionLoggerClock.elapsedRealtime())
                 .thenReturn(START_ELAPSED_TIMESTAMP);
         mAdSelectionExecutionLogger =
@@ -1172,5 +1165,22 @@
     interface ThrowingSupplier<T> {
         T get() throws Exception;
     }
+
+    private static class AdsScoreGeneratorImplTestFlags implements Flags {
+        @Override
+        public boolean getFledgeAdSelectionContextualAdsEnabled() {
+            return true;
+        }
+
+        @Override
+        public long getAdSelectionScoringTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+        }
+
+        @Override
+        public long getAdSelectionOverallTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+        }
+    }
 }
 
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OnDeviceAdSelectionRunnerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OnDeviceAdSelectionRunnerTest.java
index 9ad8868..06f8e94 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OnDeviceAdSelectionRunnerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OnDeviceAdSelectionRunnerTest.java
@@ -27,6 +27,12 @@
 import static android.adservices.common.AdServicesStatusUtils.STATUS_USER_CONSENT_REVOKED;
 
 import static com.android.adservices.data.adselection.AdSelectionDatabase.DATABASE_NAME;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS;
 import static com.android.adservices.service.adselection.AdSelectionRunner.AD_SELECTION_TIMED_OUT;
 import static com.android.adservices.service.adselection.AdSelectionRunner.ERROR_AD_SELECTION_FAILURE;
 import static com.android.adservices.service.adselection.AdSelectionRunner.ERROR_NO_CA_AND_CONTEXTUAL_ADS_AVAILABLE;
@@ -216,23 +222,7 @@
 
     @Mock private PerBuyerBiddingRunner mPerBuyerBiddingRunner;
 
-    private final Flags mFlags =
-            new Flags() {
-                @Override
-                public long getAdSelectionOverallTimeoutMs() {
-                    return 300;
-                }
-
-                @Override
-                public boolean getDisableFledgeEnrollmentCheck() {
-                    return true;
-                }
-
-                @Override
-                public boolean getFledgeAdSelectionFilteringEnabled() {
-                    return true;
-                }
-            };
+    private Flags mFlags = new OnDeviceAdSelectionRunnerTestFlags();
     @Spy private Context mContext = ApplicationProvider.getApplicationContext();
     private AdServicesHttpsClient mAdServicesHttpsClient;
     private ExecutorService mLightweightExecutorService;
@@ -1740,10 +1730,10 @@
         doReturn(mFlags).when(FlagsFactory::getFlags);
 
         Flags flagsWithSmallerLimits =
-                new Flags() {
+                new OnDeviceAdSelectionRunnerTestFlags() {
                     @Override
                     public long getAdSelectionOverallTimeoutMs() {
-                        return 100;
+                        return 1000;
                     }
 
                     @Override
@@ -2806,4 +2796,46 @@
         when(mMockAdSelectionIdGenerator.generateId()).thenReturn(AD_SELECTION_ID);
         assertFalse(mAdSelectionEntryDao.doesAdSelectionIdExist(AD_SELECTION_ID));
     }
+
+    private static class OnDeviceAdSelectionRunnerTestFlags implements Flags {
+        @Override
+        public boolean getDisableFledgeEnrollmentCheck() {
+            return true;
+        }
+
+        @Override
+        public boolean getFledgeAdSelectionFilteringEnabled() {
+            return true;
+        }
+
+        @Override
+        public long getAdSelectionBiddingTimeoutPerCaMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_BIDDING_TIMEOUT_PER_CA_MS;
+        }
+
+        @Override
+        public long getAdSelectionScoringTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_SCORING_TIMEOUT_MS;
+        }
+
+        @Override
+        public long getAdSelectionSelectingOutcomeTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+        }
+
+        @Override
+        public long getAdSelectionOverallTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_OVERALL_TIMEOUT_MS;
+        }
+
+        @Override
+        public long getAdSelectionFromOutcomesOverallTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+        }
+
+        @Override
+        public long getReportImpressionOverallTimeoutMs() {
+            return EXTENDED_FLEDGE_REPORT_IMPRESSION_OVERALL_TIMEOUT_MS;
+        }
+    }
 }
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OutcomeSelectionRunnerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OutcomeSelectionRunnerTest.java
index 986fd7d..91c52a3 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OutcomeSelectionRunnerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/OutcomeSelectionRunnerTest.java
@@ -21,6 +21,8 @@
 import static android.adservices.common.AdServicesStatusUtils.STATUS_TIMEOUT;
 import static android.adservices.common.AdServicesStatusUtils.STATUS_USER_CONSENT_REVOKED;
 
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED__API_NAME__API_NAME_UNKNOWN;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
@@ -125,23 +127,7 @@
     private AdSelectionEntryDao mAdSelectionEntryDao;
     @Mock private AdOutcomeSelector mAdOutcomeSelectorMock;
     private OutcomeSelectionRunner mOutcomeSelectionRunner;
-    private Flags mFlags =
-            new Flags() {
-                @Override
-                public long getAdSelectionSelectingOutcomeTimeoutMs() {
-                    return 300;
-                }
-
-                @Override
-                public boolean getDisableFledgeEnrollmentCheck() {
-                    return true;
-                }
-
-                @Override
-                public long getAdSelectionFromOutcomesOverallTimeoutMs() {
-                    return 1000;
-                }
-            };
+    private Flags mFlags = new OutcomeSelectionRunnerTestFlags();
     private final AdServicesLogger mAdServicesLoggerMock =
             ExtendedMockito.mock(AdServicesLoggerImpl.class);
     private MockitoSession mStaticMockSession = null;
@@ -443,4 +429,16 @@
                     && new HashSet<>(mTruth).equals(new HashSet<>(argument));
         }
     }
+
+    private static class OutcomeSelectionRunnerTestFlags implements Flags {
+        @Override
+        public long getAdSelectionSelectingOutcomeTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_SELECTING_OUTCOME_TIMEOUT_MS;
+        }
+
+        @Override
+        public long getAdSelectionFromOutcomesOverallTimeoutMs() {
+            return EXTENDED_FLEDGE_AD_SELECTION_FROM_OUTCOMES_OVERALL_TIMEOUT_MS;
+        }
+    }
 }
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/BackgroundFetchWorkerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/BackgroundFetchWorkerTest.java
index 43e7718..3f3e699 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/BackgroundFetchWorkerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/customaudience/BackgroundFetchWorkerTest.java
@@ -16,6 +16,9 @@
 
 package com.android.adservices.service.customaudience;
 
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_CONNECT_TIMEOUT_MS;
+import static com.android.adservices.service.PhFlagsFixture.EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_READ_TIMEOUT_MS;
+
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.util.concurrent.Futures.immediateFuture;
 import static com.google.common.util.concurrent.Futures.immediateVoidFuture;
@@ -80,7 +83,7 @@
     private static final LoggerFactory.Logger sLogger = LoggerFactory.getFledgeLogger();
     private static final Context CONTEXT = ApplicationProvider.getApplicationContext();
 
-    private Flags mFlags;
+    private final Flags mFlags = new BackgroundFetchWorkerTestFlags(true);
     private final ExecutorService mExecutorService = Executors.newFixedThreadPool(8);
 
     @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
@@ -96,18 +99,6 @@
 
     @Before
     public void setup() {
-        mFlags =
-                new Flags() {
-                    @Override
-                    public int getFledgeBackgroundFetchThreadPoolSize() {
-                        return 4;
-                    }
-
-                    @Override
-                    public boolean getFledgeAdSelectionFilteringEnabled() {
-                        return true;
-                    }
-                };
         mCustomAudienceDaoSpy =
                 Mockito.spy(
                         Room.inMemoryDatabaseBuilder(CONTEXT, CustomAudienceDatabase.class)
@@ -269,21 +260,13 @@
     @Test
     public void testRunBackgroundFetchNothingToUpdateNoFilters()
             throws ExecutionException, InterruptedException {
-        mFlags =
-                new Flags() {
-                    @Override
-                    public int getFledgeBackgroundFetchThreadPoolSize() {
-                        return 4;
-                    }
-
-                    @Override
-                    public boolean getFledgeAdSelectionFilteringEnabled() {
-                        return false;
-                    }
-                };
+        Flags flagsFilteringDisabled = new BackgroundFetchWorkerTestFlags(false);
         mBackgroundFetchWorker =
                 new BackgroundFetchWorker(
-                        mCustomAudienceDaoSpy, mFlags, mBackgroundFetchRunnerSpy, mClock);
+                        mCustomAudienceDaoSpy,
+                        flagsFilteringDisabled,
+                        mBackgroundFetchRunnerSpy,
+                        mClock);
         assertTrue(
                 mCustomAudienceDaoSpy
                         .getActiveEligibleCustomAudienceBackgroundFetchData(
@@ -593,4 +576,32 @@
                 .updateCustomAudience(any(), any());
         assertThat(completionCount.get()).isEqualTo(numEligibleCustomAudiences);
     }
+
+    private static class BackgroundFetchWorkerTestFlags implements Flags {
+        private final boolean mFledgeAdSelectionFilteringEnabled;
+
+        BackgroundFetchWorkerTestFlags(boolean fledgeAdSelectionFilteringEnabled) {
+            mFledgeAdSelectionFilteringEnabled = fledgeAdSelectionFilteringEnabled;
+        }
+
+        @Override
+        public int getFledgeBackgroundFetchThreadPoolSize() {
+            return 4;
+        }
+
+        @Override
+        public boolean getFledgeAdSelectionFilteringEnabled() {
+            return mFledgeAdSelectionFilteringEnabled;
+        }
+
+        @Override
+        public int getFledgeBackgroundFetchNetworkConnectTimeoutMs() {
+            return EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_CONNECT_TIMEOUT_MS;
+        }
+
+        @Override
+        public int getFledgeBackgroundFetchNetworkReadTimeoutMs() {
+            return EXTENDED_FLEDGE_BACKGROUND_FETCH_NETWORK_READ_TIMEOUT_MS;
+        }
+    }
 }