Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Unified Diff: content/public/android/junit/src/org/chromium/content/browser/installedapp/InstalledAppProviderTest.java

Issue 1756793004: Chrome-side patch for IsAppInstalled. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@splitpatch2
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/public/android/junit/src/org/chromium/content/browser/installedapp/InstalledAppProviderTest.java
diff --git a/content/public/android/junit/src/org/chromium/content/browser/installedapp/InstalledAppProviderTest.java b/content/public/android/junit/src/org/chromium/content/browser/installedapp/InstalledAppProviderTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..abb710b0f748a81c7c53671e768014cee9ab4ec5
--- /dev/null
+++ b/content/public/android/junit/src/org/chromium/content/browser/installedapp/InstalledAppProviderTest.java
@@ -0,0 +1,178 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.content.browser.installedapp;
+
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.AssetManager;
+import android.content.res.Resources;
+
+import org.chromium.base.test.util.Feature;
+import org.chromium.mojom.content.RelatedApplication;
+import org.chromium.testing.local.LocalRobolectricTestRunner;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.robolectric.Robolectric;
+import org.robolectric.annotation.Config;
+import org.robolectric.res.builder.RobolectricPackageManager;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+
+/**
+ * Ensure that the InstalledAppProvider returns the correct apps.
+ */
+@RunWith(LocalRobolectricTestRunner.class)
+@Config(manifest = Config.NONE)
+public class InstalledAppProviderTest {
+ private FakePackageManager mPackageManager;
+ private InstalledAppProviderImpl mInstalledAppProvider;
+
+ /**
+ * FakePackageManager allows for the "installation" of Android package names
+ * and setting up Resources for installed packages.
+ */
+ public class FakePackageManager extends RobolectricPackageManager {
+ HashMap<String, Resources> mResourceMap;
+
+ public FakePackageManager() {
+ mResourceMap = new HashMap<String, Resources>();
+ }
+
+ @Override
+ public Resources getResourcesForApplication(String appPackageName)
+ throws NameNotFoundException {
+ return mResourceMap.get(appPackageName);
+ }
+
+ public void setResourcesForTest(String packageName, Resources resources) {
+ mResourceMap.put(packageName, resources);
+ }
+
+ public void installPackage(String packageName) {
+ PackageInfo info = new PackageInfo();
+ info.packageName = packageName;
+ addPackage(info);
+ }
+ }
+
+ /**
+ * MockResources allow us to define a pre-defined String array which is
+ * returned when a resource from a package is requested. In this case,
+ * this allows us to define site relationships.
+ */
+ public class MockResources extends Resources {
+ String[] mFakeStrings;
+ public MockResources(String[] array) {
+ super(new AssetManager(), null, null);
+ mFakeStrings = array;
+ }
+
+ @Override
+ public int getIdentifier(String name, String defType, String defPackage) {
+ if (mFakeStrings == null) {
+ return 0;
+ }
+ return 1;
+ }
+
+ @Override
+ public String[] getStringArray(int identifier) {
+ return mFakeStrings;
+ }
+ }
+
+ private void addSiteAssociation(String url, String packageName) {
+ String association = "{\"relation\": [\"delegate_permission/common.handle_all_urls\"],"
+ + "\"target\": {\"namespace\": \"web\", \"site\": \"" + url + "\"}}";
+ MockResources fr = new MockResources(new String[] {association});
+ mPackageManager.setResourcesForTest(packageName, fr);
+ }
+
+ private RelatedApplication createRelatedApplication(String platform, String id, String url) {
+ RelatedApplication realApplication = new RelatedApplication();
+ realApplication.platform = platform;
+ realApplication.id = id;
+ realApplication.url = url;
+ return realApplication;
+ }
+
+ @Before
+ public void setUp() {
+ mPackageManager = new FakePackageManager();
+ Robolectric.packageManager = mPackageManager;
+ mInstalledAppProvider = new InstalledAppProviderImpl(Robolectric.application);
+ }
+
+ @Test
+ @Feature({"InstalledApp"})
+ public void testOneInstalledRelatedApplication() throws Exception {
+ mPackageManager.installPackage("com.real.package");
+ addSiteAssociation("http://localhost:8000/", "com.real.package");
+
+ RelatedApplication realApplication =
+ createRelatedApplication("play", "com.real.package", "");
+ RelatedApplication installedAppsArray[] = new RelatedApplication[1];
+ installedAppsArray[0] = realApplication;
+
+ RelatedApplication[] installedApplications =
+ mInstalledAppProvider.filterAndroidInstalledApps(
+ installedAppsArray, "http://localhost:8000/");
+
+ Assert.assertEquals(installedApplications.length, 1);
+ Assert.assertEquals(installedApplications[0], realApplication);
+ }
+
+ @Test
+ @Feature({"InstalledApp"})
+ public void testExtraInstalledApplication() throws Exception {
+ RelatedApplication realApplication =
+ createRelatedApplication("play", "com.real.package", "");
+ RelatedApplication installedAppsArray[] = new RelatedApplication[1];
+ installedAppsArray[0] = realApplication;
+
+ mPackageManager.installPackage("com.real.package");
+ mPackageManager.installPackage("com.different.package");
+ addSiteAssociation("http://localhost:8000/", "com.real.package");
+ addSiteAssociation("http://localhost:8000/", "com.different.package");
+
+ RelatedApplication[] installedApplications =
+ mInstalledAppProvider.filterAndroidInstalledApps(
+ installedAppsArray, "http://localhost:8000/");
+ Assert.assertEquals(installedApplications.length, 1);
+ Assert.assertEquals(installedApplications[0], realApplication);
+ }
+
+ @Test
+ @Feature({"InstalledApp"})
+ public void testMultipleInstalledRelatedApplications() throws Exception {
+ ArrayList<RelatedApplication> manifestRelatedApplications =
+ new ArrayList<RelatedApplication>();
+ manifestRelatedApplications.add(createRelatedApplication("play", "com.real.package", ""));
+ manifestRelatedApplications.add(createRelatedApplication("play", "com.other.package", ""));
+ manifestRelatedApplications.add(
+ createRelatedApplication("itunes", "com.other.package", ""));
+
+ mPackageManager.installPackage("com.real.package");
+ mPackageManager.installPackage("com.different.package");
+ addSiteAssociation("http://localhost:8000/", "com.real.package");
+ addSiteAssociation("http://localhost:8000/", "com.other.package");
+
+ RelatedApplication[] relatedApplications =
+ new RelatedApplication[manifestRelatedApplications.size()];
+ manifestRelatedApplications.toArray(relatedApplications);
+ RelatedApplication[] installedApplications =
+ mInstalledAppProvider.filterAndroidInstalledApps(
+ relatedApplications, "http://localhost:8000/");
+ Assert.assertTrue(installedApplications.length == 2);
+ Assert.assertEquals(installedApplications[0], manifestRelatedApplications.get(0));
+ Assert.assertEquals(installedApplications[1], manifestRelatedApplications.get(1));
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698