Merge "Block the disable option for WebView Default package" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
f5f4e0eebd
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.settings.applications;
|
package com.android.settings.applications;
|
||||||
|
|
||||||
|
import static android.webkit.Flags.updateServiceV2;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
@@ -41,6 +43,7 @@ import androidx.annotation.VisibleForTesting;
|
|||||||
|
|
||||||
import com.android.internal.telephony.SmsApplication;
|
import com.android.internal.telephony.SmsApplication;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.webview.WebViewUpdateServiceWrapper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -54,6 +57,7 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
|
|||||||
private final IPackageManager mPms;
|
private final IPackageManager mPms;
|
||||||
private final DevicePolicyManager mDpm;
|
private final DevicePolicyManager mDpm;
|
||||||
private final UserManager mUm;
|
private final UserManager mUm;
|
||||||
|
private final WebViewUpdateServiceWrapper mWebViewUpdateServiceWrapper;
|
||||||
/** Flags to use when querying PackageManager for Euicc component implementations. */
|
/** Flags to use when querying PackageManager for Euicc component implementations. */
|
||||||
private static final int EUICC_QUERY_FLAGS =
|
private static final int EUICC_QUERY_FLAGS =
|
||||||
PackageManager.MATCH_SYSTEM_ONLY | PackageManager.MATCH_DEBUG_TRIAGED_MISSING
|
PackageManager.MATCH_SYSTEM_ONLY | PackageManager.MATCH_DEBUG_TRIAGED_MISSING
|
||||||
@@ -61,11 +65,16 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
|
|||||||
|
|
||||||
public ApplicationFeatureProviderImpl(Context context, PackageManager pm,
|
public ApplicationFeatureProviderImpl(Context context, PackageManager pm,
|
||||||
IPackageManager pms, DevicePolicyManager dpm) {
|
IPackageManager pms, DevicePolicyManager dpm) {
|
||||||
|
this(context, pm, pms, dpm, new WebViewUpdateServiceWrapper());
|
||||||
|
}
|
||||||
|
public ApplicationFeatureProviderImpl(Context context, PackageManager pm,
|
||||||
|
IPackageManager pms, DevicePolicyManager dpm, WebViewUpdateServiceWrapper wvusWrapper) {
|
||||||
mContext = context.getApplicationContext();
|
mContext = context.getApplicationContext();
|
||||||
mPm = pm;
|
mPm = pm;
|
||||||
mPms = pms;
|
mPms = pms;
|
||||||
mDpm = dpm;
|
mDpm = dpm;
|
||||||
mUm = UserManager.get(mContext);
|
mUm = UserManager.get(mContext);
|
||||||
|
mWebViewUpdateServiceWrapper = wvusWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -159,6 +168,14 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
|
|||||||
keepEnabledPackages.add(euicc.packageName);
|
keepEnabledPackages.add(euicc.packageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Keep WebView default package enabled.
|
||||||
|
if (updateServiceV2()) {
|
||||||
|
String packageName = mWebViewUpdateServiceWrapper.getDefaultWebViewPackageName();
|
||||||
|
if (packageName != null) {
|
||||||
|
keepEnabledPackages.add(packageName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
keepEnabledPackages.addAll(getEnabledPackageAllowlist());
|
keepEnabledPackages.addAll(getEnabledPackageAllowlist());
|
||||||
|
|
||||||
final LocationManager locationManager =
|
final LocationManager locationManager =
|
||||||
|
@@ -22,11 +22,14 @@ import android.content.pm.PackageInfo;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.webkit.IWebViewUpdateService;
|
||||||
import android.webkit.UserPackage;
|
import android.webkit.UserPackage;
|
||||||
import android.webkit.WebViewFactory;
|
import android.webkit.WebViewFactory;
|
||||||
import android.webkit.WebViewProviderInfo;
|
import android.webkit.WebViewProviderInfo;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -104,5 +107,24 @@ public class WebViewUpdateServiceWrapper {
|
|||||||
toast.show();
|
toast.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch the package name of the default WebView provider.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public String getDefaultWebViewPackageName() {
|
||||||
|
try {
|
||||||
|
IWebViewUpdateService service = WebViewFactory.getUpdateService();
|
||||||
|
if (service != null) {
|
||||||
|
WebViewProviderInfo provider = service.getDefaultWebViewPackage();
|
||||||
|
if (provider != null) {
|
||||||
|
return provider.packageName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
Log.e(TAG, "RemoteException when trying to fetch default WebView package Name", e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
static final int PACKAGE_FLAGS = PackageManager.MATCH_ANY_USER;
|
static final int PACKAGE_FLAGS = PackageManager.MATCH_ANY_USER;
|
||||||
}
|
}
|
||||||
|
@@ -57,6 +57,7 @@ android_robolectric_test {
|
|||||||
"Settings_robolectric_meta_service_file",
|
"Settings_robolectric_meta_service_file",
|
||||||
"SettingsLib-robo-testutils",
|
"SettingsLib-robo-testutils",
|
||||||
"Settings-robo-testutils",
|
"Settings-robo-testutils",
|
||||||
|
"android.webkit.flags-aconfig-java",
|
||||||
"androidx.test.core",
|
"androidx.test.core",
|
||||||
"androidx.test.espresso.core",
|
"androidx.test.espresso.core",
|
||||||
"androidx.test.ext.junit",
|
"androidx.test.ext.junit",
|
||||||
|
@@ -37,13 +37,20 @@ import android.location.LocationManager;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
import android.platform.test.annotations.RequiresFlagsDisabled;
|
||||||
|
import android.platform.test.annotations.RequiresFlagsEnabled;
|
||||||
|
import android.platform.test.flag.junit.CheckFlagsRule;
|
||||||
|
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
|
||||||
|
import android.webkit.Flags;
|
||||||
|
|
||||||
import com.android.settings.testutils.ApplicationTestUtils;
|
import com.android.settings.testutils.ApplicationTestUtils;
|
||||||
|
import com.android.settings.webview.WebViewUpdateServiceWrapper;
|
||||||
import com.android.settingslib.testutils.shadow.ShadowDefaultDialerManager;
|
import com.android.settingslib.testutils.shadow.ShadowDefaultDialerManager;
|
||||||
import com.android.settingslib.testutils.shadow.ShadowSmsApplication;
|
import com.android.settingslib.testutils.shadow.ShadowSmsApplication;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
@@ -67,6 +74,9 @@ import java.util.Set;
|
|||||||
@LooperMode(LooperMode.Mode.LEGACY)
|
@LooperMode(LooperMode.Mode.LEGACY)
|
||||||
public final class ApplicationFeatureProviderImplTest {
|
public final class ApplicationFeatureProviderImplTest {
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
|
||||||
|
|
||||||
private final int MAIN_USER_ID = 0;
|
private final int MAIN_USER_ID = 0;
|
||||||
private final int MANAGED_PROFILE_ID = 10;
|
private final int MANAGED_PROFILE_ID = 10;
|
||||||
|
|
||||||
@@ -91,6 +101,8 @@ public final class ApplicationFeatureProviderImplTest {
|
|||||||
private DevicePolicyManager mDevicePolicyManager;
|
private DevicePolicyManager mDevicePolicyManager;
|
||||||
@Mock
|
@Mock
|
||||||
private LocationManager mLocationManager;
|
private LocationManager mLocationManager;
|
||||||
|
@Mock
|
||||||
|
private WebViewUpdateServiceWrapper mWebViewUpdateServiceWrapper;
|
||||||
|
|
||||||
private ApplicationFeatureProvider mProvider;
|
private ApplicationFeatureProvider mProvider;
|
||||||
|
|
||||||
@@ -106,7 +118,7 @@ public final class ApplicationFeatureProviderImplTest {
|
|||||||
when(mContext.getSystemService(Context.LOCATION_SERVICE)).thenReturn(mLocationManager);
|
when(mContext.getSystemService(Context.LOCATION_SERVICE)).thenReturn(mLocationManager);
|
||||||
|
|
||||||
mProvider = new ApplicationFeatureProviderImpl(mContext, mPackageManager,
|
mProvider = new ApplicationFeatureProviderImpl(mContext, mPackageManager,
|
||||||
mPackageManagerService, mDevicePolicyManager);
|
mPackageManagerService, mDevicePolicyManager, mWebViewUpdateServiceWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void verifyCalculateNumberOfPolicyInstalledApps(boolean async) {
|
private void verifyCalculateNumberOfPolicyInstalledApps(boolean async) {
|
||||||
@@ -341,6 +353,26 @@ public final class ApplicationFeatureProviderImplTest {
|
|||||||
assertThat(allowlist).contains("com.android.settings.intelligence");
|
assertThat(allowlist).contains("com.android.settings.intelligence");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@RequiresFlagsEnabled(Flags.FLAG_UPDATE_SERVICE_V2)
|
||||||
|
public void getKeepEnabledPackages_shouldContainWebViewPackage() {
|
||||||
|
final String testWebViewPackageName = "com.android.webview";
|
||||||
|
when(mWebViewUpdateServiceWrapper.getDefaultWebViewPackageName())
|
||||||
|
.thenReturn(testWebViewPackageName);
|
||||||
|
final Set<String> allowlist = mProvider.getKeepEnabledPackages();
|
||||||
|
assertThat(allowlist).contains(testWebViewPackageName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@RequiresFlagsDisabled(Flags.FLAG_UPDATE_SERVICE_V2)
|
||||||
|
public void getKeepEnabledPackages_shouldNotContainWebViewPackageIfFlagDisabled() {
|
||||||
|
final String testWebViewPackageName = "com.android.webview";
|
||||||
|
when(mWebViewUpdateServiceWrapper.getDefaultWebViewPackageName())
|
||||||
|
.thenReturn(testWebViewPackageName);
|
||||||
|
final Set<String> allowlist = mProvider.getKeepEnabledPackages();
|
||||||
|
assertThat(allowlist).doesNotContain(testWebViewPackageName);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Config(shadows = {ShadowSmsApplication.class, ShadowDefaultDialerManager.class})
|
@Config(shadows = {ShadowSmsApplication.class, ShadowDefaultDialerManager.class})
|
||||||
public void getKeepEnabledPackages_shouldContainPackageInstaller() {
|
public void getKeepEnabledPackages_shouldContainPackageInstaller() {
|
||||||
|
Reference in New Issue
Block a user