Loading services/core/java/com/android/server/webkit/SystemImpl.java +19 −27 Original line number Diff line number Diff line Loading @@ -67,19 +67,13 @@ public class SystemImpl implements SystemInterface { private static final String TAG_SIGNATURE = "signature"; private static final String TAG_FALLBACK = "isFallback"; private static final String PIN_GROUP = "webview"; private final WebViewProviderInfo[] mWebViewProviderPackages; // Initialization-on-demand holder idiom for getting the WebView provider packages once and // for all in a thread-safe manner. private static class LazyHolder { private static final SystemImpl INSTANCE = new SystemImpl(); } private final Context mContext; private final WebViewProviderInfo[] mWebViewProviderPackages; public static SystemImpl getInstance() { return LazyHolder.INSTANCE; } SystemImpl(Context context) { mContext = context; private SystemImpl() { int numFallbackPackages = 0; int numAvailableByDefaultPackages = 0; XmlResourceParser parser = null; Loading Loading @@ -184,14 +178,14 @@ public class SystemImpl implements SystemInterface { } @Override public String getUserChosenWebViewProvider(Context context) { return Settings.Global.getString(context.getContentResolver(), public String getUserChosenWebViewProvider() { return Settings.Global.getString(mContext.getContentResolver(), Settings.Global.WEBVIEW_PROVIDER); } @Override public void updateUserSetting(Context context, String newProviderName) { Settings.Global.putString(context.getContentResolver(), public void updateUserSetting(String newProviderName) { Settings.Global.putString(mContext.getContentResolver(), Settings.Global.WEBVIEW_PROVIDER, newProviderName == null ? "" : newProviderName); } Loading @@ -207,8 +201,8 @@ public class SystemImpl implements SystemInterface { } @Override public void enablePackageForAllUsers(Context context, String packageName, boolean enable) { UserManager userManager = (UserManager)context.getSystemService(Context.USER_SERVICE); public void enablePackageForAllUsers(String packageName, boolean enable) { UserManager userManager = mContext.getSystemService(UserManager.class); for(UserInfo userInfo : userManager.getUsers()) { enablePackageForUser(packageName, enable, userInfo.id); } Loading @@ -228,16 +222,15 @@ public class SystemImpl implements SystemInterface { } @Override public void installExistingPackageForAllUsers(Context context, String packageName) { UserManager userManager = context.getSystemService(UserManager.class); public void installExistingPackageForAllUsers(String packageName) { UserManager userManager = mContext.getSystemService(UserManager.class); for (UserInfo userInfo : userManager.getUsers()) { installPackageForUser(packageName, userInfo.id); } } private void installPackageForUser(String packageName, int userId) { final Context context = AppGlobals.getInitialApplication(); final Context contextAsUser = context.createContextAsUser(UserHandle.of(userId), 0); final Context contextAsUser = mContext.createContextAsUser(UserHandle.of(userId), 0); final PackageInstaller installer = contextAsUser.getPackageManager().getPackageInstaller(); installer.installExistingPackage(packageName, PackageManager.INSTALL_REASON_UNKNOWN, null); } Loading @@ -255,29 +248,28 @@ public class SystemImpl implements SystemInterface { } @Override public List<UserPackage> getPackageInfoForProviderAllUsers(Context context, WebViewProviderInfo configInfo) { return UserPackage.getPackageInfosAllUsers(context, configInfo.packageName, PACKAGE_FLAGS); public List<UserPackage> getPackageInfoForProviderAllUsers(WebViewProviderInfo configInfo) { return UserPackage.getPackageInfosAllUsers(mContext, configInfo.packageName, PACKAGE_FLAGS); } @Override public int getMultiProcessSetting(Context context) { public int getMultiProcessSetting() { if (updateServiceV2()) { throw new IllegalStateException( "getMultiProcessSetting shouldn't be called if update_service_v2 flag is set."); } return Settings.Global.getInt( context.getContentResolver(), Settings.Global.WEBVIEW_MULTIPROCESS, 0); mContext.getContentResolver(), Settings.Global.WEBVIEW_MULTIPROCESS, 0); } @Override public void setMultiProcessSetting(Context context, int value) { public void setMultiProcessSetting(int value) { if (updateServiceV2()) { throw new IllegalStateException( "setMultiProcessSetting shouldn't be called if update_service_v2 flag is set."); } Settings.Global.putInt( context.getContentResolver(), Settings.Global.WEBVIEW_MULTIPROCESS, value); mContext.getContentResolver(), Settings.Global.WEBVIEW_MULTIPROCESS, value); } @Override Loading services/core/java/com/android/server/webkit/SystemInterface.java +17 −19 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.server.webkit; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; Loading @@ -34,19 +33,19 @@ import java.util.List; * @hide */ public interface SystemInterface { public WebViewProviderInfo[] getWebViewPackages(); public int onWebViewProviderChanged(PackageInfo packageInfo); public long getFactoryPackageVersion(String packageName) throws NameNotFoundException; WebViewProviderInfo[] getWebViewPackages(); int onWebViewProviderChanged(PackageInfo packageInfo); long getFactoryPackageVersion(String packageName) throws NameNotFoundException; public String getUserChosenWebViewProvider(Context context); public void updateUserSetting(Context context, String newProviderName); public void killPackageDependents(String packageName); String getUserChosenWebViewProvider(); void updateUserSetting(String newProviderName); void killPackageDependents(String packageName); public void enablePackageForAllUsers(Context context, String packageName, boolean enable); public void installExistingPackageForAllUsers(Context context, String packageName); void enablePackageForAllUsers(String packageName, boolean enable); void installExistingPackageForAllUsers(String packageName); public boolean systemIsDebuggable(); public PackageInfo getPackageInfoForProvider(WebViewProviderInfo configInfo) boolean systemIsDebuggable(); PackageInfo getPackageInfoForProvider(WebViewProviderInfo configInfo) throws NameNotFoundException; /** * Get the PackageInfos of all users for the package represented by {@param configInfo}. Loading @@ -54,15 +53,14 @@ public interface SystemInterface { * certain user. The returned array can contain null PackageInfos if the given package * is uninstalled for some user. */ public List<UserPackage> getPackageInfoForProviderAllUsers(Context context, WebViewProviderInfo configInfo); List<UserPackage> getPackageInfoForProviderAllUsers(WebViewProviderInfo configInfo); public int getMultiProcessSetting(Context context); public void setMultiProcessSetting(Context context, int value); public void notifyZygote(boolean enableMultiProcess); int getMultiProcessSetting(); void setMultiProcessSetting(int value); void notifyZygote(boolean enableMultiProcess); /** Start the zygote if it's not already running. */ public void ensureZygoteStarted(); public boolean isMultiProcessDefaultEnabled(); void ensureZygoteStarted(); boolean isMultiProcessDefaultEnabled(); public void pinWebviewIfRequired(ApplicationInfo appInfo); void pinWebviewIfRequired(ApplicationInfo appInfo); } services/core/java/com/android/server/webkit/WebViewUpdateService.java +2 −2 Original line number Diff line number Diff line Loading @@ -73,9 +73,9 @@ public class WebViewUpdateService extends SystemService { public WebViewUpdateService(Context context) { super(context); if (updateServiceV2()) { mImpl = new WebViewUpdateServiceImpl2(context, SystemImpl.getInstance()); mImpl = new WebViewUpdateServiceImpl2(new SystemImpl(context)); } else { mImpl = new WebViewUpdateServiceImpl(context, SystemImpl.getInstance()); mImpl = new WebViewUpdateServiceImpl(new SystemImpl(context)); } } Loading services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java +12 −17 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.server.webkit; import android.annotation.Nullable; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.Signature; Loading Loading @@ -92,7 +91,6 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { private static final int MULTIPROCESS_SETTING_OFF_VALUE = Integer.MIN_VALUE; private final SystemInterface mSystemInterface; private final Context mContext; private long mMinimumVersionCode = -1; Loading @@ -110,8 +108,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { private final Object mLock = new Object(); WebViewUpdateServiceImpl(Context context, SystemInterface systemInterface) { mContext = context; WebViewUpdateServiceImpl(SystemInterface systemInterface) { mSystemInterface = systemInterface; } Loading Loading @@ -173,7 +170,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { try { synchronized (mLock) { mCurrentWebViewPackage = findPreferredWebViewPackage(); String userSetting = mSystemInterface.getUserChosenWebViewProvider(mContext); String userSetting = mSystemInterface.getUserChosenWebViewProvider(); if (userSetting != null && !userSetting.equals(mCurrentWebViewPackage.packageName)) { // Don't persist the user-chosen setting across boots if the package being Loading @@ -181,8 +178,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { // be surprised by the device switching to using a certain webview package, // that was uninstalled/disabled a long time ago, if it is installed/enabled // again. mSystemInterface.updateUserSetting(mContext, mCurrentWebViewPackage.packageName); mSystemInterface.updateUserSetting(mCurrentWebViewPackage.packageName); } onWebViewProviderChanged(mCurrentWebViewPackage); } Loading @@ -203,8 +199,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { WebViewProviderInfo fallbackProvider = getFallbackProvider(webviewProviders); if (fallbackProvider != null) { Slog.w(TAG, "No valid provider, trying to enable " + fallbackProvider.packageName); mSystemInterface.enablePackageForAllUsers(mContext, fallbackProvider.packageName, true); mSystemInterface.enablePackageForAllUsers(fallbackProvider.packageName, true); } else { Slog.e(TAG, "No valid provider and no fallback available."); } Loading Loading @@ -316,7 +311,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { oldPackage = mCurrentWebViewPackage; if (newProviderName != null) { mSystemInterface.updateUserSetting(mContext, newProviderName); mSystemInterface.updateUserSetting(newProviderName); } try { Loading Loading @@ -447,7 +442,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { private PackageInfo findPreferredWebViewPackage() throws WebViewPackageMissingException { ProviderAndPackageInfo[] providers = getValidWebViewPackagesAndInfos(); String userChosenProvider = mSystemInterface.getUserChosenWebViewProvider(mContext); String userChosenProvider = mSystemInterface.getUserChosenWebViewProvider(); // If the user has chosen provider, use that (if it's installed and enabled for all // users). Loading @@ -455,7 +450,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { if (providerAndPackage.provider.packageName.equals(userChosenProvider)) { // userPackages can contain null objects. List<UserPackage> userPackages = mSystemInterface.getPackageInfoForProviderAllUsers(mContext, mSystemInterface.getPackageInfoForProviderAllUsers( providerAndPackage.provider); if (isInstalledAndEnabledForAllUsers(userPackages)) { return providerAndPackage.packageInfo; Loading @@ -470,7 +465,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { if (providerAndPackage.provider.availableByDefault) { // userPackages can contain null objects. List<UserPackage> userPackages = mSystemInterface.getPackageInfoForProviderAllUsers(mContext, mSystemInterface.getPackageInfoForProviderAllUsers( providerAndPackage.provider); if (isInstalledAndEnabledForAllUsers(userPackages)) { return providerAndPackage.packageInfo; Loading Loading @@ -658,7 +653,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { @Override public boolean isMultiProcessEnabled() { int settingValue = mSystemInterface.getMultiProcessSetting(mContext); int settingValue = mSystemInterface.getMultiProcessSetting(); if (mSystemInterface.isMultiProcessDefaultEnabled()) { // Multiprocess should be enabled unless the user has turned it off manually. return settingValue > MULTIPROCESS_SETTING_OFF_VALUE; Loading @@ -671,7 +666,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { @Override public void enableMultiProcess(boolean enable) { PackageInfo current = getCurrentWebViewPackage(); mSystemInterface.setMultiProcessSetting(mContext, mSystemInterface.setMultiProcessSetting( enable ? MULTIPROCESS_SETTING_ON_VALUE : MULTIPROCESS_SETTING_OFF_VALUE); mSystemInterface.notifyZygote(enable); if (current != null) { Loading Loading @@ -725,7 +720,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { pw.println(" WebView packages:"); for (WebViewProviderInfo provider : allProviders) { List<UserPackage> userPackages = mSystemInterface.getPackageInfoForProviderAllUsers(mContext, provider); mSystemInterface.getPackageInfoForProviderAllUsers(provider); PackageInfo systemUserPackageInfo = userPackages.get(UserHandle.USER_SYSTEM).getPackageInfo(); if (systemUserPackageInfo == null) { Loading @@ -741,7 +736,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { systemUserPackageInfo.applicationInfo.targetSdkVersion); if (validity == VALIDITY_OK) { boolean installedForAllUsers = isInstalledAndEnabledForAllUsers( mSystemInterface.getPackageInfoForProviderAllUsers(mContext, provider)); mSystemInterface.getPackageInfoForProviderAllUsers(provider)); pw.println(String.format( " Valid package %s (%s) is %s installed/enabled for all users", systemUserPackageInfo.packageName, Loading services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java +11 −20 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.server.webkit; import android.annotation.Nullable; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.Signature; Loading Loading @@ -86,7 +85,6 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { private static final int VALIDITY_NO_LIBRARY_FLAG = 4; private final SystemInterface mSystemInterface; private final Context mContext; private final WebViewProviderInfo mDefaultProvider; private long mMinimumVersionCode = -1; Loading @@ -108,8 +106,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { private final Object mLock = new Object(); WebViewUpdateServiceImpl2(Context context, SystemInterface systemInterface) { mContext = context; WebViewUpdateServiceImpl2(SystemInterface systemInterface) { mSystemInterface = systemInterface; WebViewProviderInfo[] webviewProviders = getWebViewPackages(); Loading Loading @@ -194,8 +191,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { } if (mCurrentWebViewPackage.packageName.equals(mDefaultProvider.packageName)) { List<UserPackage> userPackages = mSystemInterface.getPackageInfoForProviderAllUsers( mContext, mDefaultProvider); mSystemInterface.getPackageInfoForProviderAllUsers(mDefaultProvider); return !isInstalledAndEnabledForAllUsers(userPackages); } else { return false; Loading @@ -216,10 +212,8 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { TAG, "No provider available for all users, trying to install and enable " + mDefaultProvider.packageName); mSystemInterface.installExistingPackageForAllUsers( mContext, mDefaultProvider.packageName); mSystemInterface.enablePackageForAllUsers( mContext, mDefaultProvider.packageName, true); mSystemInterface.installExistingPackageForAllUsers(mDefaultProvider.packageName); mSystemInterface.enablePackageForAllUsers(mDefaultProvider.packageName, true); } @Override Loading @@ -229,7 +223,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { synchronized (mLock) { mCurrentWebViewPackage = findPreferredWebViewPackage(); repairNeeded = shouldTriggerRepairLocked(); String userSetting = mSystemInterface.getUserChosenWebViewProvider(mContext); String userSetting = mSystemInterface.getUserChosenWebViewProvider(); if (userSetting != null && !userSetting.equals(mCurrentWebViewPackage.packageName)) { // Don't persist the user-chosen setting across boots if the package being Loading @@ -237,8 +231,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { // be surprised by the device switching to using a certain webview package, // that was uninstalled/disabled a long time ago, if it is installed/enabled // again. mSystemInterface.updateUserSetting(mContext, mCurrentWebViewPackage.packageName); mSystemInterface.updateUserSetting(mCurrentWebViewPackage.packageName); } onWebViewProviderChanged(mCurrentWebViewPackage); } Loading Loading @@ -362,7 +355,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { oldPackage = mCurrentWebViewPackage; if (newProviderName != null) { mSystemInterface.updateUserSetting(mContext, newProviderName); mSystemInterface.updateUserSetting(newProviderName); } try { Loading Loading @@ -493,7 +486,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { Counter.logIncrement("webview.value_find_preferred_webview_package_counter"); // If the user has chosen provider, use that (if it's installed and enabled for all // users). String userChosenPackageName = mSystemInterface.getUserChosenWebViewProvider(mContext); String userChosenPackageName = mSystemInterface.getUserChosenWebViewProvider(); WebViewProviderInfo userChosenProvider = getWebViewProviderForPackage(userChosenPackageName); if (userChosenProvider != null) { Loading @@ -502,8 +495,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { mSystemInterface.getPackageInfoForProvider(userChosenProvider); if (validityResult(userChosenProvider, packageInfo) == VALIDITY_OK) { List<UserPackage> userPackages = mSystemInterface.getPackageInfoForProviderAllUsers( mContext, userChosenProvider); mSystemInterface.getPackageInfoForProviderAllUsers(userChosenProvider); if (isInstalledAndEnabledForAllUsers(userPackages)) { return packageInfo; } Loading Loading @@ -779,7 +771,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { pw.println(" WebView packages:"); for (WebViewProviderInfo provider : allProviders) { List<UserPackage> userPackages = mSystemInterface.getPackageInfoForProviderAllUsers(mContext, provider); mSystemInterface.getPackageInfoForProviderAllUsers(provider); PackageInfo systemUserPackageInfo = userPackages.get(UserHandle.USER_SYSTEM).getPackageInfo(); if (systemUserPackageInfo == null) { Loading @@ -798,8 +790,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { if (validity == VALIDITY_OK) { boolean installedForAllUsers = isInstalledAndEnabledForAllUsers( mSystemInterface.getPackageInfoForProviderAllUsers( mContext, provider)); mSystemInterface.getPackageInfoForProviderAllUsers(provider)); pw.println( TextUtils.formatSimple( " Valid package %s (%s) is %s installed/enabled for all users", Loading Loading
services/core/java/com/android/server/webkit/SystemImpl.java +19 −27 Original line number Diff line number Diff line Loading @@ -67,19 +67,13 @@ public class SystemImpl implements SystemInterface { private static final String TAG_SIGNATURE = "signature"; private static final String TAG_FALLBACK = "isFallback"; private static final String PIN_GROUP = "webview"; private final WebViewProviderInfo[] mWebViewProviderPackages; // Initialization-on-demand holder idiom for getting the WebView provider packages once and // for all in a thread-safe manner. private static class LazyHolder { private static final SystemImpl INSTANCE = new SystemImpl(); } private final Context mContext; private final WebViewProviderInfo[] mWebViewProviderPackages; public static SystemImpl getInstance() { return LazyHolder.INSTANCE; } SystemImpl(Context context) { mContext = context; private SystemImpl() { int numFallbackPackages = 0; int numAvailableByDefaultPackages = 0; XmlResourceParser parser = null; Loading Loading @@ -184,14 +178,14 @@ public class SystemImpl implements SystemInterface { } @Override public String getUserChosenWebViewProvider(Context context) { return Settings.Global.getString(context.getContentResolver(), public String getUserChosenWebViewProvider() { return Settings.Global.getString(mContext.getContentResolver(), Settings.Global.WEBVIEW_PROVIDER); } @Override public void updateUserSetting(Context context, String newProviderName) { Settings.Global.putString(context.getContentResolver(), public void updateUserSetting(String newProviderName) { Settings.Global.putString(mContext.getContentResolver(), Settings.Global.WEBVIEW_PROVIDER, newProviderName == null ? "" : newProviderName); } Loading @@ -207,8 +201,8 @@ public class SystemImpl implements SystemInterface { } @Override public void enablePackageForAllUsers(Context context, String packageName, boolean enable) { UserManager userManager = (UserManager)context.getSystemService(Context.USER_SERVICE); public void enablePackageForAllUsers(String packageName, boolean enable) { UserManager userManager = mContext.getSystemService(UserManager.class); for(UserInfo userInfo : userManager.getUsers()) { enablePackageForUser(packageName, enable, userInfo.id); } Loading @@ -228,16 +222,15 @@ public class SystemImpl implements SystemInterface { } @Override public void installExistingPackageForAllUsers(Context context, String packageName) { UserManager userManager = context.getSystemService(UserManager.class); public void installExistingPackageForAllUsers(String packageName) { UserManager userManager = mContext.getSystemService(UserManager.class); for (UserInfo userInfo : userManager.getUsers()) { installPackageForUser(packageName, userInfo.id); } } private void installPackageForUser(String packageName, int userId) { final Context context = AppGlobals.getInitialApplication(); final Context contextAsUser = context.createContextAsUser(UserHandle.of(userId), 0); final Context contextAsUser = mContext.createContextAsUser(UserHandle.of(userId), 0); final PackageInstaller installer = contextAsUser.getPackageManager().getPackageInstaller(); installer.installExistingPackage(packageName, PackageManager.INSTALL_REASON_UNKNOWN, null); } Loading @@ -255,29 +248,28 @@ public class SystemImpl implements SystemInterface { } @Override public List<UserPackage> getPackageInfoForProviderAllUsers(Context context, WebViewProviderInfo configInfo) { return UserPackage.getPackageInfosAllUsers(context, configInfo.packageName, PACKAGE_FLAGS); public List<UserPackage> getPackageInfoForProviderAllUsers(WebViewProviderInfo configInfo) { return UserPackage.getPackageInfosAllUsers(mContext, configInfo.packageName, PACKAGE_FLAGS); } @Override public int getMultiProcessSetting(Context context) { public int getMultiProcessSetting() { if (updateServiceV2()) { throw new IllegalStateException( "getMultiProcessSetting shouldn't be called if update_service_v2 flag is set."); } return Settings.Global.getInt( context.getContentResolver(), Settings.Global.WEBVIEW_MULTIPROCESS, 0); mContext.getContentResolver(), Settings.Global.WEBVIEW_MULTIPROCESS, 0); } @Override public void setMultiProcessSetting(Context context, int value) { public void setMultiProcessSetting(int value) { if (updateServiceV2()) { throw new IllegalStateException( "setMultiProcessSetting shouldn't be called if update_service_v2 flag is set."); } Settings.Global.putInt( context.getContentResolver(), Settings.Global.WEBVIEW_MULTIPROCESS, value); mContext.getContentResolver(), Settings.Global.WEBVIEW_MULTIPROCESS, value); } @Override Loading
services/core/java/com/android/server/webkit/SystemInterface.java +17 −19 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.server.webkit; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; Loading @@ -34,19 +33,19 @@ import java.util.List; * @hide */ public interface SystemInterface { public WebViewProviderInfo[] getWebViewPackages(); public int onWebViewProviderChanged(PackageInfo packageInfo); public long getFactoryPackageVersion(String packageName) throws NameNotFoundException; WebViewProviderInfo[] getWebViewPackages(); int onWebViewProviderChanged(PackageInfo packageInfo); long getFactoryPackageVersion(String packageName) throws NameNotFoundException; public String getUserChosenWebViewProvider(Context context); public void updateUserSetting(Context context, String newProviderName); public void killPackageDependents(String packageName); String getUserChosenWebViewProvider(); void updateUserSetting(String newProviderName); void killPackageDependents(String packageName); public void enablePackageForAllUsers(Context context, String packageName, boolean enable); public void installExistingPackageForAllUsers(Context context, String packageName); void enablePackageForAllUsers(String packageName, boolean enable); void installExistingPackageForAllUsers(String packageName); public boolean systemIsDebuggable(); public PackageInfo getPackageInfoForProvider(WebViewProviderInfo configInfo) boolean systemIsDebuggable(); PackageInfo getPackageInfoForProvider(WebViewProviderInfo configInfo) throws NameNotFoundException; /** * Get the PackageInfos of all users for the package represented by {@param configInfo}. Loading @@ -54,15 +53,14 @@ public interface SystemInterface { * certain user. The returned array can contain null PackageInfos if the given package * is uninstalled for some user. */ public List<UserPackage> getPackageInfoForProviderAllUsers(Context context, WebViewProviderInfo configInfo); List<UserPackage> getPackageInfoForProviderAllUsers(WebViewProviderInfo configInfo); public int getMultiProcessSetting(Context context); public void setMultiProcessSetting(Context context, int value); public void notifyZygote(boolean enableMultiProcess); int getMultiProcessSetting(); void setMultiProcessSetting(int value); void notifyZygote(boolean enableMultiProcess); /** Start the zygote if it's not already running. */ public void ensureZygoteStarted(); public boolean isMultiProcessDefaultEnabled(); void ensureZygoteStarted(); boolean isMultiProcessDefaultEnabled(); public void pinWebviewIfRequired(ApplicationInfo appInfo); void pinWebviewIfRequired(ApplicationInfo appInfo); }
services/core/java/com/android/server/webkit/WebViewUpdateService.java +2 −2 Original line number Diff line number Diff line Loading @@ -73,9 +73,9 @@ public class WebViewUpdateService extends SystemService { public WebViewUpdateService(Context context) { super(context); if (updateServiceV2()) { mImpl = new WebViewUpdateServiceImpl2(context, SystemImpl.getInstance()); mImpl = new WebViewUpdateServiceImpl2(new SystemImpl(context)); } else { mImpl = new WebViewUpdateServiceImpl(context, SystemImpl.getInstance()); mImpl = new WebViewUpdateServiceImpl(new SystemImpl(context)); } } Loading
services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java +12 −17 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.server.webkit; import android.annotation.Nullable; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.Signature; Loading Loading @@ -92,7 +91,6 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { private static final int MULTIPROCESS_SETTING_OFF_VALUE = Integer.MIN_VALUE; private final SystemInterface mSystemInterface; private final Context mContext; private long mMinimumVersionCode = -1; Loading @@ -110,8 +108,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { private final Object mLock = new Object(); WebViewUpdateServiceImpl(Context context, SystemInterface systemInterface) { mContext = context; WebViewUpdateServiceImpl(SystemInterface systemInterface) { mSystemInterface = systemInterface; } Loading Loading @@ -173,7 +170,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { try { synchronized (mLock) { mCurrentWebViewPackage = findPreferredWebViewPackage(); String userSetting = mSystemInterface.getUserChosenWebViewProvider(mContext); String userSetting = mSystemInterface.getUserChosenWebViewProvider(); if (userSetting != null && !userSetting.equals(mCurrentWebViewPackage.packageName)) { // Don't persist the user-chosen setting across boots if the package being Loading @@ -181,8 +178,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { // be surprised by the device switching to using a certain webview package, // that was uninstalled/disabled a long time ago, if it is installed/enabled // again. mSystemInterface.updateUserSetting(mContext, mCurrentWebViewPackage.packageName); mSystemInterface.updateUserSetting(mCurrentWebViewPackage.packageName); } onWebViewProviderChanged(mCurrentWebViewPackage); } Loading @@ -203,8 +199,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { WebViewProviderInfo fallbackProvider = getFallbackProvider(webviewProviders); if (fallbackProvider != null) { Slog.w(TAG, "No valid provider, trying to enable " + fallbackProvider.packageName); mSystemInterface.enablePackageForAllUsers(mContext, fallbackProvider.packageName, true); mSystemInterface.enablePackageForAllUsers(fallbackProvider.packageName, true); } else { Slog.e(TAG, "No valid provider and no fallback available."); } Loading Loading @@ -316,7 +311,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { oldPackage = mCurrentWebViewPackage; if (newProviderName != null) { mSystemInterface.updateUserSetting(mContext, newProviderName); mSystemInterface.updateUserSetting(newProviderName); } try { Loading Loading @@ -447,7 +442,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { private PackageInfo findPreferredWebViewPackage() throws WebViewPackageMissingException { ProviderAndPackageInfo[] providers = getValidWebViewPackagesAndInfos(); String userChosenProvider = mSystemInterface.getUserChosenWebViewProvider(mContext); String userChosenProvider = mSystemInterface.getUserChosenWebViewProvider(); // If the user has chosen provider, use that (if it's installed and enabled for all // users). Loading @@ -455,7 +450,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { if (providerAndPackage.provider.packageName.equals(userChosenProvider)) { // userPackages can contain null objects. List<UserPackage> userPackages = mSystemInterface.getPackageInfoForProviderAllUsers(mContext, mSystemInterface.getPackageInfoForProviderAllUsers( providerAndPackage.provider); if (isInstalledAndEnabledForAllUsers(userPackages)) { return providerAndPackage.packageInfo; Loading @@ -470,7 +465,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { if (providerAndPackage.provider.availableByDefault) { // userPackages can contain null objects. List<UserPackage> userPackages = mSystemInterface.getPackageInfoForProviderAllUsers(mContext, mSystemInterface.getPackageInfoForProviderAllUsers( providerAndPackage.provider); if (isInstalledAndEnabledForAllUsers(userPackages)) { return providerAndPackage.packageInfo; Loading Loading @@ -658,7 +653,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { @Override public boolean isMultiProcessEnabled() { int settingValue = mSystemInterface.getMultiProcessSetting(mContext); int settingValue = mSystemInterface.getMultiProcessSetting(); if (mSystemInterface.isMultiProcessDefaultEnabled()) { // Multiprocess should be enabled unless the user has turned it off manually. return settingValue > MULTIPROCESS_SETTING_OFF_VALUE; Loading @@ -671,7 +666,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { @Override public void enableMultiProcess(boolean enable) { PackageInfo current = getCurrentWebViewPackage(); mSystemInterface.setMultiProcessSetting(mContext, mSystemInterface.setMultiProcessSetting( enable ? MULTIPROCESS_SETTING_ON_VALUE : MULTIPROCESS_SETTING_OFF_VALUE); mSystemInterface.notifyZygote(enable); if (current != null) { Loading Loading @@ -725,7 +720,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { pw.println(" WebView packages:"); for (WebViewProviderInfo provider : allProviders) { List<UserPackage> userPackages = mSystemInterface.getPackageInfoForProviderAllUsers(mContext, provider); mSystemInterface.getPackageInfoForProviderAllUsers(provider); PackageInfo systemUserPackageInfo = userPackages.get(UserHandle.USER_SYSTEM).getPackageInfo(); if (systemUserPackageInfo == null) { Loading @@ -741,7 +736,7 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { systemUserPackageInfo.applicationInfo.targetSdkVersion); if (validity == VALIDITY_OK) { boolean installedForAllUsers = isInstalledAndEnabledForAllUsers( mSystemInterface.getPackageInfoForProviderAllUsers(mContext, provider)); mSystemInterface.getPackageInfoForProviderAllUsers(provider)); pw.println(String.format( " Valid package %s (%s) is %s installed/enabled for all users", systemUserPackageInfo.packageName, Loading
services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java +11 −20 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.server.webkit; import android.annotation.Nullable; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.Signature; Loading Loading @@ -86,7 +85,6 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { private static final int VALIDITY_NO_LIBRARY_FLAG = 4; private final SystemInterface mSystemInterface; private final Context mContext; private final WebViewProviderInfo mDefaultProvider; private long mMinimumVersionCode = -1; Loading @@ -108,8 +106,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { private final Object mLock = new Object(); WebViewUpdateServiceImpl2(Context context, SystemInterface systemInterface) { mContext = context; WebViewUpdateServiceImpl2(SystemInterface systemInterface) { mSystemInterface = systemInterface; WebViewProviderInfo[] webviewProviders = getWebViewPackages(); Loading Loading @@ -194,8 +191,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { } if (mCurrentWebViewPackage.packageName.equals(mDefaultProvider.packageName)) { List<UserPackage> userPackages = mSystemInterface.getPackageInfoForProviderAllUsers( mContext, mDefaultProvider); mSystemInterface.getPackageInfoForProviderAllUsers(mDefaultProvider); return !isInstalledAndEnabledForAllUsers(userPackages); } else { return false; Loading @@ -216,10 +212,8 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { TAG, "No provider available for all users, trying to install and enable " + mDefaultProvider.packageName); mSystemInterface.installExistingPackageForAllUsers( mContext, mDefaultProvider.packageName); mSystemInterface.enablePackageForAllUsers( mContext, mDefaultProvider.packageName, true); mSystemInterface.installExistingPackageForAllUsers(mDefaultProvider.packageName); mSystemInterface.enablePackageForAllUsers(mDefaultProvider.packageName, true); } @Override Loading @@ -229,7 +223,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { synchronized (mLock) { mCurrentWebViewPackage = findPreferredWebViewPackage(); repairNeeded = shouldTriggerRepairLocked(); String userSetting = mSystemInterface.getUserChosenWebViewProvider(mContext); String userSetting = mSystemInterface.getUserChosenWebViewProvider(); if (userSetting != null && !userSetting.equals(mCurrentWebViewPackage.packageName)) { // Don't persist the user-chosen setting across boots if the package being Loading @@ -237,8 +231,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { // be surprised by the device switching to using a certain webview package, // that was uninstalled/disabled a long time ago, if it is installed/enabled // again. mSystemInterface.updateUserSetting(mContext, mCurrentWebViewPackage.packageName); mSystemInterface.updateUserSetting(mCurrentWebViewPackage.packageName); } onWebViewProviderChanged(mCurrentWebViewPackage); } Loading Loading @@ -362,7 +355,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { oldPackage = mCurrentWebViewPackage; if (newProviderName != null) { mSystemInterface.updateUserSetting(mContext, newProviderName); mSystemInterface.updateUserSetting(newProviderName); } try { Loading Loading @@ -493,7 +486,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { Counter.logIncrement("webview.value_find_preferred_webview_package_counter"); // If the user has chosen provider, use that (if it's installed and enabled for all // users). String userChosenPackageName = mSystemInterface.getUserChosenWebViewProvider(mContext); String userChosenPackageName = mSystemInterface.getUserChosenWebViewProvider(); WebViewProviderInfo userChosenProvider = getWebViewProviderForPackage(userChosenPackageName); if (userChosenProvider != null) { Loading @@ -502,8 +495,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { mSystemInterface.getPackageInfoForProvider(userChosenProvider); if (validityResult(userChosenProvider, packageInfo) == VALIDITY_OK) { List<UserPackage> userPackages = mSystemInterface.getPackageInfoForProviderAllUsers( mContext, userChosenProvider); mSystemInterface.getPackageInfoForProviderAllUsers(userChosenProvider); if (isInstalledAndEnabledForAllUsers(userPackages)) { return packageInfo; } Loading Loading @@ -779,7 +771,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { pw.println(" WebView packages:"); for (WebViewProviderInfo provider : allProviders) { List<UserPackage> userPackages = mSystemInterface.getPackageInfoForProviderAllUsers(mContext, provider); mSystemInterface.getPackageInfoForProviderAllUsers(provider); PackageInfo systemUserPackageInfo = userPackages.get(UserHandle.USER_SYSTEM).getPackageInfo(); if (systemUserPackageInfo == null) { Loading @@ -798,8 +790,7 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { if (validity == VALIDITY_OK) { boolean installedForAllUsers = isInstalledAndEnabledForAllUsers( mSystemInterface.getPackageInfoForProviderAllUsers( mContext, provider)); mSystemInterface.getPackageInfoForProviderAllUsers(provider)); pw.println( TextUtils.formatSimple( " Valid package %s (%s) is %s installed/enabled for all users", Loading