Whitelist intent verifier from broadcast dispatch

In rare cases it was possible for the intent filter verifier to fall
out of whitelist waiting on broadcast dispatch.  We now use the
broadcast mechanism's inherent whitelisting capabilities to start that
interval at the actual broadcast dispatch time so that queue delays
don't impact the verifier's ability to do work.

Bug: 119414110
Test: manual
Change-Id: If52b97ce6fb3bedb4c16afba254cab3ede153ecd
This commit is contained in:
Christopher Tate
2019-01-08 17:25:48 -08:00
committed by Chris Tate
parent 4411d8d47b
commit 82d4acc6ba

View File

@@ -123,6 +123,7 @@ import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.AppDetailsActivity;
import android.app.AppOpsManager;
import android.app.BroadcastOptions;
import android.app.IActivityManager;
import android.app.ResourcesManager;
import android.app.admin.IDevicePolicyManager;
@@ -1044,12 +1045,17 @@ public class PackageManagerService extends IPackageManager.Stub
verificationIntent.setComponent(mIntentFilterVerifierComponent);
verificationIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
final long whitelistTimeout = getVerificationTimeout();
final BroadcastOptions options = BroadcastOptions.makeBasic();
options.setTemporaryAppWhitelistDuration(whitelistTimeout);
DeviceIdleController.LocalService idleController = getDeviceIdleController();
idleController.addPowerSaveTempWhitelistApp(Process.myUid(),
mIntentFilterVerifierComponent.getPackageName(), getVerificationTimeout(),
mIntentFilterVerifierComponent.getPackageName(), whitelistTimeout,
UserHandle.USER_SYSTEM, true, "intent filter verifier");
mContext.sendBroadcastAsUser(verificationIntent, UserHandle.SYSTEM);
mContext.sendBroadcastAsUser(verificationIntent, UserHandle.SYSTEM,
null, options.toBundle());
if (DEBUG_DOMAIN_VERIFICATION) Slog.d(TAG,
"Sending IntentFilter verification broadcast");
}