diff options
| author | Android (Google) Code Review <android-gerrit@google.com> | 2009-06-15 15:07:50 -0700 | 
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-06-15 15:07:50 -0700 | 
| commit | 6edb3487beb1973b1ea05e5b4168ba1ac247c9a4 (patch) | |
| tree | b860066f410306fa8fc7ed707f4b7dea7555b4aa | |
| parent | acec4d6741643a5f0bda0b6a4eeb033a963818dc (diff) | |
| parent | cfaef699e1dfb3a75d5b51f3b15816f13670fd51 (diff) | |
| download | frameworks_base-6edb3487beb1973b1ea05e5b4168ba1ac247c9a4.zip frameworks_base-6edb3487beb1973b1ea05e5b4168ba1ac247c9a4.tar.gz frameworks_base-6edb3487beb1973b1ea05e5b4168ba1ac247c9a4.tar.bz2 | |
Merge change 4234 into donut
* changes:
  Implement permission test for activity, window, service manager.
4 files changed, 736 insertions, 57 deletions
| diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java index 828b8aa..3b47ae7 100644 --- a/services/java/com/android/server/WindowManagerService.java +++ b/services/java/com/android/server/WindowManagerService.java @@ -174,6 +174,10 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo       */      static final int DIM_DURATION_MULTIPLIER = 6; +    static final int INJECT_FAILED = 0; +    static final int INJECT_SUCCEEDED = 1; +    static final int INJECT_NO_PERMISSION = -1; +          static final int UPDATE_FOCUS_NORMAL = 0;      static final int UPDATE_FOCUS_WILL_ASSIGN_LAYERS = 1;      static final int UPDATE_FOCUS_PLACING_SURFACES = 2; @@ -1317,7 +1321,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo              // Update Orientation after adding a window, only if the window needs to be              // displayed right away              if (win.isVisibleOrAdding()) { -                if (updateOrientationFromAppTokens(null, null) != null) { +                if (updateOrientationFromAppTokensUnchecked(null, null) != null) {                      sendNewConfiguration();                  }              } @@ -1956,7 +1960,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void addWindowToken(IBinder token, int type) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "addWindowToken()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          synchronized(mWindowMap) { @@ -1974,7 +1978,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void removeWindowToken(IBinder token) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "removeWindowToken()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          final long origId = Binder.clearCallingIdentity(); @@ -2027,7 +2031,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo              int groupId, int requestedOrientation, boolean fullscreen) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "addAppToken()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          synchronized(mWindowMap) { @@ -2056,7 +2060,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void setAppGroupId(IBinder token, int groupId) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "setAppStartingIcon()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          synchronized(mWindowMap) { @@ -2154,8 +2158,22 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public Configuration updateOrientationFromAppTokens(              Configuration currentConfig, IBinder freezeThisOneIfNeeded) { +        if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS, +                "updateOrientationFromAppTokens()")) { +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission"); +        } +                  Configuration config;          long ident = Binder.clearCallingIdentity(); +        config = updateOrientationFromAppTokensUnchecked(currentConfig, +                freezeThisOneIfNeeded); +        Binder.restoreCallingIdentity(ident); +        return config; +    } + +    Configuration updateOrientationFromAppTokensUnchecked( +            Configuration currentConfig, IBinder freezeThisOneIfNeeded) { +        Configuration config;          synchronized(mWindowMap) {              config = updateOrientationFromAppTokensLocked(currentConfig, freezeThisOneIfNeeded);          } @@ -2163,7 +2181,6 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo              mLayoutNeeded = true;              performLayoutAndPlaceSurfacesLocked();          } -        Binder.restoreCallingIdentity(ident);          return config;      } @@ -2235,7 +2252,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void setAppOrientation(IApplicationToken token, int requestedOrientation) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "setAppOrientation()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          synchronized(mWindowMap) { @@ -2263,7 +2280,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void setFocusedApp(IBinder token, boolean moveFocusNow) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "setFocusedApp()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          synchronized(mWindowMap) { @@ -2296,7 +2313,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void prepareAppTransition(int transit) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "prepareAppTransition()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          synchronized(mWindowMap) { @@ -2325,7 +2342,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void executeAppTransition() {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "executeAppTransition()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          synchronized(mWindowMap) { @@ -2345,7 +2362,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo              IBinder transferFrom, boolean createIfNeeded) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "setAppStartingIcon()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          synchronized(mWindowMap) { @@ -2479,7 +2496,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void setAppWillBeHidden(IBinder token) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "setAppWillBeHidden()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          AppWindowToken wtoken; @@ -2590,7 +2607,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void setAppVisibility(IBinder token, boolean visible) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "setAppVisibility()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          AppWindowToken wtoken; @@ -2720,7 +2737,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void startAppFreezingScreen(IBinder token, int configChanges) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "setAppFreezingScreen()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          synchronized(mWindowMap) { @@ -2743,7 +2760,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void stopAppFreezingScreen(IBinder token, boolean force) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "setAppFreezingScreen()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          synchronized(mWindowMap) { @@ -2762,7 +2779,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void removeAppToken(IBinder token) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "removeAppToken()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          AppWindowToken wtoken = null; @@ -2930,7 +2947,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void moveAppToken(int index, IBinder token) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "moveAppToken()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          synchronized(mWindowMap) { @@ -3012,7 +3029,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void moveAppTokensToTop(List<IBinder> tokens) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "moveAppTokensToTop()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          final long origId = Binder.clearCallingIdentity(); @@ -3033,7 +3050,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void moveAppTokensToBottom(List<IBinder> tokens) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "moveAppTokensToBottom()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          final long origId = Binder.clearCallingIdentity(); @@ -3120,7 +3137,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void setAnimationScale(int which, float scale) {          if (!checkCallingPermission(android.Manifest.permission.SET_ANIMATION_SCALE,                  "setAnimationScale()")) { -            return; +            throw new SecurityException("Requires SET_ANIMATION_SCALE permission");          }          if (scale < 0) scale = 0; @@ -3138,7 +3155,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void setAnimationScales(float[] scales) {          if (!checkCallingPermission(android.Manifest.permission.SET_ANIMATION_SCALE,                  "setAnimationScale()")) { -            return; +            throw new SecurityException("Requires SET_ANIMATION_SCALE permission");          }          if (scales != null) { @@ -3169,7 +3186,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public int getSwitchState(int sw) {          if (!checkCallingPermission(android.Manifest.permission.READ_INPUT_STATE,                  "getSwitchState()")) { -            return -1; +            throw new SecurityException("Requires READ_INPUT_STATE permission");          }          return KeyInputQueue.getSwitchState(sw);      } @@ -3177,7 +3194,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public int getSwitchStateForDevice(int devid, int sw) {          if (!checkCallingPermission(android.Manifest.permission.READ_INPUT_STATE,                  "getSwitchStateForDevice()")) { -            return -1; +            throw new SecurityException("Requires READ_INPUT_STATE permission");          }          return KeyInputQueue.getSwitchState(devid, sw);      } @@ -3185,7 +3202,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public int getScancodeState(int sw) {          if (!checkCallingPermission(android.Manifest.permission.READ_INPUT_STATE,                  "getScancodeState()")) { -            return -1; +            throw new SecurityException("Requires READ_INPUT_STATE permission");          }          return KeyInputQueue.getScancodeState(sw);      } @@ -3193,7 +3210,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public int getScancodeStateForDevice(int devid, int sw) {          if (!checkCallingPermission(android.Manifest.permission.READ_INPUT_STATE,                  "getScancodeStateForDevice()")) { -            return -1; +            throw new SecurityException("Requires READ_INPUT_STATE permission");          }          return KeyInputQueue.getScancodeState(devid, sw);      } @@ -3201,7 +3218,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public int getKeycodeState(int sw) {          if (!checkCallingPermission(android.Manifest.permission.READ_INPUT_STATE,                  "getKeycodeState()")) { -            return -1; +            throw new SecurityException("Requires READ_INPUT_STATE permission");          }          return KeyInputQueue.getKeycodeState(sw);      } @@ -3209,7 +3226,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public int getKeycodeStateForDevice(int devid, int sw) {          if (!checkCallingPermission(android.Manifest.permission.READ_INPUT_STATE,                  "getKeycodeStateForDevice()")) { -            return -1; +            throw new SecurityException("Requires READ_INPUT_STATE permission");          }          return KeyInputQueue.getKeycodeState(devid, sw);      } @@ -3298,7 +3315,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo              boolean alwaysSendConfiguration, int animFlags) {          if (!checkCallingPermission(android.Manifest.permission.SET_ORIENTATION,                  "setRotation()")) { -            return; +            throw new SecurityException("Requires SET_ORIENTATION permission");          }          setRotationUnchecked(rotation, alwaysSendConfiguration, animFlags); @@ -3776,7 +3793,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      /**       * @return Returns true if event was dispatched, false if it was dropped for any reason       */ -    private boolean dispatchPointer(QueuedEvent qev, MotionEvent ev, int pid, int uid) { +    private int dispatchPointer(QueuedEvent qev, MotionEvent ev, int pid, int uid) {          if (DEBUG_INPUT || WindowManagerPolicy.WATCH_POINTER) Log.v(TAG,                  "dispatchPointer " + ev); @@ -3806,14 +3823,14 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo                  mQueue.recycleEvent(qev);              }              ev.recycle(); -            return false; +            return INJECT_FAILED;          }          if (targetObj == mKeyWaiter.CONSUMED_EVENT_TOKEN) {              if (qev != null) {                  mQueue.recycleEvent(qev);              }              ev.recycle(); -            return true; +            return INJECT_SUCCEEDED;          }          WindowState target = (WindowState)targetObj; @@ -3833,7 +3850,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo                      mQueue.recycleEvent(qev);                  }                  ev.recycle(); -                return false; +                return INJECT_NO_PERMISSION;              }          } @@ -3883,7 +3900,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo                      mQueue.recycleEvent(qev);                  }                  ev.recycle(); -                return false; +                return INJECT_FAILED;              }          } //end if target @@ -3957,7 +3974,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo                  Log.v(TAG, "Delivering pointer " + qev + " to " + target);              }              target.mClient.dispatchPointer(ev, eventTime); -            return true; +            return INJECT_SUCCEEDED;          } catch (android.os.RemoteException e) {              Log.i(TAG, "WINDOW DIED during motion dispatch: " + target);              mKeyWaiter.mMotionTarget = null; @@ -3968,13 +3985,13 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo                  // removed.              }          } -        return false; +        return INJECT_FAILED;      }      /**       * @return Returns true if event was dispatched, false if it was dropped for any reason       */ -    private boolean dispatchTrackball(QueuedEvent qev, MotionEvent ev, int pid, int uid) { +    private int dispatchTrackball(QueuedEvent qev, MotionEvent ev, int pid, int uid) {          if (DEBUG_INPUT) Log.v(                  TAG, "dispatchTrackball [" + ev.getAction() +"] <" + ev.getX() + ", " + ev.getY() + ">"); @@ -3986,14 +4003,14 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo                  mQueue.recycleEvent(qev);              }              ev.recycle(); -            return false; +            return INJECT_FAILED;          }          if (focusObj == mKeyWaiter.CONSUMED_EVENT_TOKEN) {              if (qev != null) {                  mQueue.recycleEvent(qev);              }              ev.recycle(); -            return true; +            return INJECT_SUCCEEDED;          }          WindowState focus = (WindowState)focusObj; @@ -4009,7 +4026,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo                      mQueue.recycleEvent(qev);                  }                  ev.recycle(); -                return false; +                return INJECT_NO_PERMISSION;              }          } @@ -4029,7 +4046,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo          try {              focus.mClient.dispatchTrackball(ev, eventTime); -            return true; +            return INJECT_SUCCEEDED;          } catch (android.os.RemoteException e) {              Log.i(TAG, "WINDOW DIED during key dispatch: " + focus);              try { @@ -4040,23 +4057,23 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo              }          } -        return false; +        return INJECT_FAILED;      }      /**       * @return Returns true if event was dispatched, false if it was dropped for any reason       */ -    private boolean dispatchKey(KeyEvent event, int pid, int uid) { +    private int dispatchKey(KeyEvent event, int pid, int uid) {          if (DEBUG_INPUT) Log.v(TAG, "Dispatch key: " + event);          Object focusObj = mKeyWaiter.waitForNextEventTarget(event, null,                  null, false, false);          if (focusObj == null) {              Log.w(TAG, "No focus window, dropping: " + event); -            return false; +            return INJECT_FAILED;          }          if (focusObj == mKeyWaiter.CONSUMED_EVENT_TOKEN) { -            return true; +            return INJECT_SUCCEEDED;          }          WindowState focus = (WindowState)focusObj; @@ -4071,7 +4088,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo                  Log.w(TAG, "Permission denied: injecting key event from pid "                          + pid + " uid " + uid + " to window " + focus                          + " owned by uid " + focus.mSession.mUid); -                return false; +                return INJECT_NO_PERMISSION;              }          } @@ -4089,7 +4106,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo                          + " to " + focus);              }              focus.mClient.dispatchKey(event); -            return true; +            return INJECT_SUCCEEDED;          } catch (android.os.RemoteException e) {              Log.i(TAG, "WINDOW DIED during key dispatch: " + focus);              try { @@ -4100,13 +4117,13 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo              }          } -        return false; +        return INJECT_FAILED;      }      public void pauseKeyDispatching(IBinder _token) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "pauseKeyDispatching()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          synchronized (mWindowMap) { @@ -4120,7 +4137,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void resumeKeyDispatching(IBinder _token) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "resumeKeyDispatching()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          synchronized (mWindowMap) { @@ -4134,7 +4151,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo      public void setEventDispatching(boolean enabled) {          if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,                  "resumeKeyDispatching()")) { -            return; +            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");          }          synchronized (mWindowMap) { @@ -4167,11 +4184,18 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo          KeyEvent newEvent = new KeyEvent(downTime, eventTime, action, code, repeatCount, metaState,                  deviceId, scancode, KeyEvent.FLAG_FROM_SYSTEM); -        boolean result = dispatchKey(newEvent, Binder.getCallingPid(), Binder.getCallingUid()); +        int result = dispatchKey(newEvent, Binder.getCallingPid(), Binder.getCallingUid());          if (sync) {              mKeyWaiter.waitForNextEventTarget(null, null, null, false, true);          } -        return result; +        switch (result) { +            case INJECT_NO_PERMISSION: +                throw new SecurityException( +                        "Injecting to another application requires INJECT_EVENT permission"); +            case INJECT_SUCCEEDED: +                return true; +        } +        return false;      }      /** @@ -4184,11 +4208,18 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo       * @return Returns true if event was dispatched, false if it was dropped for any reason       */      public boolean injectPointerEvent(MotionEvent ev, boolean sync) { -        boolean result = dispatchPointer(null, ev, Binder.getCallingPid(), Binder.getCallingUid()); +        int result = dispatchPointer(null, ev, Binder.getCallingPid(), Binder.getCallingUid());          if (sync) {              mKeyWaiter.waitForNextEventTarget(null, null, null, false, true);          } -        return result; +        switch (result) { +            case INJECT_NO_PERMISSION: +                throw new SecurityException( +                        "Injecting to another application requires INJECT_EVENT permission"); +            case INJECT_SUCCEEDED: +                return true; +        } +        return false;      }      /** @@ -4201,11 +4232,18 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo       * @return Returns true if event was dispatched, false if it was dropped for any reason       */      public boolean injectTrackballEvent(MotionEvent ev, boolean sync) { -        boolean result = dispatchTrackball(null, ev, Binder.getCallingPid(), Binder.getCallingUid()); +        int result = dispatchTrackball(null, ev, Binder.getCallingPid(), Binder.getCallingUid());          if (sync) {              mKeyWaiter.waitForNextEventTarget(null, null, null, false, true);          } -        return result; +        switch (result) { +            case INJECT_NO_PERMISSION: +                throw new SecurityException( +                        "Injecting to another application requires INJECT_EVENT permission"); +            case INJECT_SUCCEEDED: +                return true; +        } +        return false;      }      private WindowState getFocusedWindow() { @@ -7492,7 +7530,7 @@ public class WindowManagerService extends IWindowManager.Stub implements Watchdo                  }                  case COMPUTE_AND_SEND_NEW_CONFIGURATION: { -                    if (updateOrientationFromAppTokens(null, null) != null) { +                    if (updateOrientationFromAppTokensUnchecked(null, null) != null) {                          sendNewConfiguration();                      }                      break; diff --git a/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java new file mode 100644 index 0000000..14d3d73 --- /dev/null +++ b/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java @@ -0,0 +1,182 @@ +package com.android.framework.permission.tests; + +import android.app.ActivityManagerNative; +import android.app.IActivityManager; +import android.content.res.Configuration; +import android.os.RemoteException; +import android.test.suitebuilder.annotation.SmallTest; + +import junit.framework.TestCase; + +/** + * TODO: Remove this. This is only a placeholder, need to implement this. + */ +public class ActivityManagerPermissionTests extends TestCase { +    IActivityManager mAm; +     +    @Override +    protected void setUp() throws Exception { +        super.setUp(); +        mAm = ActivityManagerNative.getDefault(); +    } + +    @SmallTest +	public void testREORDER_TASKS() { +        try { +            mAm.moveTaskToFront(-1); +            fail("IActivityManager.moveTaskToFront did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mAm.moveTaskToBack(-1); +            fail("IActivityManager.moveTaskToBack did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mAm.moveTaskBackwards(-1); +            fail("IActivityManager.moveTaskToFront did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +	} + +    @SmallTest +    public void testCHANGE_CONFIGURATION() { +        try { +            mAm.updateConfiguration(new Configuration()); +            fail("IActivityManager.updateConfiguration did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +    } + +    @SmallTest +    public void testSET_DEBUG_APP() { +        try { +            mAm.setDebugApp(null, false, false); +            fail("IActivityManager.setDebugApp did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +    } + +    @SmallTest +    public void testSET_PROCESS_LIMIT() { +        try { +            mAm.setProcessLimit(10); +            fail("IActivityManager.setProcessLimit did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +    } + +    @SmallTest +    public void testALWAYS_FINISH() { +        try { +            mAm.setAlwaysFinish(false); +            fail("IActivityManager.setAlwaysFinish did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +    } + +    @SmallTest +    public void testSIGNAL_PERSISTENT_PROCESSES() { +        try { +            mAm.signalPersistentProcesses(-1); +            fail("IActivityManager.signalPersistentProcesses did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +    } + +    @SmallTest +    public void testFORCE_BACK() { +        try { +            mAm.unhandledBack(); +            fail("IActivityManager.unhandledBack did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +    } + +    @SmallTest +    public void testSET_ACTIVITY_WATCHER() { +        try { +            mAm.setActivityWatcher(null); +            fail("IActivityManager.setActivityWatcher did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +    } + +    @SmallTest +    public void testSHUTDOWN() { +        try { +            mAm.shutdown(0); +            fail("IActivityManager.shutdown did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +    } + +    @SmallTest +    public void testSTOP_APP_SWITCHES() { +        try { +            mAm.stopAppSwitches(); +            fail("IActivityManager.stopAppSwitches did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mAm.resumeAppSwitches(); +            fail("IActivityManager.resumeAppSwitches did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +    } +} diff --git a/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java new file mode 100644 index 0000000..3f1e27e --- /dev/null +++ b/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java @@ -0,0 +1,50 @@ +package com.android.framework.permission.tests; + +import com.android.internal.os.BinderInternal; + +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() { +                public boolean checkPermission(java.lang.String permission, int pid, int uid) { +                    return true; +                } +            }; +            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"); +        } +    } +} diff --git a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java new file mode 100644 index 0000000..8ab2a10 --- /dev/null +++ b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java @@ -0,0 +1,409 @@ +package com.android.framework.permission.tests; + +import android.content.res.Configuration; +import android.os.Binder; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.test.suitebuilder.annotation.SmallTest; +import android.view.IWindowManager; +import android.view.KeyEvent; +import android.view.MotionEvent; + +import junit.framework.TestCase; + +/** + * TODO: Remove this. This is only a placeholder, need to implement this. + */ +public class WindowManagerPermissionTests extends TestCase { +    IWindowManager mWm; +     +    @Override +    protected void setUp() throws Exception { +        super.setUp(); +        mWm = IWindowManager.Stub.asInterface( +                ServiceManager.getService("window")); +    } + +    @SmallTest +	public void testMANAGE_APP_TOKENS() { +        try { +            mWm.pauseKeyDispatching(null); +            fail("IWindowManager.pauseKeyDispatching did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.resumeKeyDispatching(null); +            fail("IWindowManager.resumeKeyDispatching did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.setEventDispatching(true); +            fail("IWindowManager.setEventDispatching did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.addWindowToken(null, 0); +            fail("IWindowManager.addWindowToken did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.removeWindowToken(null); +            fail("IWindowManager.removeWindowToken did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.addAppToken(0, null, 0, 0, false); +            fail("IWindowManager.addAppToken did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.setAppGroupId(null, 0); +            fail("IWindowManager.setAppGroupId did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.updateOrientationFromAppTokens(new Configuration(), null); +            fail("IWindowManager.updateOrientationFromAppTokens did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.setAppOrientation(null, 0); +            mWm.addWindowToken(null, 0); +            fail("IWindowManager.setAppOrientation did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.setFocusedApp(null, false); +            fail("IWindowManager.setFocusedApp did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.prepareAppTransition(0); +            fail("IWindowManager.prepareAppTransition did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.executeAppTransition(); +            fail("IWindowManager.executeAppTransition did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.setAppStartingWindow(null, "foo", 0, null, 0, 0, null, false); +            fail("IWindowManager.setAppStartingWindow did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.setAppWillBeHidden(null); +            fail("IWindowManager.setAppWillBeHidden did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.setAppVisibility(null, false); +            fail("IWindowManager.setAppVisibility did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.startAppFreezingScreen(null, 0); +            fail("IWindowManager.startAppFreezingScreen did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.stopAppFreezingScreen(null, false); +            fail("IWindowManager.stopAppFreezingScreen did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.removeAppToken(null); +            fail("IWindowManager.removeAppToken did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.moveAppToken(0, null); +            fail("IWindowManager.moveAppToken did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.moveAppTokensToTop(null); +            fail("IWindowManager.moveAppTokensToTop did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.moveAppTokensToBottom(null); +            fail("IWindowManager.moveAppTokensToBottom did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +	}     + +    @SmallTest +    public void testINJECT_EVENTS() { +        try { +            mWm.injectKeyEvent(new KeyEvent(0, 0), false); +            fail("IWindowManager.injectKeyEvent did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.injectPointerEvent(MotionEvent.obtain(0, 0, 0, 0, 0, 0, 0, 0, 0, +                    0, 0, 0), false); +            fail("IWindowManager.injectPointerEvent did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.injectTrackballEvent(MotionEvent.obtain(0, 0, 0, 0, 0, 0, 0, 0, 0, +                    0, 0, 0), false); +            fail("IWindowManager.injectTrackballEvent did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +    } +     +    @SmallTest +    public void testDISABLE_KEYGUARD() { +        Binder token = new Binder(); +        try { +            mWm.disableKeyguard(token, "foo"); +            fail("IWindowManager.disableKeyguard did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.reenableKeyguard(token); +            fail("IWindowManager.reenableKeyguard did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.exitKeyguardSecurely(null); +            fail("IWindowManager.exitKeyguardSecurely did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +    } +         +    @SmallTest +    public void testSET_ANIMATION_SCALE() { +        try { +            mWm.setAnimationScale(0, 1); +            fail("IWindowManager.setAnimationScale did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.setAnimationScales(new float[1]); +            fail("IWindowManager.setAnimationScales did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +    } +     +    @SmallTest +    public void testREAD_INPUT_STATE() { +        try { +            mWm.getSwitchState(0); +            fail("IWindowManager.getSwitchState did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.getSwitchStateForDevice(0, 0); +            fail("IWindowManager.getSwitchStateForDevice did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.getScancodeState(0); +            fail("IWindowManager.getScancodeState did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.getScancodeStateForDevice(0, 0); +            fail("IWindowManager.getScancodeStateForDevice did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.getKeycodeState(0); +            fail("IWindowManager.getKeycodeState did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +         +        try { +            mWm.getKeycodeStateForDevice(0, 0); +            fail("IWindowManager.getKeycodeStateForDevice did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +    } +     +    @SmallTest +    public void testSET_ORIENTATION() { +        try { +            mWm.setRotation(0, true, 0); +            mWm.getSwitchState(0); +            fail("IWindowManager.setRotation did not throw SecurityException as" +                    + " expected"); +        } catch (SecurityException e) { +            // expected +        } catch (RemoteException e) { +            fail("Unexpected remote exception"); +        } +    } +} | 
