| Index: chrome/android/webapk/libs/runtime_library/src/org/chromium/webapk/lib/runtime_library/WebApkServiceImpl.java
|
| diff --git a/chrome/android/webapk/libs/runtime_library/src/org/chromium/webapk/lib/runtime_library/WebApkServiceImpl.java b/chrome/android/webapk/libs/runtime_library/src/org/chromium/webapk/lib/runtime_library/WebApkServiceImpl.java
|
| index 0d18623149ebf4c8387073c3a2e5dbf81b593827..5fccbdc765864721a300d7fc9116520eaf64ac07 100644
|
| --- a/chrome/android/webapk/libs/runtime_library/src/org/chromium/webapk/lib/runtime_library/WebApkServiceImpl.java
|
| +++ b/chrome/android/webapk/libs/runtime_library/src/org/chromium/webapk/lib/runtime_library/WebApkServiceImpl.java
|
| @@ -7,16 +7,10 @@ package org.chromium.webapk.lib.runtime_library;
|
| import android.app.Notification;
|
| import android.app.NotificationManager;
|
| import android.content.Context;
|
| -import android.content.pm.PackageManager;
|
| import android.os.Binder;
|
| import android.os.Bundle;
|
| import android.os.Parcel;
|
| import android.os.RemoteException;
|
| -import android.util.Log;
|
| -
|
| -import java.util.Arrays;
|
| -import java.util.HashSet;
|
| -import java.util.Set;
|
|
|
| /**
|
| * Implements services offered by the WebAPK to Chrome.
|
| @@ -24,7 +18,7 @@ import java.util.Set;
|
| public class WebApkServiceImpl extends IWebApkApi.Stub {
|
|
|
| public static final String KEY_SMALL_ICON_ID = "small_icon_id";
|
| - public static final String KEY_HOST_BROWSER_PACKAGE = "host_browser_package";
|
| + public static final String KEY_HOST_BROWSER_UID = "host_browser_uid";
|
|
|
| private static final String TAG = "WebApkServiceImpl";
|
|
|
| @@ -36,15 +30,10 @@ public class WebApkServiceImpl extends IWebApkApi.Stub {
|
| private final int mSmallIconId;
|
|
|
| /**
|
| - * Package name of only process allowed to call the service's methods. If a process with a
|
| - * different package name calls the service, the service throws a RemoteException.
|
| + * Uid of only application allowed to call the service's methods. If an application with a
|
| + * different uid calls the service, the service throws a RemoteException.
|
| */
|
| - private final String mHostPackage;
|
| -
|
| - /**
|
| - * Uids of processes which are allowed to call the service.
|
| - */
|
| - private final Set<Integer> mAuthorizedUids = new HashSet<>();
|
| + private final int mHostUid;
|
|
|
| /**
|
| * Creates an instance of WebApkServiceImpl.
|
| @@ -54,38 +43,16 @@ public class WebApkServiceImpl extends IWebApkApi.Stub {
|
| public WebApkServiceImpl(Context context, Bundle bundle) {
|
| mContext = context;
|
| mSmallIconId = bundle.getInt(KEY_SMALL_ICON_ID);
|
| - mHostPackage = bundle.getString(KEY_HOST_BROWSER_PACKAGE);
|
| - assert mHostPackage != null;
|
| - }
|
| -
|
| - boolean checkHasAccess(int uid, PackageManager packageManager) {
|
| - String[] callingPackageNames = packageManager.getPackagesForUid(uid);
|
| - Log.d(TAG, "Verifying bind request from: " + Arrays.toString(callingPackageNames) + " "
|
| - + mHostPackage);
|
| - if (callingPackageNames == null) {
|
| - return false;
|
| - }
|
| -
|
| - for (String packageName : callingPackageNames) {
|
| - if (packageName.equals(mHostPackage)) {
|
| - return true;
|
| - }
|
| - }
|
| -
|
| - Log.e(TAG, "Unauthorized request from uid: " + uid);
|
| - return false;
|
| + mHostUid = bundle.getInt(KEY_HOST_BROWSER_UID);
|
| + assert mHostUid >= 0;
|
| }
|
|
|
| @Override
|
| public boolean onTransact(int arg0, Parcel arg1, Parcel arg2, int arg3) throws RemoteException {
|
| int callingUid = Binder.getCallingUid();
|
| - if (!mAuthorizedUids.contains(callingUid)) {
|
| - if (checkHasAccess(callingUid, mContext.getPackageManager())) {
|
| - mAuthorizedUids.add(callingUid);
|
| - } else {
|
| - throw new RemoteException("Unauthorized caller " + callingUid
|
| - + " does not match expected host=" + mHostPackage);
|
| - }
|
| + if (mHostUid != callingUid) {
|
| + throw new RemoteException("Unauthorized caller " + callingUid
|
| + + " does not match expected host=" + mHostUid);
|
| }
|
| return super.onTransact(arg0, arg1, arg2, arg3);
|
| }
|
|
|