diff options
author | Steven Moreland <smoreland@google.com> | 2019-06-24 14:46:25 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-06-24 14:46:25 -0700 |
commit | df99ad0cf9ce7a19abec9acdc002a79d6b41def1 (patch) | |
tree | 734b393fcf66c611bb8c4fbc22efa683b4a38ba5 | |
parent | 31bfec7f19b1183067a2d26195d3001be308e0df (diff) | |
parent | 6245e7efe6448938a4ccf1383f92d29c92886207 (diff) |
Merge changes Ic2e27f56,Ie19e0995 am: 95f507f80d
am: 6245e7efe6
Change-Id: Ic44dfe2b3defa6f60bee6062c049ff189223cb50
3 files changed, 7 insertions, 174 deletions
diff --git a/core/java/android/os/IServiceManager.java b/core/java/android/os/IServiceManager.java index bc0690dbceab..053c5ede7224 100644 --- a/core/java/android/os/IServiceManager.java +++ b/core/java/android/os/IServiceManager.java @@ -57,13 +57,6 @@ public interface IServiceManager extends IInterface */ String[] listServices(int dumpFlags) throws RemoteException; - /** - * Assign a permission controller to the service manager. After set, this - * interface is checked before any services are added. - */ - void setPermissionController(IPermissionController controller) - throws RemoteException; - static final String descriptor = "android.os.IServiceManager"; int GET_SERVICE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION; diff --git a/core/java/android/os/ServiceManagerNative.java b/core/java/android/os/ServiceManagerNative.java index b7c026c7f87c..011dfa03c70a 100644 --- a/core/java/android/os/ServiceManagerNative.java +++ b/core/java/android/os/ServiceManagerNative.java @@ -17,16 +17,18 @@ package android.os; import android.annotation.UnsupportedAppUsage; -import java.util.ArrayList; +import java.util.ArrayList; /** * Native implementation of the service manager. Most clients will only - * care about getDefault() and possibly asInterface(). + * care about asInterface(). + * * @hide */ -public abstract class ServiceManagerNative extends Binder implements IServiceManager -{ +public final class ServiceManagerNative { + private ServiceManagerNative() {} + /** * Cast a Binder object into a service manager interface, generating * a proxy if needed. @@ -38,76 +40,13 @@ public abstract class ServiceManagerNative extends Binder implements IServiceMan return null; } IServiceManager in = - (IServiceManager)obj.queryLocalInterface(descriptor); + (IServiceManager) obj.queryLocalInterface(IServiceManager.descriptor); if (in != null) { return in; } return new ServiceManagerProxy(obj); } - - public ServiceManagerNative() - { - attachInterface(this, descriptor); - } - - public boolean onTransact(int code, Parcel data, Parcel reply, int flags) - { - try { - switch (code) { - case IServiceManager.GET_SERVICE_TRANSACTION: { - data.enforceInterface(IServiceManager.descriptor); - String name = data.readString(); - IBinder service = getService(name); - reply.writeStrongBinder(service); - return true; - } - - case IServiceManager.CHECK_SERVICE_TRANSACTION: { - data.enforceInterface(IServiceManager.descriptor); - String name = data.readString(); - IBinder service = checkService(name); - reply.writeStrongBinder(service); - return true; - } - - case IServiceManager.ADD_SERVICE_TRANSACTION: { - data.enforceInterface(IServiceManager.descriptor); - String name = data.readString(); - IBinder service = data.readStrongBinder(); - boolean allowIsolated = data.readInt() != 0; - int dumpPriority = data.readInt(); - addService(name, service, allowIsolated, dumpPriority); - return true; - } - - case IServiceManager.LIST_SERVICES_TRANSACTION: { - data.enforceInterface(IServiceManager.descriptor); - int dumpPriority = data.readInt(); - String[] list = listServices(dumpPriority); - reply.writeStringArray(list); - return true; - } - - case IServiceManager.SET_PERMISSION_CONTROLLER_TRANSACTION: { - data.enforceInterface(IServiceManager.descriptor); - IPermissionController controller = - IPermissionController.Stub.asInterface( - data.readStrongBinder()); - setPermissionController(controller); - return true; - } - } - } catch (RemoteException e) { - } - - return false; - } - - public IBinder asBinder() - { - return this; - } } class ServiceManagerProxy implements IServiceManager { @@ -188,17 +127,6 @@ class ServiceManagerProxy implements IServiceManager { return array; } - public void setPermissionController(IPermissionController controller) - throws RemoteException { - Parcel data = Parcel.obtain(); - Parcel reply = Parcel.obtain(); - data.writeInterfaceToken(IServiceManager.descriptor); - data.writeStrongBinder(controller.asBinder()); - mRemote.transact(SET_PERMISSION_CONTROLLER_TRANSACTION, data, reply, 0); - reply.recycle(); - data.recycle(); - } - @UnsupportedAppUsage private IBinder mRemote; } diff --git a/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java deleted file mode 100644 index dcbbdbbcd320..000000000000 --- a/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2009 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.framework.permission.tests; - -import com.android.internal.os.BinderInternal; - -import android.app.AppOpsManager; -import android.os.Binder; -import android.os.IPermissionController; -import android.os.RemoteException; -import android.os.ServiceManager; -import android.os.ServiceManagerNative; -import android.test.suitebuilder.annotation.SmallTest; - -import junit.framework.TestCase; - -/** - * TODO: Remove this. This is only a placeholder, need to implement this. - */ -public class ServiceManagerPermissionTests extends TestCase { - @SmallTest - public void testAddService() { - try { - // The security in the service manager is that you can't replace - // a service that is already published. - Binder binder = new Binder(); - ServiceManager.addService("activity", binder); - fail("ServiceManager.addService did not throw SecurityException as" - + " expected"); - } catch (SecurityException e) { - // expected - } - } - - @SmallTest - public void testSetPermissionController() { - try { - IPermissionController pc = new IPermissionController.Stub() { - @Override - public boolean checkPermission(java.lang.String permission, int pid, int uid) { - return true; - } - - @Override - public int noteOp(String op, int uid, String packageName) { - return AppOpsManager.MODE_ALLOWED; - } - - @Override - public String[] getPackagesForUid(int uid) { - return new String[0]; - } - - @Override - public boolean isRuntimePermission(String permission) { - return false; - } - - @Override - public int getPackageUid(String packageName, int flags) { - return -1; - } - }; - ServiceManagerNative.asInterface(BinderInternal.getContextObject()) - .setPermissionController(pc); - fail("IServiceManager.setPermissionController did not throw SecurityException as" - + " expected"); - } catch (SecurityException e) { - // expected - } catch (RemoteException e) { - fail("Unexpected remote exception"); - } - } -} |