diff options
author | Anton Kulakov <akulakov@google.com> | 2022-09-06 22:48:40 +0000 |
---|---|---|
committer | Anton Kulakov <akulakov@google.com> | 2022-09-13 09:45:42 +0000 |
commit | 3a75e7b52dc225d861ec6e189de95d5a0ab095da (patch) | |
tree | 2e2169ad97a3c5d647a61a7f0eaf3ab85c4e6c20 /sdksandbox/framework/java/android/app/sdksandbox/SandboxedSdkContext.java | |
parent | fd9edb82f2a0cd502e0944c71859f42f1be7dfea (diff) | |
download | AdServices-3a75e7b52dc225d861ec6e189de95d5a0ab095da.tar.gz |
Change classloaders hierarchy for SDK loaded in sandbox
To avoid sharing classes between SdkSandbox and SDK loaded
in sandbox their classloaders shouldn't be in parent-child
relationship.
Also fixes incorrect classloader for SDK in
getContext().getClassloader()
Test: atest SdkSandboxManagerTest#loadSdkAndCheckClassloader
Bug: 243658743
Change-Id: If7d7e1a46e0eda2ddab171c8bb400f560a910fb3
Diffstat (limited to 'sdksandbox/framework/java/android/app/sdksandbox/SandboxedSdkContext.java')
-rw-r--r-- | sdksandbox/framework/java/android/app/sdksandbox/SandboxedSdkContext.java | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sdksandbox/framework/java/android/app/sdksandbox/SandboxedSdkContext.java b/sdksandbox/framework/java/android/app/sdksandbox/SandboxedSdkContext.java index 80b23e2a04..f90886fdf1 100644 --- a/sdksandbox/framework/java/android/app/sdksandbox/SandboxedSdkContext.java +++ b/sdksandbox/framework/java/android/app/sdksandbox/SandboxedSdkContext.java @@ -56,9 +56,11 @@ public final class SandboxedSdkContext extends ContextWrapper { @Nullable private final File mCeDataDir; @Nullable private final File mDeDataDir; private final SdkSandboxSystemServiceRegistry mSdkSandboxSystemServiceRegistry; + private final ClassLoader mClassLoader; public SandboxedSdkContext( @NonNull Context baseContext, + @NonNull ClassLoader classLoader, @NonNull String clientPackageName, @NonNull ApplicationInfo info, @NonNull String sdkName, @@ -66,6 +68,7 @@ public final class SandboxedSdkContext extends ContextWrapper { @Nullable String sdkDeDataDir) { this( baseContext, + classLoader, clientPackageName, info, sdkName, @@ -77,6 +80,7 @@ public final class SandboxedSdkContext extends ContextWrapper { @VisibleForTesting public SandboxedSdkContext( @NonNull Context baseContext, + @NonNull ClassLoader classLoader, @NonNull String clientPackageName, @NonNull ApplicationInfo info, @NonNull String sdkName, @@ -105,6 +109,7 @@ public final class SandboxedSdkContext extends ContextWrapper { mDeDataDir = (sdkDeDataDir != null) ? new File(sdkDeDataDir) : null; mSdkSandboxSystemServiceRegistry = sdkSandboxSystemServiceRegistry; + mClassLoader = classLoader; } /** @@ -119,6 +124,7 @@ public final class SandboxedSdkContext extends ContextWrapper { Context newBaseContext = getBaseContext().createCredentialProtectedStorageContext(); return new SandboxedSdkContext( newBaseContext, + mClassLoader, mClientPackageName, mSdkProviderInfo, mSdkName, @@ -138,6 +144,7 @@ public final class SandboxedSdkContext extends ContextWrapper { Context newBaseContext = getBaseContext().createDeviceProtectedStorageContext(); return new SandboxedSdkContext( newBaseContext, + mClassLoader, mClientPackageName, mSdkProviderInfo, mSdkName, @@ -215,4 +222,9 @@ public final class SandboxedSdkContext extends ContextWrapper { } return service; } + + @Override + public ClassLoader getClassLoader() { + return mClassLoader; + } } |