Commit e658361d authored by Lijin Shen's avatar Lijin Shen Committed by Commit Bot

No promo for default browser promo if no web browser acitivy exists

PackageManagerUtils#resolveDefaultWebBrowserActivity can return null.
The utils should return no in this case.

Bug: 1131772
Change-Id: I7421d250e01ca8149e284e474c5c8852a79b3668
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2436393
Commit-Queue: Lijin Shen <lazzzis@google.com>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarPavel Yatsuk <pavely@chromium.org>
Cr-Commit-Position: refs/heads/master@{#813352}
parent 635cbc1a
......@@ -154,6 +154,10 @@ public class DefaultBrowserPromoDeps {
return false;
}
ResolveInfo getDefaultWebBrowserActivityResolveInfo() {
return PackageManagerUtils.resolveDefaultWebBrowserActivity();
}
int getSDKInt() {
return Build.VERSION.SDK_INT;
}
......
......@@ -13,7 +13,6 @@ import android.os.Build;
import androidx.annotation.IntDef;
import org.chromium.base.ContextUtils;
import org.chromium.base.PackageManagerUtils;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
......@@ -54,11 +53,6 @@ public class DefaultBrowserPromoUtils {
private static final String DISAMBIGUATION_SHEET_PROMOED_KEY_PREFIX =
"disambiguation_sheet_promoed.";
static final String CHROME_STABLE_PACKAGE_NAME = "com.android.chrome";
// TODO(crbug.com/1090103): move to some util class for reuse.
static final String[] CHROME_PACKAGE_NAMES = {CHROME_STABLE_PACKAGE_NAME, "org.chromium.chrome",
"com.chrome.canary", "com.chrome.beta", "com.chrome.dev"};
/**
* Determine whether a promo dialog should be displayed or not. And prepare related logic to
......@@ -118,7 +112,11 @@ public class DefaultBrowserPromoUtils {
return DefaultBrowserPromoAction.NO_ACTION;
}
ResolveInfo info = PackageManagerUtils.resolveDefaultWebBrowserActivity();
ResolveInfo info = deps.getDefaultWebBrowserActivityResolveInfo();
if (info == null) {
return DefaultBrowserPromoAction.NO_ACTION;
}
int state = deps.getCurrentDefaultBrowserState(info);
int action = DefaultBrowserPromoAction.NO_ACTION;
if (state == DefaultBrowserState.CHROME_DEFAULT) {
......
......@@ -78,7 +78,7 @@ public class DefaultBrowserPromoUtilsTest {
Shadows.shadowOf(RuntimeEnvironment.application.getPackageManager());
DefaultBrowserPromoDeps deps = DefaultBrowserPromoDeps.getInstance();
infoList.add(createResolveInfo(DefaultBrowserPromoUtils.CHROME_STABLE_PACKAGE_NAME, 1));
infoList.add(createResolveInfo(DefaultBrowserPromoDeps.CHROME_STABLE_PACKAGE_NAME, 1));
packageManager.addResolveInfoForIntent(
PackageManagerUtils.getQueryInstalledBrowsersIntent(), infoList);
Assert.assertFalse("Chrome stable should not be counted as a pre-stable channel",
......@@ -90,8 +90,8 @@ public class DefaultBrowserPromoUtilsTest {
Assert.assertFalse("A random package should not be counted as a pre-stable channel",
deps.isChromePreStableInstalled());
for (String name : DefaultBrowserPromoUtils.CHROME_PACKAGE_NAMES) {
if (name.equals(DefaultBrowserPromoUtils.CHROME_STABLE_PACKAGE_NAME)) continue;
for (String name : DefaultBrowserPromoDeps.CHROME_PACKAGE_NAMES) {
if (name.equals(DefaultBrowserPromoDeps.CHROME_STABLE_PACKAGE_NAME)) continue;
List<ResolveInfo> list = new ArrayList<>(infoList);
list.add(createResolveInfo(name, 1));
packageManager.addResolveInfoForIntent(
......@@ -104,7 +104,7 @@ public class DefaultBrowserPromoUtilsTest {
@Test
public void testIsCurrentDefaultBrowserChrome() {
DefaultBrowserPromoDeps deps = DefaultBrowserPromoDeps.getInstance();
for (String name : DefaultBrowserPromoUtils.CHROME_PACKAGE_NAMES) {
for (String name : DefaultBrowserPromoDeps.CHROME_PACKAGE_NAMES) {
Assert.assertTrue(name + " should be considered as a chrome channel",
deps.isCurrentDefaultBrowserChrome(createResolveInfo(name, 1)));
}
......@@ -138,8 +138,8 @@ public class DefaultBrowserPromoUtilsTest {
setDepsMockWithDefaultValues();
when(mDeps.getSDKInt()).thenReturn(Build.VERSION_CODES.Q);
when(mDeps.isRoleAvailable(any())).thenReturn(true);
when(mDeps.getCurrentDefaultBrowserState(any()))
.thenReturn(DefaultBrowserState.OTHER_DEFAULT);
when(mDeps.getDefaultWebBrowserActivityResolveInfo())
.thenReturn(createResolveInfo("android", 1));
Assert.assertEquals(
"Should promo role manager when there is another default browser on Q+.",
DefaultBrowserPromoAction.ROLE_MANAGER,
......@@ -150,8 +150,8 @@ public class DefaultBrowserPromoUtilsTest {
@Test
public void testPromo_P_otherDefaultSystemSettings() {
setDepsMockWithDefaultValues();
when(mDeps.getCurrentDefaultBrowserState(any()))
.thenReturn(DefaultBrowserState.OTHER_DEFAULT);
when(mDeps.getDefaultWebBrowserActivityResolveInfo())
.thenReturn(createResolveInfo("android", 1));
when(mDeps.promoActionOnP()).thenReturn(DefaultBrowserPromoAction.SYSTEM_SETTINGS);
Assert.assertEquals(
"Should promo system settings when there is another default browser on P-.",
......@@ -162,7 +162,6 @@ public class DefaultBrowserPromoUtilsTest {
@Test
public void testNoPromo_P_noDefaultNoSystemSettings() {
setDepsMockWithDefaultValues();
when(mDeps.getCurrentDefaultBrowserState(any())).thenReturn(DefaultBrowserState.NO_DEFAULT);
when(mDeps.promoActionOnP()).thenReturn(DefaultBrowserPromoAction.SYSTEM_SETTINGS);
when(mDeps.doesManageDefaultAppsSettingsActivityExist()).thenReturn(false);
Assert.assertEquals(
......@@ -174,7 +173,6 @@ public class DefaultBrowserPromoUtilsTest {
@Test
public void testNoPromo_P_noDefaultDisabled() {
setDepsMockWithDefaultValues();
when(mDeps.getCurrentDefaultBrowserState(any())).thenReturn(DefaultBrowserState.NO_DEFAULT);
when(mDeps.promoActionOnP()).thenReturn(DefaultBrowserPromoAction.NO_ACTION);
Assert.assertEquals(
"Should not promo on P- when promoing on \'no default\' scenario is disabled.",
......@@ -186,9 +184,9 @@ public class DefaultBrowserPromoUtilsTest {
public void testNoPromo_otherDefault_M() {
setDepsMockWithDefaultValues();
when(mDeps.getSDKInt()).thenReturn(Build.VERSION_CODES.M);
when(mDeps.doesManageDefaultAppsSettingsActivityExist()).thenReturn(false);
when(mDeps.getCurrentDefaultBrowserState(any()))
.thenReturn(DefaultBrowserState.OTHER_DEFAULT);
when(mDeps.doesManageDefaultAppsSettingsActivityExist()).thenCallRealMethod();
when(mDeps.getDefaultWebBrowserActivityResolveInfo())
.thenReturn(createResolveInfo("android", 1));
Assert.assertEquals("Should not promo on M- when there is another default browser.",
DefaultBrowserPromoAction.NO_ACTION,
DefaultBrowserPromoUtils.decideNextAction(mDeps, null));
......@@ -238,9 +236,10 @@ public class DefaultBrowserPromoUtilsTest {
@Test
public void testNoPromo_isOtherChromeDefault() {
setDepsMockWithDefaultValues();
when(mDeps.isCurrentDefaultBrowserChrome(any())).thenReturn(true);
when(mDeps.getCurrentDefaultBrowserState(any()))
.thenReturn(DefaultBrowserState.OTHER_DEFAULT);
when(mDeps.getDefaultWebBrowserActivityResolveInfo())
.thenReturn(
createResolveInfo(DefaultBrowserPromoDeps.CHROME_STABLE_PACKAGE_NAME, 1));
when(mDeps.isCurrentDefaultBrowserChrome(any())).thenCallRealMethod();
Assert.assertEquals(
"Should not promo when another chrome channel browser has been default.",
DefaultBrowserPromoAction.NO_ACTION,
......@@ -250,14 +249,23 @@ public class DefaultBrowserPromoUtilsTest {
@Test
public void testNoPromo_isCurrentChromeDefault() {
setDepsMockWithDefaultValues();
when(mDeps.isCurrentDefaultBrowserChrome(any())).thenReturn(true);
when(mDeps.getCurrentDefaultBrowserState(any()))
.thenReturn(DefaultBrowserState.CHROME_DEFAULT);
when(mDeps.getDefaultWebBrowserActivityResolveInfo())
.thenReturn(createResolveInfo(
ContextUtils.getApplicationContext().getPackageName(), 1));
Assert.assertEquals("Should not promo when chrome has been default.",
DefaultBrowserPromoAction.NO_ACTION,
DefaultBrowserPromoUtils.decideNextAction(mDeps, null));
}
@Test
public void testNoPromo_webBrowserActivityNotExist() {
setDepsMockWithDefaultValues();
when(mDeps.getDefaultWebBrowserActivityResolveInfo()).thenReturn(null);
Assert.assertEquals("Should not promo when web browser activity does not exist.",
DefaultBrowserPromoAction.NO_ACTION,
DefaultBrowserPromoUtils.decideNextAction(mDeps, null));
}
private void setDepsMockWithDefaultValues() {
when(mDeps.isFeatureEnabled()).thenReturn(true);
when(mDeps.getMinSessionCount()).thenReturn(3);
......@@ -272,7 +280,10 @@ public class DefaultBrowserPromoUtilsTest {
when(mDeps.getMinPromoInterval()).thenReturn(10);
when(mDeps.isChromePreStableInstalled()).thenReturn(false);
when(mDeps.isCurrentDefaultBrowserChrome(any())).thenReturn(false);
when(mDeps.getCurrentDefaultBrowserState(any())).thenReturn(DefaultBrowserState.NO_DEFAULT);
// No Default
when(mDeps.getDefaultWebBrowserActivityResolveInfo())
.thenReturn(createResolveInfo("android", 0));
when(mDeps.getCurrentDefaultBrowserState(any())).thenCallRealMethod();
}
private ResolveInfo createResolveInfo(String packageName, int match) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment