Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 38f36d02 authored by Steve Elliott's avatar Steve Elliott Committed by android-build-merger
Browse files

Merge "Fix loading classloader for plugins whitelisted by component name" into...

Merge "Fix loading classloader for plugins whitelisted by component name" into qt-dev am: b730e365
am: 47350b01

Change-Id: I4aa15015a7c6eedb032be49e1914575ef0239a24
parents b91f6965 47350b01
Loading
Loading
Loading
Loading
+30 −2
Original line number Diff line number Diff line
@@ -215,7 +215,7 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage
            Uri uri = intent.getData();
            ComponentName component = ComponentName.unflattenFromString(
                    uri.toString().substring(10));
            if (mWhitelistedPlugins.contains(component.getPackageName())) {
            if (isPluginWhitelisted(component)) {
                // Don't disable whitelisted plugins as they are a part of the OS.
                return;
            }
@@ -288,7 +288,7 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage

    /** Returns class loader specific for the given plugin. */
    public ClassLoader getClassLoader(ApplicationInfo appInfo) {
        if (!isDebuggable && !mWhitelistedPlugins.contains(appInfo.packageName)) {
        if (!isDebuggable && !isPluginPackageWhitelisted(appInfo.packageName)) {
            Log.w(TAG, "Cannot get class loader for non-whitelisted plugin. Src:"
                    + appInfo.sourceDir + ", pkg: " + appInfo.packageName);
            return null;
@@ -352,6 +352,34 @@ public class PluginManagerImpl extends BroadcastReceiver implements PluginManage
        }
    }

    private boolean isPluginPackageWhitelisted(String packageName) {
        for (String componentNameOrPackage : mWhitelistedPlugins) {
            ComponentName componentName = ComponentName.unflattenFromString(componentNameOrPackage);
            if (componentName != null) {
                if (componentName.getPackageName().equals(packageName)) {
                    return true;
                }
            } else if (componentNameOrPackage.equals(packageName)) {
                return true;
            }
        }
        return false;
    }

    private boolean isPluginWhitelisted(ComponentName pluginName) {
        for (String componentNameOrPackage : mWhitelistedPlugins) {
            ComponentName componentName = ComponentName.unflattenFromString(componentNameOrPackage);
            if (componentName != null) {
                if (componentName.equals(pluginName)) {
                    return true;
                }
            } else if (componentNameOrPackage.equals(pluginName.getPackageName())) {
                return true;
            }
        }
        return false;
    }

    // This allows plugins to include any libraries or copied code they want by only including
    // classes from the plugin library.
    private static class ClassLoaderFilter extends ClassLoader {