Remove IMMS#calledFromValidUserLocked() as it's unused

This CL finally removes

  InputMethodManagerService#calledFromValidUserLocked(),

as it is no longer used.

This method was originally introduced for a minimum multi-user support
for IMMS [1][2].  The motivation was to allow SystemUI (this includes
the lock screen) and some special processes that always run user 0 to
call at least the following IPCs defined in IInputMethodManager.

 * addClient()
 * removeClient()
 * startInput()
 * windowGainedFocus()
 * showSoftInput()
 * hideSoftInput()
 * showInputMethodPickerFromClient()

As a result, we added the following allow-rules as a quick workaround.

 * callingUid == Process.SYSTEM_UID
 * INTERACT_ACROSS_USERS_FULL

The problem was that IMMS#calledFromValidUserLocked() had been called
not from those IPC entry points but also from other IPC entry points,
and it became really difficult to understand what IPCs must have had
such allow-rules, and what IPCs must have not.  This is basically why
we started an effort to deprecate IMMS#calledFromValidUserLocked for
better code readability.

Anyway we have finally finished the audit and migration, and
IMMS#calledFromValidUserLocked() is now ready to be removed.

This CL itself has no behavior change, since the method to be removed
is no longer used.

 [1]: Ib23849d352db33f0747aa9d5a178f00ac726c13b
      4e1ab15b30
 [2]: I1620413578b9e8da6564664219f65bdc00d5ecfd
      135e5fb712

Fix: 34886274
Test: presubmit
Change-Id: I71a310eea393c8705dc0714a9a968647d76c81ac
This commit is contained in:
Yohei Yukawa
2022-07-29 06:37:26 +09:00
parent 0b169d04c1
commit c354b1948a

View File

@@ -2016,49 +2016,6 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
}
}
// ---------------------------------------------------------------------------------------
// Check whether or not this is a valid IPC. Assumes an IPC is valid when either
// 1) it comes from the system process
// 2) the calling process' user id is identical to the current user id IMMS thinks.
@GuardedBy("ImfLock.class")
private boolean calledFromValidUserLocked() {
final int uid = Binder.getCallingUid();
final int userId = UserHandle.getUserId(uid);
if (DEBUG) {
Slog.d(TAG, "--- calledFromForegroundUserOrSystemProcess ? "
+ "calling uid = " + uid + " system uid = " + Process.SYSTEM_UID
+ " calling userId = " + userId + ", foreground user id = "
+ mSettings.getCurrentUserId() + ", calling pid = " + Binder.getCallingPid()
+ InputMethodUtils.getApiCallStack());
}
if (uid == Process.SYSTEM_UID) {
return true;
}
if (userId == mSettings.getCurrentUserId()) {
return true;
}
// Caveat: A process which has INTERACT_ACROSS_USERS_FULL gets results for the
// foreground user, not for the user of that process. Accordingly InputMethodManagerService
// must not manage background users' states in any functions.
// Note that privacy-sensitive IPCs, such as setInputMethod, are still securely guarded
// by a token.
if (mContext.checkCallingOrSelfPermission(
android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
== PackageManager.PERMISSION_GRANTED) {
if (DEBUG) {
Slog.d(TAG, "--- Access granted because the calling process has "
+ "the INTERACT_ACROSS_USERS_FULL permission");
}
return true;
}
// TODO(b/34886274): The semantics of this verification is actually not well-defined.
Slog.w(TAG, "--- IPC called from background users. Ignore. callers="
+ Debug.getCallers(10));
return false;
}
/**
* Returns true iff the caller is identified to be the current input method with the token.
* @param token The window token given to the input method when it was started.