@Override public ResolveInfo resolveService(Intent intent, int flags) { return mBase.resolveService(intent, flags); }
static Intent validateServiceIntent(Context context, Intent intent, NativeAppInfo appInfo) { if (intent == null) { return null; } ResolveInfo resolveInfo = context.getPackageManager().resolveService(intent, 0); if (resolveInfo == null) { return null; } if (!FacebookSignatureValidator.validateSignature( context, resolveInfo.serviceInfo.packageName)) { return null; } return intent; }
private static String getPackageNameToUse(Context context) { // packagesSupportingCustomTabs contains all apps that can handle both VIEW intents // and service calls. List<String> packagesSupportingCustomTabs = new ArrayList<>(); PackageManager pm = context.getPackageManager(); List<ResolveInfo> resolvedActivityList = pm.queryIntentActivities( new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com")), 0); //noinspection Convert2streamapi for (ResolveInfo info : resolvedActivityList) { if (pm.resolveService(new Intent() .setAction(ACTION_CUSTOM_TABS_CONNECTION) .setPackage(info.activityInfo.packageName), 0) != null) { packagesSupportingCustomTabs.add(info.activityInfo.packageName); } } return packagesSupportingCustomTabs.isEmpty() ? null : packagesSupportingCustomTabs.get(0); }
serviceIntent.setAction(CustomTabsService.ACTION_CUSTOM_TABS_CONNECTION); serviceIntent.setPackage(info.activityInfo.packageName); if (pm.resolveService(serviceIntent, 0) != null) { packagesSupportingCustomTabs.add(info.activityInfo.packageName);
@Override public Object call(Object who, Method method, Object... args) throws Throwable { IInterface caller = (IInterface) args[0]; Intent intent = (Intent) args[1]; String resolvedType = (String) args[2]; intent.setDataAndType(intent.getData(), resolvedType); ComponentName componentName = intent.getComponent(); PackageManager pm = VirtualCore.getPM(); if (componentName == null) { ResolveInfo resolveInfo = pm.resolveService(intent, 0); if (resolveInfo != null && resolveInfo.serviceInfo != null) { componentName = new ComponentName(resolveInfo.serviceInfo.packageName, resolveInfo.serviceInfo.name); } } if (componentName != null && !getHostPkg().equals(componentName.getPackageName())) { return VActivityManager.get().stopService(caller, intent, resolvedType); } return method.invoke(who, args); }
@Test public void resolveService_NoMatch() throws Exception { Intent i = new Intent(); i.setComponent(new ComponentName("foo.bar", "No Activity")); assertThat(packageManager.resolveService(i, 0)).isNull(); }
serviceIntent.setAction(CustomTabsService.ACTION_CUSTOM_TABS_CONNECTION); serviceIntent.setPackage(info.activityInfo.packageName); if (pm.resolveService(serviceIntent, 0) != null) { packagesSupportingCustomTabs.add(info.activityInfo.packageName);
@Test public void resolveService_Match() throws Exception { Intent i = new Intent(Intent.ACTION_MAIN, null); ResolveInfo info = new ResolveInfo(); info.serviceInfo = new ServiceInfo(); info.serviceInfo.name = "name"; shadowPackageManager.addResolveInfoForIntent(i, info); assertThat(packageManager.resolveService(i, 0)).isNotNull(); assertThat(packageManager.resolveService(i, 0).serviceInfo.name).isEqualTo("name"); }
runInSeparateProcess(new TestService.Procedure() { @Override public void run(final Context context) { installCondomProcess(context, new CondomOptions()); // Must be installed before the first call to Context.getPackageManager(). final Intent service_intent = new Intent("android.view.InputMethod").addFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES/* For consistency */); final ResolveInfo service = context.getPackageManager().resolveService(service_intent, 0); Assume.assumeNotNull(service); final List<ResolveInfo> services = context.getPackageManager().queryIntentServices(service_intent, 0); assertNotNull(services); assertFalse(services.isEmpty()); final List<ResolveInfo> receivers = context.getPackageManager().queryBroadcastReceivers(new Intent(Intent.ACTION_BOOT_COMPLETED), 0); assertNotNull(receivers); assertFalse(receivers.isEmpty()); installCondomProcess(context, new CondomOptions().setOutboundJudge(sBlockAllJudge)); assertNull(context.getPackageManager().resolveService(service_intent, 0)); List<ResolveInfo> result = context.getPackageManager().queryIntentServices(service_intent, 0); assertTrue(result.isEmpty()); service_intent.setPackage(service.serviceInfo.packageName); assertNull(context.getPackageManager().resolveService(service_intent, 0)); result = context.getPackageManager().queryIntentServices(service_intent, 0); assertTrue(result.isEmpty()); service_intent.setPackage(null); }}); }
@Test public void removeResolveInfosForIntent_forService() throws Exception { Intent intent = new Intent(Intent.ACTION_APP_ERROR, null).addCategory(Intent.CATEGORY_APP_BROWSER); ResolveInfo info = new ResolveInfo(); info.nonLocalizedLabel = TEST_PACKAGE_LABEL; info.serviceInfo = new ServiceInfo(); info.serviceInfo.packageName = "com.org"; shadowPackageManager.addResolveInfoForIntent(intent, info); shadowPackageManager.removeResolveInfosForIntent(intent, "com.org"); assertThat(packageManager.resolveService(intent, 0)).isNull(); }
@Override public ResolveInfo resolveService(Intent intent, int flags) { return mBase.resolveService(intent, flags); }
@Test public void testPreventServiceInBackgroundPackages() { Assume.assumeTrue(SDK_INT < O); final TestContext context = new TestContext(); context.mTestingBackgroundUid = true; final CondomOptions options = new CondomOptions().preventServiceInBackgroundPackages(true).preventBroadcastToBackgroundPackages(false); final CondomContext condom = CondomContext.wrap(context, TAG, options), dry_condom = CondomContext.wrap(context, TAG, options.setDryRun(true)); for (final Context context2test : new Context[] {condom, condom.getApplicationContext()}) { final List<ResolveInfo> services = context2test.getPackageManager().queryIntentServices(intent(), 0); assertEquals(3, services.size()); context.assertBaseCalled(); final ResolveInfo resolve = context2test.getPackageManager().resolveService(intent(), 0); assertEquals("non.bg.service", resolve.serviceInfo.packageName); context.assertBaseCalled(); } for (final Context context2test : new Context[] {dry_condom, dry_condom.getApplicationContext()}) { final List<ResolveInfo> services = context2test.getPackageManager().queryIntentServices(intent(), 0); assertEquals(4, services.size()); context.assertBaseCalled(); assertEquals(7777777, context2test.getPackageManager().resolveService(intent(), 0).serviceInfo.applicationInfo.uid); context.assertBaseCalled(); } }
assertEquals(expected_intent, data[3]); final ResolveInfo resolve = condom.getPackageManager().resolveService(intent, 0); assertEquals("non.bg.service", resolve.serviceInfo.applicationInfo.packageName); data = readLastEvent(CondomCore.CondomEvent.FILTER_BG_SERVICE);
assertNull(pm.resolveService(intent().setPackage(DISALLOWED_PACKAGE), 0)); context.assertBaseNotCalled(); assertOutboundJudgeCalled(1); assertNotNull(dry_pm.resolveService(intent().setPackage(DISALLOWED_PACKAGE), 0)); context.assertBaseCalled(); assertOutboundJudgeCalled(1);
@Test public void testQuery() { final Context context = context(); final Intent service_intent = new Intent("android.view.InputMethod").addFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES/* For consistency */); final ResolveInfo service = context.getPackageManager().resolveService(service_intent, 0); assertNotNull(service); final List<ResolveInfo> services = context.getPackageManager().queryIntentServices(service_intent, 0); assertNotNull(services); assertFalse(services.isEmpty()); final List<ResolveInfo> receivers = context.getPackageManager().queryBroadcastReceivers(new Intent(Intent.ACTION_BOOT_COMPLETED), 0); assertNotNull(receivers); assertFalse(receivers.isEmpty()); sCondomProcessPackageManager.mCondom.mOutboundJudge = mBlockAllJudge; assertNull(context.getPackageManager().resolveService(service_intent, 0)); assertOutboundJudgeCalled(services.size()); // Outbound judge should have been called for each candidates. List<ResolveInfo> result = context.getPackageManager().queryIntentServices(service_intent, 0); assertTrue(result.isEmpty()); assertOutboundJudgeCalled(services.size()); service_intent.setPackage(service.serviceInfo.packageName); assertNull(context.getPackageManager().resolveService(service_intent, 0)); assertOutboundJudgeCalled(1); // Only once for explicitly targeted intent result = context.getPackageManager().queryIntentServices(service_intent, 0); assertTrue(result.isEmpty()); assertOutboundJudgeCalled(1); service_intent.setPackage(null); }
@Override public ResolveInfo resolveService(Intent intent, int flags) { return pm.resolveService(intent, flags); }
@Test public void testPreventServiceInBackgroundPackages() { final TestContext context = new TestContext(); context.mTestingBackgroundUid = true; final CondomOptions options = new CondomOptions().preventServiceInBackgroundPackages(true).preventBroadcastToBackgroundPackages(false); final CondomContext condom = CondomContext.wrap(context, TAG, options), dry_condom = CondomContext.wrap(context, TAG, options.setDryRun(true)); assertEquals(3, condom.getPackageManager().queryIntentServices(intent(), 0).size()); context.assertBaseCalled(); assertEquals(4, dry_condom.getPackageManager().queryIntentServices(intent(), 0).size()); context.assertBaseCalled(); assertEquals("non.bg.service", condom.getPackageManager().resolveService(intent(), 0).serviceInfo.packageName); context.assertBaseCalled(); assertEquals(7777777, dry_condom.getPackageManager().resolveService(intent(), 0).serviceInfo.applicationInfo.uid); context.assertBaseCalled(); }
assertEquals(expected_intent, data[3]); final ResolveInfo resolve = condom.getPackageManager().resolveService(intent, 0); assertEquals("non.bg.service", resolve.serviceInfo.applicationInfo.packageName); data = readLastEvent(CondomCore.CondomEvent.FILTER_BG_SERVICE);
TextView tv = new TextView(this); PackageManager pm = getPackageManager(); Intent spell = new Intent(SpellCheckerService.SERVICE_INTERFACE); ResolveInfo info = pm.resolveService(spell, 0); if (info == null) { tv.setText("no spell checker found"); } else { tv.setText("found spell checker " + info.serviceInfo.name + " in package " + info.serviceInfo.packageName); }
with(ALLOWED_INTENTS, allBroadcastApis(dry_condom), EXPECT_OUTBOUND_JUDGE_PASS); assertNull(pm.resolveService(intent().setPackage(DISALLOWED_PACKAGE), 0)); context.assertBaseNotCalled(); assertOutboundJudgeCalled(1); assertNotNull(dry_pm.resolveService(intent().setPackage(DISALLOWED_PACKAGE), 0)); context.assertBaseCalled(); assertOutboundJudgeCalled(1);