aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Birk Pakkenberg <pbirk@google.com>2022-04-22 16:29:14 +0100
committerPeter Birk Pakkenberg <pbirk@google.com>2022-05-10 10:04:56 +0100
commit0b6f4e7304c4ebd7a9e7e7c01798495f43539547 (patch)
tree6dac617a3c6469b8224583a491c7970f22aa7f00
parent1345d94c7a55fa0d15a79cb8fa7ed6d75ba0870f (diff)
downloadsupport-0b6f4e7304c4ebd7a9e7e7c01798495f43539547.tar.gz
Clean UnknownNullness issues for webkit
Explicitly adding a lint rule to break on UnknownNullness. Fix all reported lint errors. Fixes a few other reported code quality issues from Android Studio, such as fields that could be final and using try-with-resource. Fixes: 139769993 Fixes: 139774819 Test: ./gradlew webkit:webkit:lint Test: ./gradlew webkit:webkit:connectedAndroid Change-Id: I64159337850bee45d7f6fe8f24908c8051933e4e
-rw-r--r--webkit/webkit/lint.xml11
-rw-r--r--webkit/webkit/src/androidTest/java/androidx/webkit/PollingCheck.java5
-rw-r--r--webkit/webkit/src/androidTest/java/androidx/webkit/ServiceWorkerClientCompatTest.java4
-rw-r--r--webkit/webkit/src/androidTest/java/androidx/webkit/TargetSdkActivityTestRule.java3
-rw-r--r--webkit/webkit/src/androidTest/java/androidx/webkit/WebSettingsCompatDarkModeTestBase.java3
-rw-r--r--webkit/webkit/src/androidTest/java/androidx/webkit/WebViewDocumentStartJavaScriptTest.java10
-rw-r--r--webkit/webkit/src/androidTest/java/androidx/webkit/WebViewOnUiThread.java90
-rw-r--r--webkit/webkit/src/androidTest/java/androidx/webkit/WebViewTestActivity.java6
-rw-r--r--webkit/webkit/src/androidTest/java/androidx/webkit/WebViewWebMessageListenerTest.java14
-rw-r--r--webkit/webkit/src/androidTest/java/androidx/webkit/WebkitUtils.java34
-rw-r--r--webkit/webkit/src/main/java/androidx/webkit/internal/VisualStateCallbackAdapter.java6
-rw-r--r--webkit/webkit/src/main/java/androidx/webkit/internal/WebMessageCallbackAdapter.java4
-rw-r--r--webkit/webkit/src/main/java/androidx/webkit/internal/WebResourceRequestAdapter.java5
-rw-r--r--webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java6
-rw-r--r--webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactory.java13
-rw-r--r--webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactoryAdapter.java12
-rw-r--r--webkit/webkit/src/main/java/androidx/webkit/internal/WebkitToCompatConverter.java7
17 files changed, 147 insertions, 86 deletions
diff --git a/webkit/webkit/lint.xml b/webkit/webkit/lint.xml
index 6262c9b67f6..dd56e16974e 100644
--- a/webkit/webkit/lint.xml
+++ b/webkit/webkit/lint.xml
@@ -22,7 +22,18 @@
<!-- Webkit-specific lint rules: -->
+
+ <!-- We cannot cause ClassVerificationFailure in embedding apps -->
<issue id="ClassVerificationFailure" severity="fatal" />
+ <!-- Developers need to call our code from Kotlin code, so nullness is important.-->
+ <issue id="UnknownNullness" severity="fatal" >
+ <!-- The boundary interfaces are not annotated, and they represent external chromium code,
+ so skip them.
+ The catch-all ignore below does not disable this check,
+ so it needs to be done here too. -->
+ <ignore path="**/org/chromium/support_lib_boundary/**" />
+ </issue>
+
<!-- Ignore all warnings for webview-support-interfaces, since it's external chromium code. -->
<issue id="all" severity="ignore">
<ignore path="**/org/chromium/support_lib_boundary/**" />
diff --git a/webkit/webkit/src/androidTest/java/androidx/webkit/PollingCheck.java b/webkit/webkit/src/androidTest/java/androidx/webkit/PollingCheck.java
index d660b997df3..f7098fb4fd0 100644
--- a/webkit/webkit/src/androidTest/java/androidx/webkit/PollingCheck.java
+++ b/webkit/webkit/src/androidTest/java/androidx/webkit/PollingCheck.java
@@ -16,6 +16,8 @@
package androidx.webkit;
+import androidx.annotation.NonNull;
+
import org.junit.Assert;
import java.util.concurrent.Callable;
@@ -61,7 +63,8 @@ public abstract class PollingCheck {
Assert.fail("unexpected timeout");
}
- public static void check(CharSequence message, long timeout, Callable<Boolean> condition)
+ public static void check(@NonNull CharSequence message, long timeout,
+ @NonNull Callable<Boolean> condition)
throws Exception {
while (timeout > 0) {
if (condition.call()) {
diff --git a/webkit/webkit/src/androidTest/java/androidx/webkit/ServiceWorkerClientCompatTest.java b/webkit/webkit/src/androidTest/java/androidx/webkit/ServiceWorkerClientCompatTest.java
index e40b4d52d60..180fea344a2 100644
--- a/webkit/webkit/src/androidTest/java/androidx/webkit/ServiceWorkerClientCompatTest.java
+++ b/webkit/webkit/src/androidTest/java/androidx/webkit/ServiceWorkerClientCompatTest.java
@@ -26,6 +26,7 @@ import android.webkit.WebResourceResponse;
import android.webkit.WebView;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.MediumTest;
@@ -116,8 +117,9 @@ public class ServiceWorkerClientCompatTest {
}
public static class InterceptServiceWorkerClient extends ServiceWorkerClientCompat {
- private List<WebResourceRequest> mInterceptedRequests = new ArrayList<>();
+ private final List<WebResourceRequest> mInterceptedRequests = new ArrayList<>();
+ @Nullable
@Override
public WebResourceResponse shouldInterceptRequest(@NonNull WebResourceRequest request) {
// Records intercepted requests and only return content for SW_URL.
diff --git a/webkit/webkit/src/androidTest/java/androidx/webkit/TargetSdkActivityTestRule.java b/webkit/webkit/src/androidTest/java/androidx/webkit/TargetSdkActivityTestRule.java
index 1b70b672462..205980214de 100644
--- a/webkit/webkit/src/androidTest/java/androidx/webkit/TargetSdkActivityTestRule.java
+++ b/webkit/webkit/src/androidTest/java/androidx/webkit/TargetSdkActivityTestRule.java
@@ -23,6 +23,7 @@ import android.app.Activity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
+import androidx.annotation.NonNull;
import androidx.test.platform.app.InstrumentationRegistry;
/**
@@ -34,7 +35,7 @@ public class TargetSdkActivityTestRule<T extends Activity> extends
private int mTargetSdk;
private Context mAppContext;
- public TargetSdkActivityTestRule(Class<T> activityClass, int targetSdk) {
+ public TargetSdkActivityTestRule(@NonNull Class<T> activityClass, int targetSdk) {
super(activityClass);
mTargetSdk = targetSdk;
}
diff --git a/webkit/webkit/src/androidTest/java/androidx/webkit/WebSettingsCompatDarkModeTestBase.java b/webkit/webkit/src/androidTest/java/androidx/webkit/WebSettingsCompatDarkModeTestBase.java
index 50c432cac0a..568cf608916 100644
--- a/webkit/webkit/src/androidTest/java/androidx/webkit/WebSettingsCompatDarkModeTestBase.java
+++ b/webkit/webkit/src/androidTest/java/androidx/webkit/WebSettingsCompatDarkModeTestBase.java
@@ -68,7 +68,7 @@ public class WebSettingsCompatDarkModeTestBase<T extends Activity> {
@Rule
public final TargetSdkActivityTestRule<T> mActivityRule;
- public WebSettingsCompatDarkModeTestBase(Class<T> activityClass, int targetSdk) {
+ public WebSettingsCompatDarkModeTestBase(@NonNull Class<T> activityClass, int targetSdk) {
mActivityRule = new TargetSdkActivityTestRule<T>(activityClass,
targetSdk);
}
@@ -154,6 +154,7 @@ public class WebSettingsCompatDarkModeTestBase<T extends Activity> {
/**
* Returns a matcher to check if a color int is mostly green.
*/
+ @NonNull
public static Matcher<Integer> isGreen() {
return new TypeSafeMatcher<Integer>() {
private int mPageColor;
diff --git a/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewDocumentStartJavaScriptTest.java b/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewDocumentStartJavaScriptTest.java
index 619ef7a13d4..b8ae25dbf19 100644
--- a/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewDocumentStartJavaScriptTest.java
+++ b/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewDocumentStartJavaScriptTest.java
@@ -59,11 +59,11 @@ public class WebViewDocumentStartJavaScriptTest {
private static class TestWebMessageListener implements WebViewCompat.WebMessageListener {
private BlockingQueue<Data> mQueue = new LinkedBlockingQueue<>();
- public static class Data {
- public WebMessageCompat mMessage;
- public Uri mSourceOrigin;
- public boolean mIsMainFrame;
- public JavaScriptReplyProxy mReplyProxy;
+ static class Data {
+ WebMessageCompat mMessage;
+ Uri mSourceOrigin;
+ boolean mIsMainFrame;
+ JavaScriptReplyProxy mReplyProxy;
Data(WebMessageCompat message, Uri sourceOrigin, boolean isMainFrame,
JavaScriptReplyProxy replyProxy) {
diff --git a/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewOnUiThread.java b/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewOnUiThread.java
index 215696a36d3..f28c63c4c82 100644
--- a/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewOnUiThread.java
+++ b/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewOnUiThread.java
@@ -16,6 +16,7 @@
package androidx.webkit;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -98,7 +99,7 @@ public class WebViewOnUiThread implements AutoCloseable{
*
* The caller is responsible for destroying the WebView instance.
*/
- public WebViewOnUiThread(final WebView webView) {
+ public WebViewOnUiThread(final @NonNull WebView webView) {
this(webView, false);
}
@@ -120,6 +121,7 @@ public class WebViewOnUiThread implements AutoCloseable{
volatile WebView mView;
}
+ @NonNull
public static WebView createWebView() {
final Holder h = new Holder();
final Context ctx = ApplicationProvider.getApplicationContext();
@@ -157,7 +159,7 @@ public class WebViewOnUiThread implements AutoCloseable{
*
* The task will be executed on the same thread that executes the cleanup.
*/
- public void setCleanupTask(Runnable cleanupTask) {
+ public void setCleanupTask(@Nullable Runnable cleanupTask) {
mCleanupTask = cleanupTask;
}
@@ -186,89 +188,97 @@ public class WebViewOnUiThread implements AutoCloseable{
this.notifyAll();
}
- public static void destroy(final WebView webView) {
+ public static void destroy(final @NonNull WebView webView) {
WebkitUtils.onMainThreadSync(webView::destroy);
}
- public void setWebViewClient(final WebViewClient webviewClient) {
+ public void setWebViewClient(final @NonNull WebViewClient webviewClient) {
setWebViewClient(mWebView, webviewClient);
}
public static void setWebViewClient(
- final WebView webView, final WebViewClient webviewClient) {
+ final @NonNull WebView webView, final @NonNull WebViewClient webviewClient) {
WebkitUtils.onMainThreadSync(() -> webView.setWebViewClient(webviewClient));
}
- public void setWebChromeClient(final WebChromeClient webChromeClient) {
+ public void setWebChromeClient(final @Nullable WebChromeClient webChromeClient) {
setWebChromeClient(mWebView, webChromeClient);
}
public static void setWebChromeClient(
- final WebView webView, final WebChromeClient webChromeClient) {
+ final @NonNull WebView webView, final @Nullable WebChromeClient webChromeClient) {
WebkitUtils.onMainThreadSync(() -> webView.setWebChromeClient(webChromeClient));
}
public void setWebViewRenderProcessClient(
- final WebViewRenderProcessClient webViewRenderProcessClient) {
+ final @NonNull WebViewRenderProcessClient webViewRenderProcessClient) {
setWebViewRenderProcessClient(mWebView, webViewRenderProcessClient);
}
public static void setWebViewRenderProcessClient(
- final WebView webView, final WebViewRenderProcessClient webViewRenderProcessClient) {
+ final @NonNull WebView webView,
+ final @NonNull WebViewRenderProcessClient webViewRenderProcessClient) {
WebkitUtils.onMainThreadSync(() -> WebViewCompat.setWebViewRenderProcessClient(
webView, webViewRenderProcessClient));
}
public void setWebViewRenderProcessClient(
- final Executor executor, final WebViewRenderProcessClient webViewRenderProcessClient) {
+ final @NonNull Executor executor,
+ final @NonNull WebViewRenderProcessClient webViewRenderProcessClient) {
setWebViewRenderProcessClient(mWebView, executor, webViewRenderProcessClient);
}
public static void setWebViewRenderProcessClient(
- final WebView webView,
- final Executor executor,
- final WebViewRenderProcessClient webViewRenderProcessClient) {
+ final @NonNull WebView webView,
+ final @NonNull Executor executor,
+ final @NonNull WebViewRenderProcessClient webViewRenderProcessClient) {
WebkitUtils.onMainThreadSync(() -> WebViewCompat.setWebViewRenderProcessClient(
webView, executor, webViewRenderProcessClient));
}
+ @Nullable
public WebViewRenderProcessClient getWebViewRenderProcessClient() {
return getWebViewRenderProcessClient(mWebView);
}
+ @Nullable
public static WebViewRenderProcessClient getWebViewRenderProcessClient(
- final WebView webView) {
+ final @NonNull WebView webView) {
return WebkitUtils.onMainThreadSync(
() -> WebViewCompat.getWebViewRenderProcessClient(webView));
}
+ @NonNull
public WebMessagePortCompat[] createWebMessageChannelCompat() {
return WebkitUtils.onMainThreadSync(() -> WebViewCompat.createWebMessageChannel(mWebView));
}
- public void postWebMessageCompat(final WebMessageCompat message, final Uri targetOrigin) {
+ public void postWebMessageCompat(final @NonNull WebMessageCompat message,
+ final @NonNull Uri targetOrigin) {
WebkitUtils.onMainThreadSync(
() -> WebViewCompat.postWebMessage(mWebView, message, targetOrigin));
}
- public void addWebMessageListener(String jsObjectName, Set<String> allowedOriginRules,
- final WebViewCompat.WebMessageListener listener) {
+ public void addWebMessageListener(@NonNull String jsObjectName,
+ @NonNull Set<String> allowedOriginRules,
+ final @NonNull WebViewCompat.WebMessageListener listener) {
WebkitUtils.onMainThreadSync(() -> WebViewCompat.addWebMessageListener(
mWebView, jsObjectName, allowedOriginRules, listener));
}
- public void removeWebMessageListener(final String jsObjectName) {
+ public void removeWebMessageListener(final @NonNull String jsObjectName) {
WebkitUtils.onMainThreadSync(
() -> WebViewCompat.removeWebMessageListener(mWebView, jsObjectName));
}
+ @NonNull
public ScriptHandler addDocumentStartJavaScript(
- String script, Set<String> allowedOriginRules) {
+ @NonNull String script, @NonNull Set<String> allowedOriginRules) {
return WebkitUtils.onMainThreadSync(() -> WebViewCompat.addDocumentStartJavaScript(
mWebView, script, allowedOriginRules));
}
- public void addJavascriptInterface(final Object object, final String name) {
+ public void addJavascriptInterface(final @NonNull Object object, final @NonNull String name) {
WebkitUtils.onMainThreadSync(() -> mWebView.addJavascriptInterface(object, name));
}
@@ -282,7 +292,7 @@ public class WebViewOnUiThread implements AutoCloseable{
callAndWait(() -> mWebView.loadUrl(url));
}
- public void loadUrl(final String url) {
+ public void loadUrl(final @NonNull String url) {
WebkitUtils.onMainThreadSync(() -> mWebView.loadUrl(url));
}
@@ -299,9 +309,10 @@ public class WebViewOnUiThread implements AutoCloseable{
callAndWait(() -> mWebView.loadData(data, mimeType, encoding));
}
- public void loadDataWithBaseURLAndWaitForCompletion(final String baseUrl,
- final String data, final String mimeType, final String encoding,
- final String historyUrl) {
+ public void loadDataWithBaseURLAndWaitForCompletion(final @Nullable String baseUrl,
+ final @NonNull String data, final @Nullable String mimeType,
+ final @Nullable String encoding,
+ final @Nullable String historyUrl) {
callAndWait(() -> mWebView.loadDataWithBaseURL(
baseUrl, data, mimeType, encoding, historyUrl));
}
@@ -324,20 +335,23 @@ public class WebViewOnUiThread implements AutoCloseable{
}
}
+ @Nullable
public String getTitle() {
return WebkitUtils.onMainThreadSync(() -> mWebView.getTitle());
}
+ @NonNull
public WebSettings getSettings() {
return WebkitUtils.onMainThreadSync(() -> mWebView.getSettings());
}
+ @Nullable
public String getUrl() {
return WebkitUtils.onMainThreadSync(() -> mWebView.getUrl());
}
public void postVisualStateCallbackCompat(final long requestId,
- final WebViewCompat.VisualStateCallback callback) {
+ final @NonNull WebViewCompat.VisualStateCallback callback) {
WebkitUtils.onMainThreadSync(() -> WebViewCompat.postVisualStateCallback(
mWebView, requestId, callback));
}
@@ -345,29 +359,35 @@ public class WebViewOnUiThread implements AutoCloseable{
/**
* Execute javascript synchronously, returning the result.
*/
- public String evaluateJavascriptSync(final String script) {
+ @Nullable
+ public String evaluateJavascriptSync(final @NonNull String script) {
final ResolvableFuture<String> future = ResolvableFuture.create();
evaluateJavascript(script, future::set);
return WebkitUtils.waitForFuture(future);
}
- public void evaluateJavascript(final String script, final ValueCallback<String> result) {
+ public void evaluateJavascript(final @NonNull String script,
+ final @Nullable ValueCallback<String> result) {
WebkitUtils.onMainThread(() -> mWebView.evaluateJavascript(script, result));
}
+ @NonNull
public WebViewClient getWebViewClient() {
return getWebViewClient(mWebView);
}
- public static WebViewClient getWebViewClient(final WebView webView) {
+ @NonNull
+ public static WebViewClient getWebViewClient(final @NonNull WebView webView) {
return WebkitUtils.onMainThreadSync(() -> WebViewCompat.getWebViewClient(webView));
}
+ @Nullable
public WebChromeClient getWebChromeClient() {
return getWebChromeClient(mWebView);
}
- public static WebChromeClient getWebChromeClient(final WebView webView) {
+ @Nullable
+ public static WebChromeClient getWebChromeClient(final @NonNull WebView webView) {
return WebkitUtils.onMainThreadSync(() -> WebViewCompat.getWebChromeClient(webView));
}
@@ -402,6 +422,7 @@ public class WebViewOnUiThread implements AutoCloseable{
* This synchronises so that the bitmap contents reflects the current DOM state, rather than
* potentially capturing a previously generated frame.
*/
+ @NonNull
public Bitmap captureBitmap() {
WebSettingsCompat.setOffscreenPreRaster(getSettings(), true);
waitForDOMReadyToRender();
@@ -435,10 +456,9 @@ public class WebViewOnUiThread implements AutoCloseable{
* @param call The call to make on the UI thread prior to waiting.
*/
private void callAndWait(Runnable call) {
- assertTrue("WebViewOnUiThread.load*AndWaitForCompletion calls "
- + "may not be mixed with load* calls directly on WebView "
- + "without calling waitForLoadCompletion after the load",
- !isLoaded());
+ assertFalse("WebViewOnUiThread.load*AndWaitForCompletion calls "
+ + "may not be mixed with load* calls directly on WebView "
+ + "without calling waitForLoadCompletion after the load", isLoaded());
clearLoad(); // clear any extraneous signals from a previous load.
if (Looper.myLooper() == Looper.getMainLooper()) {
call.run();
@@ -522,7 +542,7 @@ public class WebViewOnUiThread implements AutoCloseable{
* directly.
*/
public static class WaitForProgressClient extends WebChromeClient {
- private WebViewOnUiThread mOnUiThread;
+ private final WebViewOnUiThread mOnUiThread;
WaitForProgressClient(WebViewOnUiThread onUiThread) {
mOnUiThread = onUiThread;
@@ -544,7 +564,7 @@ public class WebViewOnUiThread implements AutoCloseable{
* WaitForLoadedClient or call WebViewOnUiThread.onPageFinished.
*/
public static class WaitForLoadedClient extends WebViewClientCompat {
- private WebViewOnUiThread mOnUiThread;
+ private final WebViewOnUiThread mOnUiThread;
WaitForLoadedClient(WebViewOnUiThread onUiThread) {
mOnUiThread = onUiThread;
diff --git a/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewTestActivity.java b/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewTestActivity.java
index 940153722ba..0cd87a3e0e0 100644
--- a/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewTestActivity.java
+++ b/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewTestActivity.java
@@ -21,15 +21,19 @@ import android.os.Bundle;
import android.view.ViewGroup;
import android.webkit.WebView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
public class WebViewTestActivity extends Activity {
private WebView mWebView;
+ @NonNull
public WebView getWebView() {
return mWebView;
}
@Override
- protected void onCreate(Bundle savedInstanceState) {
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWebView = new WebView(this);
diff --git a/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewWebMessageListenerTest.java b/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewWebMessageListenerTest.java
index 10a9bdfeaea..f53207166d6 100644
--- a/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewWebMessageListenerTest.java
+++ b/webkit/webkit/src/androidTest/java/androidx/webkit/WebViewWebMessageListenerTest.java
@@ -65,16 +65,16 @@ public class WebViewWebMessageListenerTest {
private static final Set<String> MATCH_EXAMPLE_COM = new HashSet<>(Arrays.asList(BASE_URI));
private WebViewOnUiThread mWebViewOnUiThread;
- private TestWebMessageListener mListener = new TestWebMessageListener();
+ private final TestWebMessageListener mListener = new TestWebMessageListener();
private static class TestWebMessageListener implements WebViewCompat.WebMessageListener {
- private BlockingQueue<Data> mQueue = new LinkedBlockingQueue<>();
+ private final BlockingQueue<Data> mQueue = new LinkedBlockingQueue<>();
- public static class Data {
- public WebMessageCompat mMessage;
- public Uri mSourceOrigin;
- public boolean mIsMainFrame;
- public JavaScriptReplyProxy mReplyProxy;
+ static class Data {
+ WebMessageCompat mMessage;
+ Uri mSourceOrigin;
+ boolean mIsMainFrame;
+ JavaScriptReplyProxy mReplyProxy;
Data(WebMessageCompat message, Uri sourceOrigin, boolean isMainFrame,
JavaScriptReplyProxy replyProxy) {
diff --git a/webkit/webkit/src/androidTest/java/androidx/webkit/WebkitUtils.java b/webkit/webkit/src/androidTest/java/androidx/webkit/WebkitUtils.java
index 75a8387fd4c..62bd52e8882 100644
--- a/webkit/webkit/src/androidTest/java/androidx/webkit/WebkitUtils.java
+++ b/webkit/webkit/src/androidTest/java/androidx/webkit/WebkitUtils.java
@@ -66,7 +66,8 @@ public final class WebkitUtils {
* @param callable the {@link Callable} to execute.
* @return a {@link ListenableFuture} representing the result of {@code callable}.
*/
- public static <T> ListenableFuture<T> onMainThread(final Callable<T> callable) {
+ @NonNull
+ public static <T> ListenableFuture<T> onMainThread(final @NonNull Callable<T> callable) {
return onMainThreadDelayed(0, callable);
}
@@ -75,7 +76,7 @@ public final class WebkitUtils {
*
* @param runnable the {@link Runnable} to execute.
*/
- public static void onMainThread(final Runnable runnable) {
+ public static void onMainThread(final @NonNull Runnable runnable) {
onMainThreadDelayed(0, runnable);
}
@@ -86,8 +87,9 @@ public final class WebkitUtils {
* @param callable the {@link Callable} to execute.
* @return a {@link ListenableFuture} representing the result of {@code callable}.
*/
+ @NonNull
public static <T> ListenableFuture<T> onMainThreadDelayed(
- long delayMs, final Callable<T> callable) {
+ long delayMs, final @NonNull Callable<T> callable) {
final ResolvableFuture<T> future = ResolvableFuture.create();
sMainHandler.postDelayed(() -> {
try {
@@ -105,7 +107,7 @@ public final class WebkitUtils {
* @param delayMs the delay in milliseconds
* @param runnable the {@link Runnable} to execute.
*/
- public static void onMainThreadDelayed(long delayMs, final Runnable runnable) {
+ public static void onMainThreadDelayed(long delayMs, final @NonNull Runnable runnable) {
sMainHandler.postDelayed(runnable, delayMs);
}
@@ -120,7 +122,7 @@ public final class WebkitUtils {
* @param callable the {@link Callable} to execute.
* @return the result of the {@link Callable}.
*/
- public static <T> T onMainThreadSync(final Callable<T> callable) {
+ public static <T> T onMainThreadSync(final @NonNull Callable<T> callable) {
if (Looper.myLooper() == Looper.getMainLooper()) {
throw new IllegalStateException("This cannot be called from the UI thread.");
}
@@ -135,9 +137,9 @@ public final class WebkitUtils {
*
* <p class="note"><b>Note:</b> this should not be called from the UI thread.
*
- * @param Runnable the {@link Runnable} to execute.
+ * @param runnable the {@link Runnable} to execute.
*/
- public static void onMainThreadSync(final Runnable runnable) {
+ public static void onMainThreadSync(final @NonNull Runnable runnable) {
if (Looper.myLooper() == Looper.getMainLooper()) {
throw new IllegalStateException("This cannot be called from the UI thread.");
}
@@ -172,7 +174,7 @@ public final class WebkitUtils {
* @param featureName the feature to be checked
*/
@RequiresApi(21)
- public static void checkFeature(String featureName) {
+ public static void checkFeature(@NonNull String featureName) {
final String msg = "This device does not have the feature '" + featureName + "'";
final boolean hasFeature = WebViewFeature.isFeatureSupported(featureName);
Assume.assumeTrue(msg, hasFeature);
@@ -187,7 +189,7 @@ public final class WebkitUtils {
* @param future the {@link Future} representing a value of interest.
* @return the value {@code future} represents.
*/
- public static <T> T waitForFuture(Future<T> future) {
+ public static <T> T waitForFuture(@NonNull Future<T> future) {
try {
return future.get(TEST_TIMEOUT_MS, TimeUnit.MILLISECONDS);
} catch (ExecutionException e) {
@@ -219,7 +221,7 @@ public final class WebkitUtils {
/**
* Takes an element out of the {@link BlockingQueue} (or times out).
*/
- public static <T> T waitForNextQueueElement(BlockingQueue<T> queue) {
+ public static <T> T waitForNextQueueElement(@NonNull BlockingQueue<T> queue) {
try {
T value = queue.poll(TEST_TIMEOUT_MS, TimeUnit.MILLISECONDS);
if (value == null) {
@@ -242,14 +244,11 @@ public final class WebkitUtils {
/**
* Write a string to a file, and create the whole parent directories if they don't exist.
*/
- public static void writeToFile(File file, String content)
+ public static void writeToFile(@NonNull File file, @NonNull String content)
throws IOException {
file.getParentFile().mkdirs();
- FileOutputStream fos = new FileOutputStream(file);
- try {
+ try (FileOutputStream fos = new FileOutputStream(file)) {
fos.write(content.getBytes("utf-8"));
- } finally {
- fos.close();
}
}
@@ -258,7 +257,7 @@ public final class WebkitUtils {
* @param currentFile The file or directory to delete. Does not need to exist.
* @return Whether currentFile does not exist afterwards.
*/
- public static boolean recursivelyDeleteFile(File currentFile) {
+ public static boolean recursivelyDeleteFile(@NonNull File currentFile) {
if (!currentFile.exists()) {
return true;
}
@@ -271,8 +270,7 @@ public final class WebkitUtils {
}
}
- boolean ret = currentFile.delete();
- return ret;
+ return currentFile.delete();
}
/**
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/VisualStateCallbackAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/VisualStateCallbackAdapter.java
index 4e95e228b1c..29529c5d1da 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/VisualStateCallbackAdapter.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/VisualStateCallbackAdapter.java
@@ -16,6 +16,7 @@
package androidx.webkit.internal;
+import androidx.annotation.NonNull;
import androidx.webkit.WebViewCompat;
import org.chromium.support_lib_boundary.VisualStateCallbackBoundaryInterface;
@@ -25,9 +26,10 @@ import org.chromium.support_lib_boundary.VisualStateCallbackBoundaryInterface;
* corresponding interface shared with the support library glue in the WebView APK).
*/
public class VisualStateCallbackAdapter implements VisualStateCallbackBoundaryInterface {
- private WebViewCompat.VisualStateCallback mVisualStateCallback;
+ private final WebViewCompat.VisualStateCallback mVisualStateCallback;
- public VisualStateCallbackAdapter(WebViewCompat.VisualStateCallback visualStateCallback) {
+ public VisualStateCallbackAdapter(
+ @NonNull WebViewCompat.VisualStateCallback visualStateCallback) {
mVisualStateCallback = visualStateCallback;
}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebMessageCallbackAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebMessageCallbackAdapter.java
index 9fe9b211eb4..f68ba94ac57 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebMessageCallbackAdapter.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebMessageCallbackAdapter.java
@@ -30,14 +30,14 @@ import java.lang.reflect.InvocationHandler;
* Adapter between {@link WebMessageCallbackCompat} and {@link WebMessageCallbackBoundaryInterface}.
*/
public class WebMessageCallbackAdapter implements WebMessageCallbackBoundaryInterface {
- WebMessageCallbackCompat mImpl;
+ private final WebMessageCallbackCompat mImpl;
public WebMessageCallbackAdapter(@NonNull WebMessageCallbackCompat impl) {
mImpl = impl;
}
@Override
- public void onMessage(InvocationHandler port, InvocationHandler message) {
+ public void onMessage(@NonNull InvocationHandler port, @NonNull InvocationHandler message) {
mImpl.onMessage(new WebMessagePortImpl(port),
WebMessageAdapter.webMessageCompatFromBoundaryInterface(
BoundaryInterfaceReflectionUtil.castToSuppLibClass(
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebResourceRequestAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebResourceRequestAdapter.java
index 0d6a05d3348..5fbd02e55e3 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebResourceRequestAdapter.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebResourceRequestAdapter.java
@@ -18,6 +18,8 @@ package androidx.webkit.internal;
import android.webkit.WebResourceRequest;
+import androidx.annotation.NonNull;
+
import org.chromium.support_lib_boundary.WebResourceRequestBoundaryInterface;
/**
@@ -27,7 +29,8 @@ import org.chromium.support_lib_boundary.WebResourceRequestBoundaryInterface;
public class WebResourceRequestAdapter {
private final WebResourceRequestBoundaryInterface mBoundaryInterface;
- public WebResourceRequestAdapter(WebResourceRequestBoundaryInterface boundaryInterface) {
+ public WebResourceRequestAdapter(
+ @NonNull WebResourceRequestBoundaryInterface boundaryInterface) {
mBoundaryInterface = boundaryInterface;
}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java
index 1b7e3343a00..963fb991a02 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebSettingsAdapter.java
@@ -16,6 +16,8 @@
package androidx.webkit.internal;
+import androidx.annotation.NonNull;
+
import org.chromium.support_lib_boundary.WebSettingsBoundaryInterface;
/**
@@ -24,9 +26,9 @@ import org.chromium.support_lib_boundary.WebSettingsBoundaryInterface;
* corresponding interface shared with the support library glue in the WebView APK).
*/
public class WebSettingsAdapter {
- private WebSettingsBoundaryInterface mBoundaryInterface;
+ private final WebSettingsBoundaryInterface mBoundaryInterface;
- public WebSettingsAdapter(WebSettingsBoundaryInterface boundaryInterface) {
+ public WebSettingsAdapter(@NonNull WebSettingsBoundaryInterface boundaryInterface) {
mBoundaryInterface = boundaryInterface;
}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactory.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactory.java
index 080233e8a59..9eb736b395f 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactory.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactory.java
@@ -16,6 +16,7 @@
package androidx.webkit.internal;
+import android.webkit.TracingController;
import android.webkit.WebView;
import androidx.annotation.NonNull;
@@ -39,23 +40,27 @@ public interface WebViewProviderFactory {
/**
* Create a support library version of {@link android.webkit.WebViewProvider}.
*/
- WebViewProviderBoundaryInterface createWebView(WebView webview);
+ @NonNull
+ WebViewProviderBoundaryInterface createWebView(@NonNull WebView webview);
/**
- * Create the boundary interface for {@link androidx.webkit.internal.WebkitToCompatConverter}
+ * Create the boundary interface for {@link WebkitToCompatConverter}
* which converts android.webkit classes into their corresponding support library classes.
*/
+ @NonNull
WebkitToCompatConverterBoundaryInterface getWebkitToCompatConverter();
/**
* Fetch the boundary interface representing
* {@link android.webkit.WebViewFactoryProvider#Statics}.
*/
+ @NonNull
StaticsBoundaryInterface getStatics();
/**
* Fetch the features supported by the current WebView APK.
*/
+ @NonNull
String[] getWebViewFeatures();
/**
@@ -65,12 +70,14 @@ public interface WebViewProviderFactory {
ServiceWorkerControllerBoundaryInterface getServiceWorkerController();
/**
- * Fetch the boundary interface representing {@link android.webkit.TracingController}.
+ * Fetch the boundary interface representing {@link TracingController}.
*/
+ @NonNull
TracingControllerBoundaryInterface getTracingController();
/**
* Fetch the boundary interface representing {@link android.webkit.ProxyController}.
*/
+ @NonNull
ProxyControllerBoundaryInterface getProxyController();
}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactoryAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactoryAdapter.java
index 7f0a6b21e10..b30a66b651a 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactoryAdapter.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderFactoryAdapter.java
@@ -35,9 +35,9 @@ import org.chromium.support_lib_boundary.util.BoundaryInterfaceReflectionUtil;
*/
@SuppressWarnings("JavadocReference") // WebViewFactoryProvider and WebViewProvider are hidden.
public class WebViewProviderFactoryAdapter implements WebViewProviderFactory {
- WebViewProviderFactoryBoundaryInterface mImpl;
+ final WebViewProviderFactoryBoundaryInterface mImpl;
- public WebViewProviderFactoryAdapter(WebViewProviderFactoryBoundaryInterface impl) {
+ public WebViewProviderFactoryAdapter(@NonNull WebViewProviderFactoryBoundaryInterface impl) {
mImpl = impl;
}
@@ -46,8 +46,9 @@ public class WebViewProviderFactoryAdapter implements WebViewProviderFactory {
* {@link android.webkit.WebViewProvider} - the class used to implement
* {@link androidx.webkit.WebViewCompat}.
*/
+ @NonNull
@Override
- public WebViewProviderBoundaryInterface createWebView(WebView webview) {
+ public WebViewProviderBoundaryInterface createWebView(@NonNull WebView webview) {
return BoundaryInterfaceReflectionUtil.castToSuppLibClass(
WebViewProviderBoundaryInterface.class, mImpl.createWebView(webview));
}
@@ -57,6 +58,7 @@ public class WebViewProviderFactoryAdapter implements WebViewProviderFactory {
* {@link androidx.webkit.internal.WebkitToCompatConverter}, which converts android.webkit
* classes into their corresponding support library classes.
*/
+ @NonNull
@Override
public WebkitToCompatConverterBoundaryInterface getWebkitToCompatConverter() {
return BoundaryInterfaceReflectionUtil.castToSuppLibClass(
@@ -67,6 +69,7 @@ public class WebViewProviderFactoryAdapter implements WebViewProviderFactory {
* Adapter method for fetching the support library class representing
* {@link android.webkit.WebViewFactoryProvider#Statics}.
*/
+ @NonNull
@Override
public StaticsBoundaryInterface getStatics() {
return BoundaryInterfaceReflectionUtil.castToSuppLibClass(
@@ -76,6 +79,7 @@ public class WebViewProviderFactoryAdapter implements WebViewProviderFactory {
/**
* Adapter method for fetching the features supported by the current WebView APK.
*/
+ @NonNull
@Override
public String[] getWebViewFeatures() {
return mImpl.getSupportedFeatures();
@@ -96,6 +100,7 @@ public class WebViewProviderFactoryAdapter implements WebViewProviderFactory {
* Adapter method for fetching the support library class representing
* {@link android.webkit.TracingController}.
*/
+ @NonNull
@Override
public TracingControllerBoundaryInterface getTracingController() {
return BoundaryInterfaceReflectionUtil.castToSuppLibClass(
@@ -106,6 +111,7 @@ public class WebViewProviderFactoryAdapter implements WebViewProviderFactory {
* Adapter method for fetching the support library class representing
* {@link android.webkit.ProxyController}.
*/
+ @NonNull
@Override
public ProxyControllerBoundaryInterface getProxyController() {
return BoundaryInterfaceReflectionUtil.castToSuppLibClass(
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebkitToCompatConverter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebkitToCompatConverter.java
index c7c51d2064f..ef80a917540 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebkitToCompatConverter.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebkitToCompatConverter.java
@@ -43,7 +43,7 @@ import java.lang.reflect.InvocationHandler;
public class WebkitToCompatConverter {
private final WebkitToCompatConverterBoundaryInterface mImpl;
- public WebkitToCompatConverter(WebkitToCompatConverterBoundaryInterface impl) {
+ public WebkitToCompatConverter(@NonNull WebkitToCompatConverterBoundaryInterface impl) {
mImpl = impl;
}
@@ -53,7 +53,7 @@ public class WebkitToCompatConverter {
* {@link androidx.webkit.WebSettingsCompat}.
*/
@NonNull
- public WebSettingsAdapter convertSettings(WebSettings webSettings) {
+ public WebSettingsAdapter convertSettings(@NonNull WebSettings webSettings) {
return new WebSettingsAdapter(BoundaryInterfaceReflectionUtil.castToSuppLibClass(
WebSettingsBoundaryInterface.class, mImpl.convertSettings(webSettings)));
}
@@ -63,7 +63,8 @@ public class WebkitToCompatConverter {
* that calls on either of those objects affect the other object.
*/
@NonNull
- public WebResourceRequestAdapter convertWebResourceRequest(WebResourceRequest request) {
+ public WebResourceRequestAdapter convertWebResourceRequest(
+ @NonNull WebResourceRequest request) {
return new WebResourceRequestAdapter(BoundaryInterfaceReflectionUtil.castToSuppLibClass(
WebResourceRequestBoundaryInterface.class,
mImpl.convertWebResourceRequest(request)));