[WebView Support Library] avoid passing any state to chromium on init
To support several versions of the WebView Support Library within the
same app/process we need to ensure the support library glue (in
chromium) doesn't hold any global state referencing the (app-side of
the) support library.
With this CL we remove the only current global reference to the support
library: SupportLibraryInfo. The only information kept within that
reference was a list of feature flags. Those feature flags will now live
in individual callback objects instead, like WebViewClientCompat.
Corresponding Chromium CL:
http://crrev/c/995212
Bug: 77539415
Test: run androidx.webkit tests.
Change-Id: I61e06fb0d50e29f181f9340838e4d6f17588dea5
diff --git a/webkit/src/main/java/androidx/webkit/internal/SupportLibraryInfo.java b/webkit/src/main/java/androidx/webkit/internal/SupportLibraryInfo.java
deleted file mode 100644
index da8a02c..0000000
--- a/webkit/src/main/java/androidx/webkit/internal/SupportLibraryInfo.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2018 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 androidx.webkit.internal;
-
-import org.chromium.support_lib_boundary.SupportLibraryInfoBoundaryInterface;
-import org.chromium.support_lib_boundary.util.Features;
-
-/**
- * Contains information about the Android Support Library part of the WebView Support Library - this
- * information is passed to the WebView APK code with the first WebView Support Library call.
- */
-public class SupportLibraryInfo implements SupportLibraryInfoBoundaryInterface {
- // Features supported by the support library itself (regardless of what the WebView APK
- // supports).
- private static final String[] SUPPORTED_FEATURES =
- new String[] {
- Features.VISUAL_STATE_CALLBACK
- };
-
- @Override
- public String[] getSupportedFeatures() {
- return SUPPORTED_FEATURES;
- }
-}
diff --git a/webkit/src/main/java/androidx/webkit/internal/WebViewGlueCommunicator.java b/webkit/src/main/java/androidx/webkit/internal/WebViewGlueCommunicator.java
index 67e0030..9adffe7 100644
--- a/webkit/src/main/java/androidx/webkit/internal/WebViewGlueCommunicator.java
+++ b/webkit/src/main/java/androidx/webkit/internal/WebViewGlueCommunicator.java
@@ -59,13 +59,11 @@
private static InvocationHandler fetchGlueProviderFactoryImpl() throws IllegalAccessException,
InvocationTargetException, ClassNotFoundException, NoSuchMethodException {
- Class<?> glueFactoryProviderFetcherClass = Class.forName(
- GLUE_FACTORY_PROVIDER_FETCHER_CLASS, false, getWebViewClassLoader());
- Method createProviderFactoryMethod = glueFactoryProviderFetcherClass.getDeclaredMethod(
- GLUE_FACTORY_PROVIDER_FETCHER_METHOD, InvocationHandler.class);
- return (InvocationHandler) createProviderFactoryMethod.invoke(null,
- BoundaryInterfaceReflectionUtil.createInvocationHandlerFor(
- new SupportLibraryInfo()));
+ Class<?> glueFactoryProviderFetcherClass = Class.forName(
+ GLUE_FACTORY_PROVIDER_FETCHER_CLASS, false, getWebViewClassLoader());
+ Method createProviderFactoryMethod = glueFactoryProviderFetcherClass.getDeclaredMethod(
+ GLUE_FACTORY_PROVIDER_FETCHER_METHOD);
+ return (InvocationHandler) createProviderFactoryMethod.invoke(null);
}
private static WebViewProviderFactory createGlueProviderFactory() {