diff options
Diffstat (limited to 'sdksandbox/tests/cts/endtoendtests/providers/loadSdkAndCheckClassloader/src/com/android/loadsdkandcheckclassloadersdkprovider/SdkProvider.java')
-rw-r--r-- | sdksandbox/tests/cts/endtoendtests/providers/loadSdkAndCheckClassloader/src/com/android/loadsdkandcheckclassloadersdkprovider/SdkProvider.java | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/sdksandbox/tests/cts/endtoendtests/providers/loadSdkAndCheckClassloader/src/com/android/loadsdkandcheckclassloadersdkprovider/SdkProvider.java b/sdksandbox/tests/cts/endtoendtests/providers/loadSdkAndCheckClassloader/src/com/android/loadsdkandcheckclassloadersdkprovider/SdkProvider.java new file mode 100644 index 0000000000..e4fdd7dce2 --- /dev/null +++ b/sdksandbox/tests/cts/endtoendtests/providers/loadSdkAndCheckClassloader/src/com/android/loadsdkandcheckclassloadersdkprovider/SdkProvider.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.loadsdkandcheckclassloadersdkprovider; + +import android.app.sdksandbox.SandboxedSdk; +import android.app.sdksandbox.SandboxedSdkProvider; +import android.content.Context; +import android.os.Binder; +import android.os.Bundle; +import android.view.View; + +import com.android.sdksandbox.SdkSandboxServiceImpl; + +public class SdkProvider extends SandboxedSdkProvider { + + @Override + public SandboxedSdk onLoadSdk(Bundle params) { + final ClassLoader ownClassloader = getClass().getClassLoader(); + if (ownClassloader == null) { + throw new RuntimeException("SdkProvider loaded in top-level classloader"); + } + + final ClassLoader contextClassloader = getContext().getClassLoader(); + if (!ownClassloader.equals(contextClassloader)) { + throw new RuntimeException("Different SdkProvider and Context classloaders"); + } + + try { + Class<?> loadedClazz = ownClassloader.loadClass(SdkSandboxServiceImpl.class.getName()); + if (!ownClassloader.equals(loadedClazz.getClassLoader())) { + throw new RuntimeException("SdkSandboxServiceImpl loaded with wrong classloader"); + } + } catch (ClassNotFoundException ex) { + throw new RuntimeException("Couldn't find class bundled with SdkProvider", ex); + } + + return new SandboxedSdk(new Binder()); + } + + @Override + public View getView(Context windowContext, Bundle params, int width, int height) { + return null; + } +} |