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

Commit 44a753f5 authored by Joseph Jang's avatar Joseph Jang Committed by Android (Google) Code Review
Browse files

Merge "Revert "SurfaceControlViewHost: Restrict disclosure of input token""

parents 7379e571 b061b389
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -298,7 +298,7 @@ interface IWindowSession {
    */
    void grantInputChannel(int displayId, in SurfaceControl surface, in IWindow window,
            in IBinder hostInputToken, int flags, int privateFlags, int type,
            in IBinder focusGrantToken, out InputChannel outInputChannel);
            out InputChannel outInputChannel);

    /**
     * Update the flags on an input channel associated with a particular surface.
+1 −1
Original line number Diff line number Diff line
@@ -274,7 +274,7 @@ public class SurfaceControlViewHost {
    public @Nullable SurfacePackage getSurfacePackage() {
        if (mSurfaceControl != null && mAccessibilityEmbeddedConnection != null) {
            return new SurfacePackage(mSurfaceControl, mAccessibilityEmbeddedConnection,
                mWm.getFocusGrantToken(), mRemoteInterface);
                mViewRoot.getInputToken(), mRemoteInterface);
        } else {
            return null;
        }
+3 −9
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.Region;
import android.os.Binder;
import android.os.IBinder;
import android.os.RemoteCallback;
import android.os.RemoteException;
@@ -76,7 +75,6 @@ public class WindowlessWindowManager implements IWindowSession {
    private final Configuration mConfiguration;
    private final IWindowSession mRealWm;
    private final IBinder mHostInputToken;
    private final IBinder mFocusGrantToken = new Binder();

    private int mForceHeight = -1;
    private int mForceWidth = -1;
@@ -93,10 +91,6 @@ public class WindowlessWindowManager implements IWindowSession {
        mConfiguration.setTo(configuration);
    }

    IBinder getFocusGrantToken() {
        return mFocusGrantToken;
    }

    /**
     * Utility API.
     */
@@ -159,10 +153,10 @@ public class WindowlessWindowManager implements IWindowSession {
                    mRealWm.grantInputChannel(displayId,
                        new SurfaceControl(sc, "WindowlessWindowManager.addToDisplay"),
                        window, mHostInputToken, attrs.flags, attrs.privateFlags, attrs.type,
                        mFocusGrantToken, outInputChannel);
                        outInputChannel);
                } else {
                    mRealWm.grantInputChannel(displayId, sc, window, mHostInputToken, attrs.flags,
                        attrs.privateFlags, attrs.type, mFocusGrantToken, outInputChannel);
                        attrs.privateFlags, attrs.type, outInputChannel);
                }
            } catch (RemoteException e) {
                Log.e(TAG, "Failed to grant input to surface: ", e);
@@ -475,7 +469,7 @@ public class WindowlessWindowManager implements IWindowSession {

    @Override
    public void grantInputChannel(int displayId, SurfaceControl surface, IWindow window,
            IBinder hostInputToken, int flags, int privateFlags, int type, IBinder focusGrantToken,
            IBinder hostInputToken, int flags, int privateFlags, int type,
            InputChannel outInputChannel) {
    }

+4 −31
Original line number Diff line number Diff line
@@ -41,8 +41,6 @@ class EmbeddedWindowController {
    private static final String TAG = TAG_WITH_CLASS_NAME ? "EmbeddedWindowController" : TAG_WM;
    /* maps input token to an embedded window */
    private ArrayMap<IBinder /*input token */, EmbeddedWindow> mWindows = new ArrayMap<>();
    private ArrayMap<IBinder /*focus grant token */, EmbeddedWindow> mWindowsByFocusToken =
        new ArrayMap<>();
    private final Object mGlobalLock;
    private final ActivityTaskManagerService mAtmService;

@@ -61,13 +59,10 @@ class EmbeddedWindowController {
    void add(IBinder inputToken, EmbeddedWindow window) {
        try {
            mWindows.put(inputToken, window);
            final IBinder focusToken = window.getFocusGrantToken();
            mWindowsByFocusToken.put(focusToken, window);
            updateProcessController(window);
            window.mClient.asBinder().linkToDeath(()-> {
                synchronized (mGlobalLock) {
                    mWindows.remove(inputToken);
                    mWindowsByFocusToken.remove(focusToken);
                }
            }, 0);
        } catch (RemoteException e) {
@@ -112,10 +107,8 @@ class EmbeddedWindowController {

    void remove(IWindow client) {
        for (int i = mWindows.size() - 1; i >= 0; i--) {
            EmbeddedWindow ew = mWindows.valueAt(i);
            if (ew.mClient.asBinder() == client.asBinder()) {
            if (mWindows.valueAt(i).mClient.asBinder() == client.asBinder()) {
                mWindows.removeAt(i).onRemoved();
                mWindowsByFocusToken.remove(ew.getFocusGrantToken());
                return;
            }
        }
@@ -123,10 +116,8 @@ class EmbeddedWindowController {

    void onWindowRemoved(WindowState host) {
        for (int i = mWindows.size() - 1; i >= 0; i--) {
            EmbeddedWindow ew = mWindows.valueAt(i);
            if (ew.mHostWindowState == host) {
            if (mWindows.valueAt(i).mHostWindowState == host) {
                mWindows.removeAt(i).onRemoved();
                mWindowsByFocusToken.remove(ew.getFocusGrantToken());
            }
        }
    }
@@ -135,10 +126,6 @@ class EmbeddedWindowController {
        return mWindows.get(inputToken);
    }

    EmbeddedWindow getByFocusToken(IBinder focusGrantToken) {
        return mWindowsByFocusToken.get(focusGrantToken);
    }

    void onActivityRemoved(ActivityRecord activityRecord) {
        for (int i = mWindows.size() - 1; i >= 0; i--) {
            final EmbeddedWindow window = mWindows.valueAt(i);
@@ -170,8 +157,6 @@ class EmbeddedWindowController {
        // and this variable is mostly used for tracking that.
        boolean mIsOverlay = false;

        private IBinder mFocusGrantToken;

        /**
         * @param session  calling session to check ownership of the window
         * @param clientToken client token used to clean up the map if the embedding process dies
@@ -186,7 +171,7 @@ class EmbeddedWindowController {
         */
        EmbeddedWindow(Session session, WindowManagerService service, IWindow clientToken,
                       WindowState hostWindowState, int ownerUid, int ownerPid, int windowType,
                       int displayId, IBinder focusGrantToken) {
                       int displayId) {
            mSession = session;
            mWmService = service;
            mClient = clientToken;
@@ -197,7 +182,6 @@ class EmbeddedWindowController {
            mOwnerPid = ownerPid;
            mWindowType = windowType;
            mDisplayId = displayId;
            mFocusGrantToken = focusGrantToken;
        }

        @Override
@@ -258,17 +242,6 @@ class EmbeddedWindowController {
            return mIsOverlay;
        }

        IBinder getFocusGrantToken() {
            return mFocusGrantToken;
        }

        IBinder getInputChannelToken() {
            if (mInputChannel != null) {
                return mInputChannel.getToken();
            }
            return null;
        }

        /**
         * System hosted overlays need the WM to invoke grantEmbeddedWindowFocus and
         * so we need to participate inside handlePointerDownOutsideFocus logic
@@ -282,7 +255,7 @@ class EmbeddedWindowController {

        private void handleTap(boolean grantFocus) {
            if (mInputChannel != null) {
                mWmService.grantEmbeddedWindowFocus(mSession, mFocusGrantToken, grantFocus);
                mWmService.grantEmbeddedWindowFocus(mSession, mInputChannel.getToken(), grantFocus);
            }
        }

+2 −2
Original line number Diff line number Diff line
@@ -813,7 +813,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {
    @Override
    public void grantInputChannel(int displayId, SurfaceControl surface,
            IWindow window, IBinder hostInputToken, int flags, int privateFlags, int type,
            IBinder focusGrantToken, InputChannel outInputChannel) {
            InputChannel outInputChannel) {
        if (hostInputToken == null && !mCanAddInternalSystemWindow) {
            // Callers without INTERNAL_SYSTEM_WINDOW permission cannot grant input channel to
            // embedded windows without providing a host window input token
@@ -829,7 +829,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient {
        try {
            mService.grantInputChannel(this, mUid, mPid, displayId, surface, window, hostInputToken,
                    flags, mCanAddInternalSystemWindow ? privateFlags : 0,
                    mCanAddInternalSystemWindow ? type : 0, focusGrantToken, outInputChannel);
                    mCanAddInternalSystemWindow ? type : 0, outInputChannel);
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
Loading