Add method to create DevContext in a background thread
Also refactor MeasurementServiceImpl to create DevContext in the
background thread.
Bug: 288958188
Test: atest
Change-Id: I03bf626c42358aa0147d714063b6916df00a0e02
diff --git a/adservices/service-core/java/com/android/adservices/service/devapi/DevContextFilter.java b/adservices/service-core/java/com/android/adservices/service/devapi/DevContextFilter.java
index cbb40e3..7e812dc 100644
--- a/adservices/service-core/java/com/android/adservices/service/devapi/DevContextFilter.java
+++ b/adservices/service-core/java/com/android/adservices/service/devapi/DevContextFilter.java
@@ -76,26 +76,38 @@
* transaction.
*/
public DevContext createDevContext() throws IllegalStateException {
- int callingAppUid = SdkRuntimeUtil.getCallingAppUid(Binder.getCallingUidOrThrow());
- return createDevContext(callingAppUid);
+ return createDevContextFromCallingUid(Binder.getCallingUidOrThrow());
+ }
+
+ /**
+ * Creates a {@link DevContext} for a given Binder calling UID.
+ *
+ * @param callingUid The Binder calling UID.
+ * @return A dev context specifying if the developer options are enabled for this API call or a
+ * context with developer options disabled if there is any error retrieving info for the
+ * calling application.
+ */
+ public DevContext createDevContextFromCallingUid(int callingUid) {
+ return createDevContext(SdkRuntimeUtil.getCallingAppUid(callingUid));
}
/**
* Creates a {@link DevContext} for a given app UID.
*
- * @param callingUid The UID of the caller APP.
+ * @param callingAppUid The UID of the caller APP.
* @return A dev context specifying if the developer options are enabled for this API call or a
* context with developer options disabled if there is any error retrieving info for the
* calling application.
*/
@VisibleForTesting
- public DevContext createDevContext(int callingUid) {
+ public DevContext createDevContext(int callingAppUid) {
if (!isDeveloperMode()) {
return DevContext.createForDevOptionsDisabled();
}
try {
- String callingAppPackage = mAppPackageNameRetriever.getAppPackageNameForUid(callingUid);
+ String callingAppPackage =
+ mAppPackageNameRetriever.getAppPackageNameForUid(callingAppUid);
LogUtil.v("Creating Dev Context for calling app with package " + callingAppPackage);
if (!isDebuggable(callingAppPackage)) {
LogUtil.v("Non debuggable, ignoring");
@@ -110,7 +122,7 @@
LogUtil.w(
"Unable to retrieve the package name for UID %d. Creating a DevContext with "
+ "developer options disabled.",
- callingUid);
+ callingAppUid);
return DevContext.createForDevOptionsDisabled();
}
}
diff --git a/adservices/service-core/java/com/android/adservices/service/measurement/MeasurementServiceImpl.java b/adservices/service-core/java/com/android/adservices/service/measurement/MeasurementServiceImpl.java
index 953a3d6..5f27e35 100644
--- a/adservices/service-core/java/com/android/adservices/service/measurement/MeasurementServiceImpl.java
+++ b/adservices/service-core/java/com/android/adservices/service/measurement/MeasurementServiceImpl.java
@@ -59,7 +59,6 @@
import com.android.adservices.service.common.PermissionHelper;
import com.android.adservices.service.common.Throttler;
import com.android.adservices.service.consent.ConsentManager;
-import com.android.adservices.service.devapi.DevContext;
import com.android.adservices.service.devapi.DevContextFilter;
import com.android.adservices.service.measurement.access.AppPackageAccessResolver;
import com.android.adservices.service.measurement.access.DevContextAccessResolver;
@@ -170,9 +169,6 @@
final int callerUid = Binder.getCallingUidOrThrow();
final boolean attributionPermission =
PermissionHelper.hasAttributionPermission(mContext, request.getAppPackageName());
- // DevContext creation checks that the thread is the Binder thread so we must create it
- // outside of the background execution.
- DevContext devContext = mDevContextFilter.createDevContext();
sBackgroundExecutor.execute(
() -> {
performRegistration(
@@ -192,7 +188,10 @@
request.getAppPackageName()),
new UserConsentAccessResolver(mConsentManager),
new PermissionAccessResolver(attributionPermission),
- new DevContextAccessResolver(devContext, request)),
+ new DevContextAccessResolver(
+ mDevContextFilter.createDevContextFromCallingUid(
+ callerUid),
+ request)),
callback,
apiNameId,
request.getAppPackageName(),
@@ -229,9 +228,6 @@
final int callerUid = Binder.getCallingUidOrThrow();
final boolean attributionPermission =
PermissionHelper.hasAttributionPermission(mContext, request.getAppPackageName());
- // DevContext creation checks that the thread is the Binder thread so we must create it
- // outside of the background execution.
- DevContext devContext = mDevContextFilter.createDevContext();
sBackgroundExecutor.execute(
() -> {
final Supplier<Boolean> enforceForeground =
@@ -257,7 +253,8 @@
mFlags.getWebContextClientAppAllowList(),
request.getAppPackageName()),
new DevContextAccessResolver(
- devContext,
+ mDevContextFilter.createDevContextFromCallingUid(
+ callerUid),
request.getSourceRegistrationRequest())),
callback,
apiNameId,
@@ -295,9 +292,6 @@
final int callerUid = Binder.getCallingUidOrThrow();
final boolean attributionPermission =
PermissionHelper.hasAttributionPermission(mContext, request.getAppPackageName());
- // DevContext creation checks that the thread is the Binder thread so we must create it
- // outside of the background execution.
- DevContext devContext = mDevContextFilter.createDevContext();
sBackgroundExecutor.execute(
() -> {
final Supplier<Boolean> enforceForeground =
@@ -320,7 +314,8 @@
new UserConsentAccessResolver(mConsentManager),
new PermissionAccessResolver(attributionPermission),
new DevContextAccessResolver(
- devContext,
+ mDevContextFilter.createDevContextFromCallingUid(
+ callerUid),
request.getTriggerRegistrationRequest())),
callback,
apiNameId,
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/MeasurementServiceImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/MeasurementServiceImplTest.java
index 2ac5a11..7a30c49 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/MeasurementServiceImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/MeasurementServiceImplTest.java
@@ -1395,7 +1395,7 @@
private void updateDevContextDenied(boolean denied) {
if (denied) {
- when(mDevContextFilter.createDevContext())
+ when(mDevContextFilter.createDevContextFromCallingUid(anyInt()))
.thenReturn(DevContext.createForDevOptionsDisabled());
}
}