Settings 2-pane deep link vulnerabilities
Settings app must not start an deep link Activity if 1. The deep link Activity is not exported. or 2. Calling package does not have the permission to start the deep link Activity. Bug: 250589026 Test: make RunSettingsRoboTests ROBOTEST_FILTER=SettingsHomepageActivityTest Change-Id: I9a3bddfa5d9d1d2e924dd6f3e5e07dca6c11664f
This commit is contained in:
@@ -20,6 +20,8 @@ import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTE
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
@@ -39,9 +41,11 @@ import androidx.fragment.app.Fragment;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl;
|
||||
import com.android.settings.testutils.shadow.ShadowActivityEmbeddingUtils;
|
||||
import com.android.settings.testutils.shadow.ShadowPasswordUtils;
|
||||
import com.android.settings.testutils.shadow.ShadowUserManager;
|
||||
import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -68,6 +72,11 @@ public class SettingsHomepageActivityTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
ShadowPasswordUtils.reset();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void launch_shouldHaveAnimationForIaFragment() {
|
||||
final SettingsHomepageActivity activity = Robolectric.buildActivity(
|
||||
@@ -205,6 +214,32 @@ public class SettingsHomepageActivityTest {
|
||||
verify(activity).initSplitPairRules();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = {ShadowPasswordUtils.class})
|
||||
public void isCallingAppPermitted_emptyPermission_returnTrue() {
|
||||
SettingsHomepageActivity homepageActivity = spy(new SettingsHomepageActivity());
|
||||
|
||||
assertTrue(homepageActivity.isCallingAppPermitted(""));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = {ShadowPasswordUtils.class})
|
||||
public void isCallingAppPermitted_noGrantedPermission_returnFalse() {
|
||||
SettingsHomepageActivity homepageActivity = spy(new SettingsHomepageActivity());
|
||||
|
||||
assertFalse(homepageActivity.isCallingAppPermitted("android.permission.TEST"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = {ShadowPasswordUtils.class})
|
||||
public void isCallingAppPermitted_grantedPermission_returnTrue() {
|
||||
SettingsHomepageActivity homepageActivity = spy(new SettingsHomepageActivity());
|
||||
String permission = "android.permission.TEST";
|
||||
ShadowPasswordUtils.addGrantedPermission(permission);
|
||||
|
||||
assertTrue(homepageActivity.isCallingAppPermitted(permission));
|
||||
}
|
||||
|
||||
@Implements(SuggestionFeatureProviderImpl.class)
|
||||
public static class ShadowSuggestionFeatureProviderImpl {
|
||||
|
||||
|
Reference in New Issue
Block a user