diff --git a/webkit/integration-tests/common/src/main/java/androidx/webkit/test/common/PollingCheck.java b/webkit/integration-tests/common/src/main/java/androidx/webkit/test/common/PollingCheck.java
index b60e7a8..d5d7853 100644
--- a/webkit/integration-tests/common/src/main/java/androidx/webkit/test/common/PollingCheck.java
+++ b/webkit/integration-tests/common/src/main/java/androidx/webkit/test/common/PollingCheck.java
@@ -33,7 +33,7 @@
  */
 public abstract class PollingCheck {
     private static final long TIME_SLICE = 50;
-    private long mTimeout;
+    private final long mTimeout;
 
     public PollingCheck(long timeout) {
         mTimeout = timeout;
diff --git a/webkit/integration-tests/common/src/main/java/androidx/webkit/test/common/TestWebMessageListener.java b/webkit/integration-tests/common/src/main/java/androidx/webkit/test/common/TestWebMessageListener.java
index 9543319..21c912b 100644
--- a/webkit/integration-tests/common/src/main/java/androidx/webkit/test/common/TestWebMessageListener.java
+++ b/webkit/integration-tests/common/src/main/java/androidx/webkit/test/common/TestWebMessageListener.java
@@ -16,7 +16,6 @@
 
 package androidx.webkit.test.common;
 
-import android.annotation.SuppressLint;
 import android.net.Uri;
 import android.webkit.WebView;
 
@@ -24,12 +23,12 @@
 import androidx.webkit.WebMessageCompat;
 import androidx.webkit.WebViewCompat;
 
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-
 import org.jspecify.annotations.NonNull;
 import org.jspecify.annotations.Nullable;
 
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+
 public class TestWebMessageListener implements WebViewCompat.WebMessageListener {
     private final BlockingQueue<Data> mQueue = new LinkedBlockingQueue<>();
 
@@ -38,6 +37,7 @@
         Uri mSourceOrigin;
         boolean mIsMainFrame;
         public @Nullable JavaScriptReplyProxy mReplyProxy;
+
         Data(WebMessageCompat message, Uri sourceOrigin, boolean isMainFrame,
                 JavaScriptReplyProxy replyProxy) {
             mMessage = message;
@@ -55,14 +55,14 @@
     }
 
     /**
-     *  Blocks and waits for onPostMessage to queue up data from JavaScript.
+     * Blocks and waits for onPostMessage to queue up data from JavaScript.
      */
     public @NonNull Data waitForOnPostMessage() throws Exception {
         return WebkitUtils.waitForNextQueueElement(mQueue);
     }
 
     /**
-     *  Indicates whether the queue has any elements enqueued.
+     * Indicates whether the queue has any elements enqueued.
      */
     public boolean hasNoMoreOnPostMessage() {
         return mQueue.isEmpty();
diff --git a/webkit/integration-tests/common/src/main/java/androidx/webkit/test/common/WebkitUtils.java b/webkit/integration-tests/common/src/main/java/androidx/webkit/test/common/WebkitUtils.java
index 3caed8f..8f4e30c 100644
--- a/webkit/integration-tests/common/src/main/java/androidx/webkit/test/common/WebkitUtils.java
+++ b/webkit/integration-tests/common/src/main/java/androidx/webkit/test/common/WebkitUtils.java
@@ -16,7 +16,6 @@
 
 package androidx.webkit.test.common;
 
-import android.annotation.SuppressLint;
 import android.content.Context;
 import android.os.Handler;
 import android.os.Looper;
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/AsyncStartUpTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/AsyncStartUpTest.java
index cb62196..f828c7e 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/AsyncStartUpTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/AsyncStartUpTest.java
@@ -23,8 +23,8 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
 import androidx.webkit.internal.WebViewGlueCommunicator;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.junit.Assert;
 import org.junit.Assume;
@@ -141,7 +141,7 @@
         // Triggers provider init.
         new Handler(Looper.getMainLooper()).post(WebViewGlueCommunicator::getWebViewClassLoader);
         WebViewCompat.startUpWebView(config,
-                    startUpFinishedFuture::set);
+                startUpFinishedFuture::set);
         // Wait until the callback has triggered.
         WebViewStartUpResult result = WebkitUtils.waitForFuture(startUpFinishedFuture);
         Assert.assertNotNull(result);
@@ -271,7 +271,7 @@
     @MediumTest
     @Ignore("b/376656739")
     public void
-            testAsyncStartUp_withoutRunningUiThreadStartUpLoadsWebViewWithoutStartingChromium()
+    testAsyncStartUp_withoutRunningUiThreadStartUpLoadsWebViewWithoutStartingChromium()
             throws Throwable {
         Assume.assumeFalse(webViewCurrentlyLoaded());
         WebViewStartUpConfig config = new WebViewStartUpConfig.Builder(
@@ -301,7 +301,7 @@
     @MediumTest
     @Ignore("b/376656739")
     public void
-            testAsyncStartUp_withoutRunningUiThreadStartUpReturnsBlockingLocationWithProviderInit()
+    testAsyncStartUp_withoutRunningUiThreadStartUpReturnsBlockingLocationWithProviderInit()
             throws Throwable {
         Assume.assumeFalse(webViewCurrentlyLoaded());
         WebViewStartUpConfig config = new WebViewStartUpConfig.Builder(
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/MultiProfileTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/MultiProfileTest.java
index 47b9693..a272a31 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/MultiProfileTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/MultiProfileTest.java
@@ -26,8 +26,8 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.junit.Assert;
 import org.junit.Before;
@@ -49,6 +49,7 @@
     // We are unifying the name as there's no way at the moment to delete the loaded profiles, we
     // should be able to use different test profiles once b/304456333 is fixed.
     private static final String PROFILE_TEST_NAME = "Test";
+
     @Before
     public void setUp() {
         WebkitUtils.checkFeature(WebViewFeature.MULTI_PROFILE);
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/PostMessageTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/PostMessageTest.java
index fbd186a..068eeae 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/PostMessageTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/PostMessageTest.java
@@ -26,8 +26,8 @@
 import androidx.test.filters.LargeTest;
 import androidx.webkit.WebMessagePortCompat.WebMessageCallbackCompat;
 import androidx.webkit.test.common.PollingCheck;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.jspecify.annotations.NonNull;
 import org.junit.After;
@@ -197,7 +197,7 @@
         for (int i = 0; i < messageCount; i++) {
             // The JavaScript code simply appends an integer counter to the end of the message it
             // receives, which is why we have a second i on the end.
-            String expectedMessageFromJavascript = WEBVIEW_MESSAGE + i + "" + i;
+            String expectedMessageFromJavascript = WEBVIEW_MESSAGE + i + i;
             Assert.assertEquals(expectedMessageFromJavascript,
                     WebkitUtils.waitForNextQueueElement(queue));
         }
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/ProxyControllerTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/ProxyControllerTest.java
index 25eda66..72d4843e4 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/ProxyControllerTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/ProxyControllerTest.java
@@ -27,8 +27,8 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
 import androidx.webkit.internal.ProxyControllerImpl;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.junit.After;
 import org.junit.Assert;
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/ServiceWorkerClientCompatTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/ServiceWorkerClientCompatTest.java
index 144c44c..33ddef9 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/ServiceWorkerClientCompatTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/ServiceWorkerClientCompatTest.java
@@ -27,8 +27,8 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
 import androidx.webkit.test.common.PollingCheck;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.jspecify.annotations.NonNull;
 import org.jspecify.annotations.Nullable;
@@ -39,7 +39,7 @@
 import org.junit.runner.RunWith;
 
 import java.io.ByteArrayInputStream;
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Callable;
@@ -104,12 +104,10 @@
         public WebResourceResponse shouldInterceptRequest(WebView view,
                 WebResourceRequest request) {
             // Only return content for INDEX_URL, deny all other requests.
-            try {
-                if (request.getUrl().toString().equals(INDEX_URL)) {
-                    return new WebResourceResponse("text/html", "utf-8",
-                            new ByteArrayInputStream(INDEX_RAW_HTML.getBytes("UTF-8")));
-                }
-            } catch (UnsupportedEncodingException e) { }
+            if (request.getUrl().toString().equals(INDEX_URL)) {
+                return new WebResourceResponse("text/html", "utf-8",
+                        new ByteArrayInputStream(INDEX_RAW_HTML.getBytes(StandardCharsets.UTF_8)));
+            }
             return new WebResourceResponse("text/html", "UTF-8", null);
         }
     }
@@ -122,12 +120,10 @@
                 @NonNull WebResourceRequest request) {
             // Records intercepted requests and only return content for SW_URL.
             mInterceptedRequests.add(request);
-            try {
-                if (request.getUrl().toString().equals(SW_URL)) {
-                    return new WebResourceResponse("application/javascript", "utf-8",
-                            new ByteArrayInputStream(SW_RAW_HTML.getBytes("UTF-8")));
-                }
-            } catch (java.io.UnsupportedEncodingException e) { }
+            if (request.getUrl().toString().equals(SW_URL)) {
+                return new WebResourceResponse("application/javascript", "utf-8",
+                        new ByteArrayInputStream(SW_RAW_HTML.getBytes(StandardCharsets.UTF_8)));
+            }
             return new WebResourceResponse("text/html", "UTF-8", null);
         }
 
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/ServiceWorkerWebSettingsCompatTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/ServiceWorkerWebSettingsCompatTest.java
index 55c8160..9f01dc0 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/ServiceWorkerWebSettingsCompatTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/ServiceWorkerWebSettingsCompatTest.java
@@ -24,8 +24,8 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.junit.After;
 import org.junit.Assert;
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/TracingControllerTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/TracingControllerTest.java
index 84be87d..57496d7 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/TracingControllerTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/TracingControllerTest.java
@@ -22,8 +22,8 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
 import androidx.webkit.test.common.PollingCheck;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.junit.After;
 import org.junit.Assert;
@@ -232,6 +232,7 @@
     private ThreadFactory getCustomThreadFactory() {
         return new ThreadFactory() {
             private final AtomicInteger mThreadCount = new AtomicInteger(0);
+
             @Override
             public Thread newThread(Runnable r) {
                 Thread thread = new Thread(r);
@@ -296,6 +297,7 @@
             return mChunkCount;
 
         }
+
         boolean getComplete() {
             return mComplete;
         }
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatDarkModeTestBase.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatDarkModeTestBase.java
index 7a79081..bb7c299 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatDarkModeTestBase.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatDarkModeTestBase.java
@@ -25,8 +25,8 @@
 import android.webkit.WebSettings;
 import android.webkit.WebView;
 
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.hamcrest.Description;
 import org.hamcrest.Matcher;
@@ -76,7 +76,7 @@
     @Rule
     public final androidx.test.rule.ActivityTestRule<T> mActivityRule;
 
-    /** @noinspection deprecation*/
+    /** @noinspection deprecation */
     @SuppressWarnings("deprecation")
     public WebSettingsCompatDarkModeTestBase(@NonNull Class<T> activityClass) {
         mActivityRule = new androidx.test.rule.ActivityTestRule<>(activityClass);
@@ -132,8 +132,8 @@
         double major = 1.0 * maxEntry.getValue() / (sideLength * sideLength);
         assertTrue(
                 "The majority color should be at least 85% of the pixels,"
-                + " the actual value " + major,
-                 major > 0.85);
+                        + " the actual value " + major,
+                major > 0.85);
         return maxEntry.getKey();
     }
 
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatTest.java
index 6a097be..10e671d 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatTest.java
@@ -28,8 +28,8 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.junit.After;
 import org.junit.Assert;
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatUserAgentMetadataTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatUserAgentMetadataTest.java
index 55ac1fd..ecd8961 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatUserAgentMetadataTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebSettingsCompatUserAgentMetadataTest.java
@@ -28,8 +28,8 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.junit.After;
 import org.junit.Assert;
@@ -53,8 +53,8 @@
             "sec-ch-ua-platform-version", "sec-ch-ua-bitness", "sec-ch-ua-full-version-list",
             "sec-ch-ua-wow64"};
 
-    private static final String FIRST_URL =  "/first.html";
-    private static final String SECOND_URL =  "/second.html";
+    private static final String FIRST_URL = "/first.html";
+    private static final String SECOND_URL = "/second.html";
 
     private static final String FIRST_RAW_HTML =
             "<!DOCTYPE html>\n"
@@ -95,6 +95,7 @@
     private static final class TestHttpsWebViewClient extends
             WebViewOnUiThread.WaitForLoadedClient {
         private final List<WebResourceRequest> mInterceptedRequests = new ArrayList<>();
+
         TestHttpsWebViewClient(WebViewOnUiThread webViewOnUiThread) throws Exception {
             super(webViewOnUiThread);
         }
@@ -195,7 +196,7 @@
         // client hints cache impacts other tests.
         String baseUrl = "https://example1.com";
         mWebViewOnUiThread.loadUrlAndWaitForCompletion(baseUrl + FIRST_URL);
-        List<WebResourceRequest> requests  = mTestHttpsWebViewClient.getInterceptedRequests();
+        List<WebResourceRequest> requests = mTestHttpsWebViewClient.getInterceptedRequests();
         Assert.assertEquals(2, requests.size());
 
         // Make sure the first request has low-entropy client hints.
@@ -277,7 +278,7 @@
         // client hints cache impacts other tests.
         String baseUrl = "https://example2.com";
         mWebViewOnUiThread.loadUrlAndWaitForCompletion(baseUrl + FIRST_URL);
-        List<WebResourceRequest> requests  = mTestHttpsWebViewClient.getInterceptedRequests();
+        List<WebResourceRequest> requests = mTestHttpsWebViewClient.getInterceptedRequests();
         Assert.assertEquals(2, requests.size());
 
         // Make sure the first request has low-entropy client hints.
@@ -365,7 +366,7 @@
         String baseUrl = "https://example3.com";
         mWebViewOnUiThread.loadUrlAndWaitForCompletion(baseUrl + FIRST_URL);
         mWebViewOnUiThread.loadUrlAndWaitForCompletion(FIRST_URL);
-        List<WebResourceRequest> requests  = mTestHttpsWebViewClient.getInterceptedRequests();
+        List<WebResourceRequest> requests = mTestHttpsWebViewClient.getInterceptedRequests();
         Assert.assertEquals(2, requests.size());
 
         // Make sure the first request has low-entropy client hints.
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebStorageTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebStorageTest.java
index 2a745dfc..7586996 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebStorageTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebStorageTest.java
@@ -25,8 +25,8 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
 import androidx.test.filters.SdkSuppress;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.junit.After;
 import org.junit.Assert;
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewClientCompatTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewClientCompatTest.java
index b3c98ff..28da65b 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewClientCompatTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewClientCompatTest.java
@@ -26,8 +26,8 @@
 import androidx.concurrent.futures.ResolvableFuture;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.jspecify.annotations.NonNull;
 import org.junit.After;
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewCompatTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewCompatTest.java
index 93083d9..fdd5337 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewCompatTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewCompatTest.java
@@ -40,8 +40,8 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
 import androidx.test.filters.SdkSuppress;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.jspecify.annotations.NonNull;
 import org.junit.After;
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewDocumentStartJavaScriptTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewDocumentStartJavaScriptTest.java
index d3533d4..d46aef4 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewDocumentStartJavaScriptTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewDocumentStartJavaScriptTest.java
@@ -16,27 +16,21 @@
 
 package androidx.webkit;
 
-import android.net.Uri;
-import android.webkit.WebView;
-
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
 import androidx.webkit.test.common.TestWebMessageListener;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
-import org.jspecify.annotations.NonNull;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
 
 /**
  * Test
@@ -51,10 +45,11 @@
     private static final String JS_OBJECT_NAME = "myObject";
     private static final String BASIC_USAGE = "<!DOCTYPE html><html><body></body></html>";
     private static final String BASIC_SCRIPT = "myObject.postMessage('hello');";
-    private static final Set<String> MATCH_EXAMPLE_COM = new HashSet<>(Arrays.asList(BASE_URI));
+    private static final Set<String> MATCH_EXAMPLE_COM = new HashSet<>(
+            Collections.singletonList(BASE_URI));
 
     private WebViewOnUiThread mWebViewOnUiThread;
-    private TestWebMessageListener mListener = new TestWebMessageListener();
+    private final TestWebMessageListener mListener = new TestWebMessageListener();
 
     @Before
     public void setUp() {
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewRenderProcessClientTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewRenderProcessClientTest.java
index 2976981..96fa4c8 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewRenderProcessClientTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewRenderProcessClientTest.java
@@ -23,8 +23,8 @@
 import androidx.concurrent.futures.ResolvableFuture;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.jspecify.annotations.NonNull;
 import org.jspecify.annotations.Nullable;
@@ -60,8 +60,9 @@
         // A CountDownLatch is used here, instead of a Future, because that makes it
         // easier to support requiring variable numbers of releaseBlock() calls
         // to unblock.
-        private CountDownLatch mLatch;
-        private ResolvableFuture<Void> mBecameBlocked;
+        private final CountDownLatch mLatch;
+        private final ResolvableFuture<Void> mBecameBlocked;
+
         JSBlocker(int requiredReleaseCount) {
             mLatch = new CountDownLatch(requiredReleaseCount);
             mBecameBlocked = ResolvableFuture.create();
@@ -188,7 +189,7 @@
         WebViewRenderProcessClient client = makeWebViewRenderProcessClient(
                 () -> clientCalled.set(true),
                 () -> clientCalled.set(true)
-            );
+        );
         mWebViewOnUiThread.setWebViewRenderProcessClient(client);
 
         mWebViewOnUiThread.setWebViewRenderProcessClient(null);
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewRenderProcessTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewRenderProcessTest.java
index 821703b..4c43f94 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewRenderProcessTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewRenderProcessTest.java
@@ -27,8 +27,8 @@
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.MediumTest;
 import androidx.test.filters.SdkSuppress;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import com.google.common.util.concurrent.ListenableFuture;
 
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewWebMessageCompatTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewWebMessageCompatTest.java
index 441da04..35255f4 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewWebMessageCompatTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewWebMessageCompatTest.java
@@ -22,8 +22,8 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
 import org.jspecify.annotations.NonNull;
 import org.jspecify.annotations.Nullable;
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewWebMessageListenerTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewWebMessageListenerTest.java
index 2fd1d76..6bf6164 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewWebMessageListenerTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/WebViewWebMessageListenerTest.java
@@ -16,16 +16,12 @@
 
 package androidx.webkit;
 
-import android.net.Uri;
-import android.webkit.WebView;
-
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
 import androidx.webkit.test.common.TestWebMessageListener;
-import androidx.webkit.test.common.WebkitUtils;
 import androidx.webkit.test.common.WebViewOnUiThread;
+import androidx.webkit.test.common.WebkitUtils;
 
-import org.jspecify.annotations.NonNull;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -36,8 +32,6 @@
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
 
 /**
  * Test {@link WebViewCompat#addWebMessageListener} and {@link
@@ -120,7 +114,7 @@
         // in JavaScript.
         loadHtmlSync(BASIC_ARRAY_BUFFER_USAGE);
         TestWebMessageListener.Data data = mListener.waitForOnPostMessage();
-        Assert.assertArrayEquals(new byte[] {1, 2, 3}, data.mMessage.getArrayBuffer());
+        Assert.assertArrayEquals(new byte[]{1, 2, 3}, data.mMessage.getArrayBuffer());
 
         Assert.assertTrue(
                 "Should have no more message at this point.", mListener.hasNoMoreOnPostMessage());
@@ -266,7 +260,7 @@
     @Test
     public void testJavaScriptReplyProxyBasicUsage_ArrayBuffer() throws Exception {
         WebkitUtils.checkFeature(WebViewFeature.WEB_MESSAGE_ARRAY_BUFFER);
-        verifyJavaScriptReplyProxyArrayBuffer(new byte[] {1, 2, 3, 4, 5});
+        verifyJavaScriptReplyProxyArrayBuffer(new byte[]{1, 2, 3, 4, 5});
     }
 
     @Test
diff --git a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/internal/AssetHelperTest.java b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/internal/AssetHelperTest.java
index 3f31a37..1307b71 100644
--- a/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/internal/AssetHelperTest.java
+++ b/webkit/integration-tests/instrumentation/src/androidTest/java/androidx/webkit/internal/AssetHelperTest.java
@@ -282,7 +282,7 @@
     private byte[] readFully(InputStream stream) throws IOException {
         ByteArrayOutputStream data = new ByteArrayOutputStream();
         byte[] buf = new byte[4096];
-        for (;;) {
+        for (; ; ) {
             int len = stream.read(buf);
             if (len < 1) break;
             data.write(buf, 0, len);
