Skip to content
Snippets Groups Projects
Commit 7d93b913 authored by Ziad Youssef's avatar Ziad Youssef
Browse files

Add a flag for WebViewUpdateServiceImpl changes

This adds a class similar to WebViewUpdateServiceImpl behind a flag.
The intended modification will be mainly for the new class.

This doesn't introduce any functional changes.

Test: manually overriding flags using ag/25382508

Bug: 308907090

Change-Id: Ia522be467b435e2e8b8ef76ddeb16b4e7dc821c5
parent b7036071
No related branches found
No related tags found
No related merge requests found
......@@ -63,6 +63,7 @@ aconfig_srcjars = [
":android.hardware.usb.flags-aconfig-java{.generated_srcjars}",
":android.tracing.flags-aconfig-java{.generated_srcjars}",
":android.appwidget.flags-aconfig-java{.generated_srcjars}",
":android.webkit.flags-aconfig-java{.generated_srcjars}",
]
filegroup {
......@@ -748,3 +749,19 @@ java_aconfig_library {
aconfig_declarations: "android.appwidget.flags-aconfig",
defaults: ["framework-minus-apex-aconfig-java-defaults"],
}
// WebView
aconfig_declarations {
name: "android.webkit.flags-aconfig",
package: "android.webkit",
srcs: [
"core/java/android/webkit/*.aconfig",
"services/core/java/com/android/server/webkit/*.aconfig",
],
}
java_aconfig_library {
name: "android.webkit.flags-aconfig-java",
aconfig_declarations: "android.webkit.flags-aconfig",
defaults: ["framework-minus-apex-aconfig-java-defaults"],
}
......@@ -16,6 +16,8 @@
package com.android.server.webkit;
import static android.webkit.Flags.updateServiceV2;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
......@@ -51,7 +53,7 @@ public class WebViewUpdateService extends SystemService {
private static final String TAG = "WebViewUpdateService";
private BroadcastReceiver mWebViewUpdatedReceiver;
private WebViewUpdateServiceImpl mImpl;
private WebViewUpdateServiceInterface mImpl;
static final int PACKAGE_CHANGED = 0;
static final int PACKAGE_ADDED = 1;
......@@ -60,7 +62,11 @@ public class WebViewUpdateService extends SystemService {
public WebViewUpdateService(Context context) {
super(context);
mImpl = new WebViewUpdateServiceImpl(context, SystemImpl.getInstance());
if (updateServiceV2()) {
mImpl = new WebViewUpdateServiceImpl2(context, SystemImpl.getInstance());
} else {
mImpl = new WebViewUpdateServiceImpl(context, SystemImpl.getInstance());
}
}
@Override
......
......@@ -63,7 +63,7 @@ import java.util.List;
*
* @hide
*/
class WebViewUpdateServiceImpl {
class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface {
private static final String TAG = WebViewUpdateServiceImpl.class.getSimpleName();
private static class WebViewPackageMissingException extends Exception {
......@@ -112,7 +112,8 @@ class WebViewUpdateServiceImpl {
mSystemInterface = systemInterface;
}
void packageStateChanged(String packageName, int changedState, int userId) {
@Override
public void packageStateChanged(String packageName, int changedState, int userId) {
// We don't early out here in different cases where we could potentially early-out (e.g. if
// we receive PACKAGE_CHANGED for another user than the system user) since that would
// complicate this logic further and open up for more edge cases.
......@@ -163,7 +164,8 @@ class WebViewUpdateServiceImpl {
}
}
void prepareWebViewInSystemServer() {
@Override
public void prepareWebViewInSystemServer() {
mSystemInterface.notifyZygote(isMultiProcessEnabled());
try {
synchronized (mLock) {
......@@ -210,7 +212,8 @@ class WebViewUpdateServiceImpl {
mSystemInterface.ensureZygoteStarted();
}
void handleNewUser(int userId) {
@Override
public void handleNewUser(int userId) {
// The system user is always started at boot, and by that point we have already run one
// round of the package-changing logic (through prepareWebViewInSystemServer()), so early
// out here.
......@@ -218,7 +221,8 @@ class WebViewUpdateServiceImpl {
handleUserChange();
}
void handleUserRemoved(int userId) {
@Override
public void handleUserRemoved(int userId) {
handleUserChange();
}
......@@ -232,14 +236,16 @@ class WebViewUpdateServiceImpl {
updateCurrentWebViewPackage(null);
}
void notifyRelroCreationCompleted() {
@Override
public void notifyRelroCreationCompleted() {
synchronized (mLock) {
mNumRelroCreationsFinished++;
checkIfRelrosDoneLocked();
}
}
WebViewProviderResponse waitForAndGetProvider() {
@Override
public WebViewProviderResponse waitForAndGetProvider() {
PackageInfo webViewPackage = null;
final long timeoutTimeMs = System.nanoTime() / NS_PER_MS + WAIT_TIMEOUT_MS;
boolean webViewReady = false;
......@@ -284,7 +290,8 @@ class WebViewUpdateServiceImpl {
* replacing that provider it will not be in use directly, but will be used when the relros
* or the replacement are done).
*/
String changeProviderAndSetting(String newProviderName) {
@Override
public String changeProviderAndSetting(String newProviderName) {
PackageInfo newPackage = updateCurrentWebViewPackage(newProviderName);
if (newPackage == null) return "";
return newPackage.packageName;
......@@ -367,7 +374,8 @@ class WebViewUpdateServiceImpl {
/**
* Fetch only the currently valid WebView packages.
**/
WebViewProviderInfo[] getValidWebViewPackages() {
@Override
public WebViewProviderInfo[] getValidWebViewPackages() {
ProviderAndPackageInfo[] providersAndPackageInfos = getValidWebViewPackagesAndInfos();
WebViewProviderInfo[] providers =
new WebViewProviderInfo[providersAndPackageInfos.length];
......@@ -464,11 +472,13 @@ class WebViewUpdateServiceImpl {
return true;
}
WebViewProviderInfo[] getWebViewPackages() {
@Override
public WebViewProviderInfo[] getWebViewPackages() {
return mSystemInterface.getWebViewPackages();
}
PackageInfo getCurrentWebViewPackage() {
@Override
public PackageInfo getCurrentWebViewPackage() {
synchronized (mLock) {
return mCurrentWebViewPackage;
}
......@@ -620,7 +630,8 @@ class WebViewUpdateServiceImpl {
return null;
}
boolean isMultiProcessEnabled() {
@Override
public boolean isMultiProcessEnabled() {
int settingValue = mSystemInterface.getMultiProcessSetting(mContext);
if (mSystemInterface.isMultiProcessDefaultEnabled()) {
// Multiprocess should be enabled unless the user has turned it off manually.
......@@ -631,7 +642,8 @@ class WebViewUpdateServiceImpl {
}
}
void enableMultiProcess(boolean enable) {
@Override
public void enableMultiProcess(boolean enable) {
PackageInfo current = getCurrentWebViewPackage();
mSystemInterface.setMultiProcessSetting(mContext,
enable ? MULTIPROCESS_SETTING_ON_VALUE : MULTIPROCESS_SETTING_OFF_VALUE);
......@@ -644,7 +656,8 @@ class WebViewUpdateServiceImpl {
/**
* Dump the state of this Service.
*/
void dumpState(PrintWriter pw) {
@Override
public void dumpState(PrintWriter pw) {
pw.println("Current WebView Update Service state");
pw.println(String.format(" Multiprocess enabled: %b", isMultiProcessEnabled()));
synchronized (mLock) {
......
This diff is collapsed.
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.webkit;
import android.content.pm.PackageInfo;
import android.webkit.WebViewProviderInfo;
import android.webkit.WebViewProviderResponse;
import java.io.PrintWriter;
interface WebViewUpdateServiceInterface {
void packageStateChanged(String packageName, int changedState, int userId);
void handleNewUser(int userId);
void handleUserRemoved(int userId);
WebViewProviderInfo[] getWebViewPackages();
void prepareWebViewInSystemServer();
void notifyRelroCreationCompleted();
WebViewProviderResponse waitForAndGetProvider();
String changeProviderAndSetting(String newProviderName);
WebViewProviderInfo[] getValidWebViewPackages();
PackageInfo getCurrentWebViewPackage();
boolean isMultiProcessEnabled();
void enableMultiProcess(boolean enable);
void dumpState(PrintWriter pw);
}
package: "android.webkit"
flag {
name: "update_service_v2"
namespace: "webview"
description: "Using a new version of the WebView update service"
bug: "308907090"
is_fixed_read_only: true
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment