Don't throw exception for SafeCloseable objects

* SafeCloseable objects will have their close() method
called when SandboxContext is destroyed, so we can leave
them out of the allowList.
* Long term we may want to remove the allowList altogether
and just rely on safeCloseable

Test: Locally passes
Flag: not needed
Bug: 280463854
Change-Id: I317a9d6639b25a522fe9dbcf2655b55ec68fded6
This commit is contained in:
Vinit Nayak
2023-05-15 12:53:47 -07:00
parent f68f1fa3cc
commit fa5a61c8db

View File

@@ -136,16 +136,19 @@ public class MainThreadInitializedObject<T> {
if (mDestroyed) {
Log.e(TAG, "Static object access with a destroyed context");
}
if (!mAllowedObjects.contains(object)) {
throw new IllegalStateException(
"Leaking unknown objects " + object + " " + provider);
}
T t = (T) mObjectMap.get(object);
if (t != null) {
return t;
}
if (Looper.myLooper() == Looper.getMainLooper()) {
t = createObject(provider);
// Check if we've explicitly allowed the object or if it's a SafeCloseable,
// it will get destroyed in onDestroy()
if (!mAllowedObjects.contains(object) && !(t instanceof SafeCloseable)) {
throw new IllegalStateException(
"Leaking unknown objects " + object + " " + provider + " " + t);
}
mObjectMap.put(object, t);
mOrderedObjects.add(t);
return t;