Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f5f4e0ee authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Block the disable option for WebView Default package" into main

parents fb72154a e41e5444
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.settings.applications;

import static android.webkit.Flags.updateServiceV2;

import android.Manifest;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
@@ -41,6 +43,7 @@ import androidx.annotation.VisibleForTesting;

import com.android.internal.telephony.SmsApplication;
import com.android.settings.R;
import com.android.settings.webview.WebViewUpdateServiceWrapper;

import java.util.ArrayList;
import java.util.List;
@@ -54,6 +57,7 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
    private final IPackageManager mPms;
    private final DevicePolicyManager mDpm;
    private final UserManager mUm;
    private final WebViewUpdateServiceWrapper mWebViewUpdateServiceWrapper;
    /** Flags to use when querying PackageManager for Euicc component implementations. */
    private static final int EUICC_QUERY_FLAGS =
            PackageManager.MATCH_SYSTEM_ONLY | PackageManager.MATCH_DEBUG_TRIAGED_MISSING
@@ -61,11 +65,16 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide

    public ApplicationFeatureProviderImpl(Context context, PackageManager pm,
            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();
        mPm = pm;
        mPms = pms;
        mDpm = dpm;
        mUm = UserManager.get(mContext);
        mWebViewUpdateServiceWrapper = wvusWrapper;
    }

    @Override
@@ -159,6 +168,14 @@ public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvide
            keepEnabledPackages.add(euicc.packageName);
        }

        // Keep WebView default package enabled.
        if (updateServiceV2()) {
            String packageName = mWebViewUpdateServiceWrapper.getDefaultWebViewPackageName();
            if (packageName != null) {
                keepEnabledPackages.add(packageName);
            }
        }

        keepEnabledPackages.addAll(getEnabledPackageAllowlist());

        final LocationManager locationManager =
+22 −0
Original line number Diff line number Diff line
@@ -22,11 +22,14 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.RemoteException;
import android.util.Log;
import android.webkit.IWebViewUpdateService;
import android.webkit.UserPackage;
import android.webkit.WebViewFactory;
import android.webkit.WebViewProviderInfo;
import android.widget.Toast;

import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.List;

@@ -104,5 +107,24 @@ public class WebViewUpdateServiceWrapper {
        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;
}
+1 −0
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ android_robolectric_test {
        "Settings_robolectric_meta_service_file",
        "SettingsLib-robo-testutils",
        "Settings-robo-testutils",
        "android.webkit.flags-aconfig-java",
        "androidx.test.core",
        "androidx.test.espresso.core",
        "androidx.test.ext.junit",
+33 −1
Original line number Diff line number Diff line
@@ -37,13 +37,20 @@ import android.location.LocationManager;
import android.os.Build;
import android.os.UserHandle;
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.webview.WebViewUpdateServiceWrapper;
import com.android.settingslib.testutils.shadow.ShadowDefaultDialerManager;
import com.android.settingslib.testutils.shadow.ShadowSmsApplication;

import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -67,6 +74,9 @@ import java.util.Set;
@LooperMode(LooperMode.Mode.LEGACY)
public final class ApplicationFeatureProviderImplTest {

    @Rule
    public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();

    private final int MAIN_USER_ID = 0;
    private final int MANAGED_PROFILE_ID = 10;

@@ -91,6 +101,8 @@ public final class ApplicationFeatureProviderImplTest {
    private DevicePolicyManager mDevicePolicyManager;
    @Mock
    private LocationManager mLocationManager;
    @Mock
    private WebViewUpdateServiceWrapper mWebViewUpdateServiceWrapper;

    private ApplicationFeatureProvider mProvider;

@@ -106,7 +118,7 @@ public final class ApplicationFeatureProviderImplTest {
        when(mContext.getSystemService(Context.LOCATION_SERVICE)).thenReturn(mLocationManager);

        mProvider = new ApplicationFeatureProviderImpl(mContext, mPackageManager,
                mPackageManagerService, mDevicePolicyManager);
                mPackageManagerService, mDevicePolicyManager, mWebViewUpdateServiceWrapper);
    }

    private void verifyCalculateNumberOfPolicyInstalledApps(boolean async) {
@@ -341,6 +353,26 @@ public final class ApplicationFeatureProviderImplTest {
        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
    @Config(shadows = {ShadowSmsApplication.class, ShadowDefaultDialerManager.class})
    public void getKeepEnabledPackages_shouldContainPackageInstaller() {