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

Commit d3eabb07 authored by Sanjana Sunil's avatar Sanjana Sunil Committed by Will Burr
Browse files

Set correct storage path for SDK sandbox

For WebView to run in an sdk sandbox process, Context.getDataDir() needs
to return the shared sandbox storage. This CL sets the value in
LoadedApk while binding the application and modifies bindSdkSandbox API
to take in the client app package name to use in the path.

Test: Manual, check that WebView in sandbox tries to access sandbox
shared storage
Bug: 216284889

Change-Id: I1f8bb7e533d155050710866b80047ec849a98f35
parent 477ed8b6
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -868,6 +868,7 @@ public final class ActivityThread extends ClientTransactionHandler
        String processName;
        @UnsupportedAppUsage
        ApplicationInfo appInfo;
        String sdkSandboxClientAppPackage;
        @UnsupportedAppUsage
        List<ProviderInfo> providers;
        ComponentName instrumentationName;
@@ -1113,9 +1114,9 @@ public final class ActivityThread extends ClientTransactionHandler

        @Override
        public final void bindApplication(String processName, ApplicationInfo appInfo,
                ProviderInfoList providerList, ComponentName instrumentationName,
                ProfilerInfo profilerInfo, Bundle instrumentationArgs,
                IInstrumentationWatcher instrumentationWatcher,
                String sdkSandboxClientAppPackage, ProviderInfoList providerList,
                ComponentName instrumentationName, ProfilerInfo profilerInfo,
                Bundle instrumentationArgs, IInstrumentationWatcher instrumentationWatcher,
                IUiAutomationConnection instrumentationUiConnection, int debugMode,
                boolean enableBinderTracking, boolean trackAllocation,
                boolean isRestrictedBackupMode, boolean persistent, Configuration config,
@@ -1155,6 +1156,7 @@ public final class ActivityThread extends ClientTransactionHandler
            AppBindData data = new AppBindData();
            data.processName = processName;
            data.appInfo = appInfo;
            data.sdkSandboxClientAppPackage = sdkSandboxClientAppPackage;
            data.providers = providerList.getList();
            data.instrumentationName = instrumentationName;
            data.instrumentationArgs = instrumentationArgs;
@@ -6536,6 +6538,9 @@ public final class ActivityThread extends ClientTransactionHandler
        }

        data.info = getPackageInfoNoCheck(data.appInfo, data.compatInfo);
        if (data.sdkSandboxClientAppPackage != null) {
            data.info.setSdkSandboxStorage(data.sdkSandboxClientAppPackage);
        }

        if (agent != null) {
            handleAttachAgent(agent, data.info);
+1 −1
Original line number Diff line number Diff line
@@ -1998,7 +1998,7 @@ class ContextImpl extends Context {
    private boolean bindServiceCommon(Intent service, ServiceConnection conn, int flags,
            String instanceName, Handler handler, Executor executor, UserHandle user) {
        // Keep this in sync with DevicePolicyManager.bindDeviceAdminServiceAsUser and
        // ActivityManagerLocal.bindSupplementalProcessService
        // ActivityManagerLocal.bindSdkSandboxService
        IServiceConnection sd;
        if (conn == null) {
            throw new IllegalArgumentException("connection is null");
+1 −0
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ oneway interface IApplicationThread {
    @UnsupportedAppUsage
    void scheduleStopService(IBinder token);
    void bindApplication(in String packageName, in ApplicationInfo info,
            in String sdkSandboxClientAppPackage,
            in ProviderInfoList providerList, in ComponentName testName,
            in ProfilerInfo profilerInfo, in Bundle testArguments,
            IInstrumentationWatcher testWatcher, IUiAutomationConnection uiAutomationConnection,
+21 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.content.res.CompatibilityInfo;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.FileUtils;
import android.os.GraphicsEnvironment;
import android.os.Handler;
@@ -411,6 +412,26 @@ public final class LoadedApk {
        }
    }

    /** @hide */
    void setSdkSandboxStorage(String sdkSandboxClientAppPackage) {
        int userId = UserHandle.myUserId();
        mDeviceProtectedDataDirFile = Environment
                .getDataMiscDeSharedSdkSandboxDirectory(userId, sdkSandboxClientAppPackage)
                .getAbsoluteFile();
        mCredentialProtectedDataDirFile = Environment
                .getDataMiscCeSharedSdkSandboxDirectory(userId, sdkSandboxClientAppPackage)
                .getAbsoluteFile();

        if ((mApplicationInfo.privateFlags
                & ApplicationInfo.PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE) != 0
                && PackageManager.APPLY_DEFAULT_TO_DEVICE_PROTECTED_STORAGE) {
            mDataDirFile = mDeviceProtectedDataDirFile;
        } else {
            mDataDirFile = mCredentialProtectedDataDirFile;
        }
        mDataDir = mDataDirFile.getAbsolutePath();
    }

    public static void makePaths(ActivityThread activityThread,
                                 ApplicationInfo aInfo,
                                 List<String> outZipPaths) {
+10 −0
Original line number Diff line number Diff line
@@ -477,11 +477,21 @@ public class Environment {
        return buildPath(getDataDirectory(), "misc_ce", String.valueOf(userId));
    }

    /** {@hide} */
    public static File getDataMiscCeSharedSdkSandboxDirectory(int userId, String packageName) {
        return buildPath(getDataMiscCeDirectory(userId), "sdksandbox", packageName, "shared");
    }

    /** {@hide} */
    public static File getDataMiscDeDirectory(int userId) {
        return buildPath(getDataDirectory(), "misc_de", String.valueOf(userId));
    }

    /** {@hide} */
    public static File getDataMiscDeSharedSdkSandboxDirectory(int userId, String packageName) {
        return buildPath(getDataMiscDeDirectory(userId), "sdksandbox", packageName, "shared");
    }

    private static File getDataProfilesDeDirectory(int userId) {
        return buildPath(getDataDirectory(), "misc", "profiles", "cur", String.valueOf(userId));
    }
Loading