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

Commit 8975fb9c authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes I4e0bac46,I86f92508

* changes:
  Marks resolved webview provider as visible
  Make PackageManagerInternal#getPackageUid internal
parents 8d227674 efb37369
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -251,12 +251,24 @@ public abstract class PackageManagerInternal {
    public abstract @PackageManager.DistractionRestriction int getDistractingPackageRestrictions(
            String packageName, int userId);

    /**
     * Do a straight uid lookup for the given package/application in the given user. This enforces
     * app visibility rules and permissions. Call {@link #getPackageUidInternal} for the internal
     * implementation.
     * @deprecated Use {@link PackageManager#getPackageUid(String, int)}
     * @return The app's uid, or < 0 if the package was not found in that user
     */
    @Deprecated
    public abstract int getPackageUid(String packageName,
            @PackageInfoFlags int flags, int userId);

    /**
     * Do a straight uid lookup for the given package/application in the given user.
     * @see PackageManager#getPackageUidAsUser(String, int, int)
     * @return The app's uid, or < 0 if the package was not found in that user
     * TODO(b/148235092): rename this to getPackageUid
     */
    public abstract int getPackageUid(String packageName,
    public abstract int getPackageUidInternal(String packageName,
            @PackageInfoFlags int flags, int userId);

    /**
+1 −1
Original line number Diff line number Diff line
@@ -662,7 +662,7 @@ public class AppsFilter {
            String description, Throwable throwable) {
        Slog.wtf(TAG,
                "interaction: " + callingPkgSetting
                        + " -> " + targetPkgSetting.name + " "
                        + " -> " + targetPkgSetting + " "
                        + description, throwable);
    }

+9 −0
Original line number Diff line number Diff line
@@ -4555,7 +4555,10 @@ public class PackageManagerService extends IPackageManager.Stub
        flags = updateFlagsForPackage(flags, userId);
        mPermissionManager.enforceCrossUserPermission(callingUid, userId,
                false /*requireFullPermission*/, false /*checkShell*/, "getPackageUid");
        return getPackageUidInternal(packageName, flags, userId, callingUid);
    }
    private int getPackageUidInternal(String packageName, int flags, int userId, int callingUid) {
        // reader
        synchronized (mLock) {
            final AndroidPackage p = mPackages.get(packageName);
@@ -23099,6 +23102,12 @@ public class PackageManagerService extends IPackageManager.Stub
                    .getPackageUid(packageName, flags, userId);
        }
        @Override
        public int getPackageUidInternal(String packageName, int flags, int userId) {
            return PackageManagerService.this
                    .getPackageUidInternal(packageName, flags, userId, Process.SYSTEM_UID);
        }
        @Override
        public ApplicationInfo getApplicationInfo(
                String packageName, int flags, int filterCallingUid, int userId) {
+29 −3
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.os.Binder;
import android.os.PatternMatcher;
import android.os.Process;
@@ -34,6 +35,7 @@ import android.webkit.WebViewProviderInfo;
import android.webkit.WebViewProviderResponse;

import com.android.internal.util.DumpUtils;
import com.android.server.LocalServices;
import com.android.server.SystemService;

import java.io.FileDescriptor;
@@ -191,7 +193,26 @@ public class WebViewUpdateService extends SystemService {
                throw new IllegalStateException("Cannot create a WebView from the SystemServer");
            }

            return WebViewUpdateService.this.mImpl.waitForAndGetProvider();
            final WebViewProviderResponse webViewProviderResponse =
                    WebViewUpdateService.this.mImpl.waitForAndGetProvider();
            if (webViewProviderResponse.packageInfo != null) {
                grantVisibilityToCaller(
                        webViewProviderResponse.packageInfo.packageName, Binder.getCallingUid());
            }
            return webViewProviderResponse;
        }

        /**
         * Grants app visibility of the webViewPackageName to the currently bound caller.
         * @param webViewPackageName
         */
        private void grantVisibilityToCaller(String webViewPackageName, int callingUid) {
            final PackageManagerInternal pmInternal = LocalServices.getService(
                    PackageManagerInternal.class);
            final int webviewUid = pmInternal.getPackageUidInternal(
                    webViewPackageName, 0, UserHandle.getUserId(callingUid));
            pmInternal.grantImplicitAccess(UserHandle.getUserId(callingUid), null, webviewUid,
                    UserHandle.getAppId(callingUid));
        }

        /**
@@ -231,13 +252,18 @@ public class WebViewUpdateService extends SystemService {

        @Override // Binder call
        public String getCurrentWebViewPackageName() {
            PackageInfo pi = WebViewUpdateService.this.mImpl.getCurrentWebViewPackage();
            PackageInfo pi = getCurrentWebViewPackage();
            return pi == null ? null : pi.packageName;
        }

        @Override // Binder call
        public PackageInfo getCurrentWebViewPackage() {
            return WebViewUpdateService.this.mImpl.getCurrentWebViewPackage();
            final PackageInfo currentWebViewPackage =
                    WebViewUpdateService.this.mImpl.getCurrentWebViewPackage();
            if (currentWebViewPackage != null) {
                grantVisibilityToCaller(currentWebViewPackage.packageName, Binder.getCallingUid());
            }
            return currentWebViewPackage;
        }

        @Override // Binder call