blob: 34e320c4ec78fad6f3fc09e2042d13d87d3c9cb0 [file] [log] [blame]
// 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.chrome.browser.externalnav;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.ResolveInfo;
import android.test.suitebuilder.annotation.SmallTest;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.test.ChromeActivityTestCaseBase;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Instrumentation tests for {@link ExternalNavigationHandler}.
*/
public class ExternalNavigationDelegateImplTest extends ChromeActivityTestCaseBase<ChromeActivity> {
public ExternalNavigationDelegateImplTest() {
super(ChromeActivity.class);
}
private static List<ResolveInfo> makeResolveInfos(ResolveInfo... infos) {
return Arrays.asList(infos);
}
@SmallTest
public void testIsPackageSpecializedHandler_NoResolveInfo() {
String packageName = "";
List<ResolveInfo> resolveInfos = new ArrayList<ResolveInfo>();
assertEquals(0, ExternalNavigationDelegateImpl.countSpecializedHandlersWithFilter(
resolveInfos, packageName));
}
@SmallTest
public void testIsPackageSpecializedHandler_NoPathOrAuthority() {
String packageName = "";
ResolveInfo info = new ResolveInfo();
info.filter = new IntentFilter();
List<ResolveInfo> resolveInfos = makeResolveInfos(info);
assertEquals(0, ExternalNavigationDelegateImpl.countSpecializedHandlersWithFilter(
resolveInfos, packageName));
}
@SmallTest
public void testIsPackageSpecializedHandler_WithPath() {
String packageName = "";
ResolveInfo info = new ResolveInfo();
info.filter = new IntentFilter();
info.filter.addDataPath("somepath", 2);
List<ResolveInfo> resolveInfos = makeResolveInfos(info);
assertEquals(1, ExternalNavigationDelegateImpl.countSpecializedHandlersWithFilter(
resolveInfos, packageName));
}
@SmallTest
public void testIsPackageSpecializedHandler_WithAuthority() {
String packageName = "";
ResolveInfo info = new ResolveInfo();
info.filter = new IntentFilter();
info.filter.addDataAuthority("http://www.google.com", "80");
List<ResolveInfo> resolveInfos = makeResolveInfos(info);
assertEquals(1, ExternalNavigationDelegateImpl.countSpecializedHandlersWithFilter(
resolveInfos, packageName));
}
@SmallTest
public void testIsPackageSpecializedHandler_WithTargetPackage_Matching() {
String packageName = "com.android.chrome";
ResolveInfo info = new ResolveInfo();
info.filter = new IntentFilter();
info.filter.addDataAuthority("http://www.google.com", "80");
info.activityInfo = new ActivityInfo();
info.activityInfo.packageName = packageName;
List<ResolveInfo> resolveInfos = makeResolveInfos(info);
assertEquals(1, ExternalNavigationDelegateImpl.countSpecializedHandlersWithFilter(
resolveInfos, packageName));
}
@SmallTest
public void testIsPackageSpecializedHandler_WithTargetPackage_NotMatching() {
String packageName = "com.android.chrome";
ResolveInfo info = new ResolveInfo();
info.filter = new IntentFilter();
info.filter.addDataAuthority("http://www.google.com", "80");
info.activityInfo = new ActivityInfo();
info.activityInfo.packageName = "com.foo.bar";
List<ResolveInfo> resolveInfos = makeResolveInfos(info);
assertEquals(0, ExternalNavigationDelegateImpl.countSpecializedHandlersWithFilter(
resolveInfos, packageName));
}
@SmallTest
@CommandLineFlags.Add({"disable-features=SystemDownloadManager"})
public void testIsDownload_noSystemDownloadManager() throws Exception {
ExternalNavigationDelegateImpl delegate = new ExternalNavigationDelegateImpl(
getActivity().getActivityTab());
assertTrue("pdf should be a download, no viewer in Android Chrome",
delegate.isPdfDownload("http://somesampeleurldne.com/file.pdf"));
assertFalse("URL is not a file, but web page",
delegate.isPdfDownload("http://somesampleurldne.com/index.html"));
assertFalse("URL is not a file url",
delegate.isPdfDownload("http://somesampeleurldne.com/not.a.real.extension"));
assertFalse("URL is an image, can be viewed in Chrome",
delegate.isPdfDownload("http://somesampleurldne.com/image.jpg"));
assertFalse("URL is a text file can be viewed in Chrome",
delegate.isPdfDownload("http://somesampleurldne.com/copy.txt"));
}
@SmallTest
@CommandLineFlags.Add({"enable-features=SystemDownloadManager"})
public void testIsDownload_withSystemDownloadManager() throws Exception {
ExternalNavigationDelegateImpl delegate = new ExternalNavigationDelegateImpl(
getActivity().getActivityTab());
assertFalse("isDownload should return false with SystemDownloadManager enabled",
delegate.isPdfDownload("http://somesampeleurldne.com/file.pdf"));
}
@Override
public void startMainActivity() throws InterruptedException {
startMainActivityOnBlankPage();
}
}