[webkit] add feature flag for ServiceWorkerClien..shouldInterceptRequest
Allow developers to check whether
ServiceWorkerClientCompat.shouldInterceptRequest is supported through
the use of a feature flag.
Corresponding Chromium change:
https://chromium-review.googlesource.com/c/chromium/src/+/998164
Bug: 73151166
Test: Ensure ServiceWorkerClientCompat test fails when the
SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST flag is missing on the support
support library side.
Change-Id: I3f8e27f6462a7bab90a48bf8c5d9cf8d5814dc9b
diff --git a/webkit/api/current.txt b/webkit/api/current.txt
index b565173..b001df8 100644
--- a/webkit/api/current.txt
+++ b/webkit/api/current.txt
@@ -66,6 +66,7 @@
field public static final java.lang.String SERVICE_WORKER_CACHE_MODE = "SERVICE_WORKER_CACHE_MODE";
field public static final java.lang.String SERVICE_WORKER_CONTENT_ACCESS = "SERVICE_WORKER_CONTENT_ACCESS";
field public static final java.lang.String SERVICE_WORKER_FILE_ACCESS = "SERVICE_WORKER_FILE_ACCESS";
+ field public static final java.lang.String SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST = "SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST";
field public static final java.lang.String START_SAFE_BROWSING = "START_SAFE_BROWSING";
field public static final java.lang.String VISUAL_STATE_CALLBACK = "VISUAL_STATE_CALLBACK";
}
diff --git a/webkit/src/main/java/androidx/webkit/ServiceWorkerClientCompat.java b/webkit/src/main/java/androidx/webkit/ServiceWorkerClientCompat.java
index 19aab8c..5c3c5ff 100644
--- a/webkit/src/main/java/androidx/webkit/ServiceWorkerClientCompat.java
+++ b/webkit/src/main/java/androidx/webkit/ServiceWorkerClientCompat.java
@@ -43,6 +43,10 @@
* @see android.webkit.WebViewClient#shouldInterceptRequest(android.webkit.WebView,
* WebResourceRequest)
*
+ * This method is called only if
+ * {@link WebViewFeature#SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST} is supported. You can check
+ * whether that flag is supported using {@link WebViewFeature#isFeatureSupported(String)}.
+ *
*/
public abstract WebResourceResponse shouldInterceptRequest(@NonNull WebResourceRequest request);
}
diff --git a/webkit/src/main/java/androidx/webkit/WebViewFeature.java b/webkit/src/main/java/androidx/webkit/WebViewFeature.java
index eb54eed..d321c8c 100644
--- a/webkit/src/main/java/androidx/webkit/WebViewFeature.java
+++ b/webkit/src/main/java/androidx/webkit/WebViewFeature.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.webkit.ValueCallback;
+import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import androidx.annotation.NonNull;
@@ -56,7 +57,8 @@
SERVICE_WORKER_CACHE_MODE,
SERVICE_WORKER_CONTENT_ACCESS,
SERVICE_WORKER_FILE_ACCESS,
- SERVICE_WORKER_BLOCK_NETWORK_LOADS
+ SERVICE_WORKER_BLOCK_NETWORK_LOADS,
+ SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST
})
@Retention(RetentionPolicy.SOURCE)
@@ -159,6 +161,14 @@
public static final String SERVICE_WORKER_BLOCK_NETWORK_LOADS =
Features.SERVICE_WORKER_BLOCK_NETWORK_LOADS;
+ /**
+ * Feature for {@link #isFeatureSupported(String)}.
+ * This feature covers
+ * {@link ServiceWorkerClientCompat#shouldInterceptRequest(WebResourceRequest)}.
+ */
+ public static final String SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST =
+ Features.SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST;
+
/**
* Return whether a feature is supported at run-time. This depends on the Android version of the
diff --git a/webkit/src/main/java/androidx/webkit/internal/ServiceWorkerClientAdapter.java b/webkit/src/main/java/androidx/webkit/internal/ServiceWorkerClientAdapter.java
index 3ffeb83..f96bbd1 100644
--- a/webkit/src/main/java/androidx/webkit/internal/ServiceWorkerClientAdapter.java
+++ b/webkit/src/main/java/androidx/webkit/internal/ServiceWorkerClientAdapter.java
@@ -22,6 +22,7 @@
import androidx.webkit.ServiceWorkerClientCompat;
import org.chromium.support_lib_boundary.ServiceWorkerClientBoundaryInterface;
+import org.chromium.support_lib_boundary.util.Features;
/**
* Adapter between {@link ServiceWorkerClientCompat} and
@@ -39,4 +40,9 @@
public WebResourceResponse shouldInterceptRequest(WebResourceRequest request) {
return mClient.shouldInterceptRequest(request);
}
+
+ @Override
+ public String[] getSupportedFeatures() {
+ return new String[] { Features.SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST };
+ }
}
diff --git a/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java b/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
index 52189e9..b019544 100644
--- a/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
+++ b/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
@@ -19,8 +19,10 @@
import android.content.Context;
import android.os.Build;
import android.webkit.ValueCallback;
+import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
+import androidx.webkit.ServiceWorkerClientCompat;
import androidx.webkit.WebViewCompat;
import androidx.webkit.WebViewFeature;
import androidx.webkit.WebViewFeature.WebViewSupportFeature;
@@ -114,6 +116,13 @@
* {@link androidx.webkit.ServiceWorkerWebSettingsCompat#setBlockNetworkLoads(boolean)}.
*/
SERVICE_WORKER_BLOCK_NETWORK_LOADS(WebViewFeature.SERVICE_WORKER_BLOCK_NETWORK_LOADS,
+ Build.VERSION_CODES.N),
+
+ /**
+ * This feature covers
+ * {@link ServiceWorkerClientCompat#shouldInterceptRequest(WebResourceRequest)}.
+ */
+ SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST(WebViewFeature.SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST,
Build.VERSION_CODES.N);
private final String mFeatureValue;