From 7ffecb42a1533b35f8d6a9011b1e136ac7a396ec Mon Sep 17 00:00:00 2001 From: Peter Menten Date: Thu, 21 Mar 2024 21:19:54 +0100 Subject: [PATCH] Don't send the request to the flutter api for subframes. Also improve tests and comments --- .../WebViewClientHostApiImpl.java | 28 +-- .../WebViewClientCompatImplTest.java | 208 +++++++++++++++++- .../webviewflutter/WebViewClientImplTest.java | 184 +++++++++++++++- .../webviewflutter/WebViewClientTest.java | 151 +------------ 4 files changed, 394 insertions(+), 177 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewClientHostApiImpl.java b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewClientHostApiImpl.java index 2d3dbd37f943..afccf41481d5 100644 --- a/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewClientHostApiImpl.java +++ b/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewClientHostApiImpl.java @@ -87,14 +87,14 @@ public void onReceivedError( @Override public boolean shouldOverrideUrlLoading( @NonNull WebView view, @NonNull WebResourceRequest request) { - flutterApi.requestLoading(this, view, request, reply -> {}); + if (!request.isForMainFrame()) { + // The client is only allowed to stop navigations that target the main frame because + // overridden URLs are passed to `loadUrl` and `loadUrl` cannot load a subframe. + return false; + } - // Since we cannot call loadUrl for a subframe, we currently only allow the delegate to stop - // navigations that target the main frame, if the request is not for the main frame - // we just return false to allow the navigation. - // - // For more details see: https://github.com/flutter/flutter/issues/25329#issuecomment-464863209 - return request.isForMainFrame() && returnValueForShouldOverrideUrlLoading; + flutterApi.requestLoading(this, view, request, reply -> {}); + return returnValueForShouldOverrideUrlLoading; } // Legacy codepath for < 24; newer versions use the variant above. @@ -192,14 +192,14 @@ public void onReceivedError( @Override public boolean shouldOverrideUrlLoading( @NonNull WebView view, @NonNull WebResourceRequest request) { - flutterApi.requestLoading(this, view, request, reply -> {}); + if (!request.isForMainFrame()) { + // The client is only allowed to stop navigations that target the main frame because + // overridden URLs are passed to `loadUrl` and `loadUrl` cannot load a subframe. + return false; + } - // Since we cannot call loadUrl for a subframe, we currently only allow the delegate to stop - // navigations that target the main frame, if the request is not for the main frame - // we just return false to allow the navigation. - // - // For more details see: https://github.com/flutter/flutter/issues/25329#issuecomment-464863209 - return request.isForMainFrame() && returnValueForShouldOverrideUrlLoading; + flutterApi.requestLoading(this, view, request, reply -> {}); + return returnValueForShouldOverrideUrlLoading; } // Legacy codepath for < Lollipop; newer versions use the variant above. diff --git a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientCompatImplTest.java b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientCompatImplTest.java index f4cfd0481876..d3849274fbba 100644 --- a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientCompatImplTest.java +++ b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientCompatImplTest.java @@ -4,18 +4,210 @@ package io.flutter.plugins.webviewflutter; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; + +import android.net.Uri; +import android.webkit.WebResourceRequest; +import android.webkit.WebResourceResponse; +import android.webkit.WebView; import android.webkit.WebViewClient; +import androidx.annotation.NonNull; +import io.flutter.plugins.webviewflutter.WebViewClientHostApiImpl.WebViewClientCompatImpl; +import io.flutter.plugins.webviewflutter.WebViewClientHostApiImpl.WebViewClientCreator; +import java.util.HashMap; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +public class WebViewClientCompatImplTest { + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public WebViewClientFlutterApiImpl mockFlutterApi; + + @Mock public WebView mockWebView; + + @Mock public WebViewClientCompatImpl mockWebViewClient; + + InstanceManager instanceManager; + WebViewClientHostApiImpl hostApiImpl; + WebViewClientCompatImpl webViewClient; + + @Before + public void setUp() { + instanceManager = InstanceManager.create(identifier -> {}); + + final WebViewClientCreator webViewClientCreator = + new WebViewClientCreator() { + @Override + @NonNull + public WebViewClient createWebViewClient( + @NonNull WebViewClientFlutterApiImpl flutterApi) { + webViewClient = new WebViewClientCompatImpl(flutterApi); + return webViewClient; + } + }; + + hostApiImpl = + new WebViewClientHostApiImpl(instanceManager, webViewClientCreator, mockFlutterApi); + hostApiImpl.create(1L); + } + + @After + public void tearDown() { + instanceManager.stopFinalizationListener(); + } + + @Test + public void onPageStarted() { + webViewClient.onPageStarted(mockWebView, "https://www.google.com", null); + verify(mockFlutterApi) + .onPageStarted(eq(webViewClient), eq(mockWebView), eq("https://www.google.com"), any()); + } + + @Test + public void onReceivedError() { + webViewClient.onReceivedError(mockWebView, 32, "description", "https://www.google.com"); + verify(mockFlutterApi) + .onReceivedError( + eq(webViewClient), + eq(mockWebView), + eq(32L), + eq("description"), + eq("https://www.google.com"), + any()); + } + + @Test + public void urlLoading() { + webViewClient.shouldOverrideUrlLoading(mockWebView, "https://www.google.com"); + verify(mockFlutterApi) + .urlLoading(eq(webViewClient), eq(mockWebView), eq("https://www.google.com"), any()); + } + + @Test + public void urlLoadingForMainFrame() { + webViewClient.setReturnValueForShouldOverrideUrlLoading(false); + + final WebResourceRequest mockRequest = mock(WebResourceRequest.class); + when(mockRequest.isForMainFrame()).thenReturn(true); + + assertFalse(webViewClient.shouldOverrideUrlLoading(mockWebView, mockRequest)); + verify(mockFlutterApi) + .requestLoading(eq(webViewClient), eq(mockWebView), eq(mockRequest), any()); + } -public class WebViewClientCompatImplTest extends WebViewClientTest { + @Test + public void urlLoadingForMainFrameWithOverride() { + webViewClient.setReturnValueForShouldOverrideUrlLoading(true); - @Override - WebViewClient createInstance(WebViewClientFlutterApiImpl flutterApi) { - return new WebViewClientHostApiImpl.WebViewClientCompatImpl(flutterApi); + final WebResourceRequest mockRequest = mock(WebResourceRequest.class); + when(mockRequest.isForMainFrame()).thenReturn(true); + + assertTrue(webViewClient.shouldOverrideUrlLoading(mockWebView, mockRequest)); + verify(mockFlutterApi) + .requestLoading(eq(webViewClient), eq(mockWebView), eq(mockRequest), any()); + } + + @Test + public void urlLoadingNotForMainFrame() { + webViewClient.setReturnValueForShouldOverrideUrlLoading(false); + + final WebResourceRequest mockRequest = mock(WebResourceRequest.class); + when(mockRequest.isForMainFrame()).thenReturn(false); + + assertFalse(webViewClient.shouldOverrideUrlLoading(mockWebView, mockRequest)); + verifyNoInteractions(mockFlutterApi); + } + + @Test + public void urlLoadingNotForMainFrameWithOverride() { + webViewClient.setReturnValueForShouldOverrideUrlLoading(true); + + final WebResourceRequest mockRequest = mock(WebResourceRequest.class); + when(mockRequest.isForMainFrame()).thenReturn(false); + + assertFalse(webViewClient.shouldOverrideUrlLoading(mockWebView, mockRequest)); + verifyNoInteractions(mockFlutterApi); + } + + @Test + public void convertWebResourceRequestWithNullHeaders() { + final Uri mockUri = mock(Uri.class); + when(mockUri.toString()).thenReturn(""); + + final WebResourceRequest mockRequest = mock(WebResourceRequest.class); + when(mockRequest.getMethod()).thenReturn("method"); + when(mockRequest.getUrl()).thenReturn(mockUri); + when(mockRequest.isForMainFrame()).thenReturn(true); + when(mockRequest.getRequestHeaders()).thenReturn(null); + + final GeneratedAndroidWebView.WebResourceRequestData data = + WebViewClientFlutterApiImpl.createWebResourceRequestData(mockRequest); + assertEquals(data.getRequestHeaders(), new HashMap()); + } + + @Test + public void setReturnValueForShouldOverrideUrlLoading() { + final WebViewClientHostApiImpl webViewClientHostApi = + new WebViewClientHostApiImpl( + instanceManager, + new WebViewClientCreator() { + @NonNull + @Override + public WebViewClient createWebViewClient( + @NonNull WebViewClientFlutterApiImpl flutterApi) { + return mockWebViewClient; + } + }, + mockFlutterApi); + + instanceManager.addDartCreatedInstance(mockWebViewClient, 2); + webViewClientHostApi.setSynchronousReturnValueForShouldOverrideUrlLoading(2L, false); + + verify(mockWebViewClient).setReturnValueForShouldOverrideUrlLoading(false); } - @Override - void setReturnValueForShouldOverrideUrlLoading(WebViewClient client, boolean value) { - ((WebViewClientHostApiImpl.WebViewClientCompatImpl) client) - .setReturnValueForShouldOverrideUrlLoading(value); + @Test + public void doUpdateVisitedHistory() { + webViewClient.doUpdateVisitedHistory(mockWebView, "https://www.google.com", true); + verify(mockFlutterApi) + .doUpdateVisitedHistory( + eq(webViewClient), eq(mockWebView), eq("https://www.google.com"), eq(true), any()); + } + + @Test + public void onReceivedHttpError() { + final Uri mockUri = mock(Uri.class); + when(mockUri.toString()).thenReturn(""); + + final WebResourceRequest mockRequest = mock(WebResourceRequest.class); + when(mockRequest.getMethod()).thenReturn("method"); + when(mockRequest.getUrl()).thenReturn(mockUri); + when(mockRequest.isForMainFrame()).thenReturn(true); + when(mockRequest.getRequestHeaders()).thenReturn(null); + + final WebResourceResponse mockResponse = mock(WebResourceResponse.class); + when(mockResponse.getStatusCode()).thenReturn(404); + + webViewClient.onReceivedHttpError(mockWebView, mockRequest, mockResponse); + verify(mockFlutterApi) + .onReceivedHttpError( + eq(webViewClient), + eq(mockWebView), + any(WebResourceRequest.class), + any(WebResourceResponse.class), + any()); } } diff --git a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientImplTest.java b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientImplTest.java index e099a686648e..492caf4874c7 100644 --- a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientImplTest.java +++ b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientImplTest.java @@ -4,18 +4,186 @@ package io.flutter.plugins.webviewflutter; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; + +import android.net.Uri; +import android.webkit.WebResourceRequest; +import android.webkit.WebResourceResponse; +import android.webkit.WebView; import android.webkit.WebViewClient; +import androidx.annotation.NonNull; +import io.flutter.plugins.webviewflutter.WebViewClientHostApiImpl.WebViewClientCreator; +import java.util.HashMap; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +public class WebViewClientImplTest { + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock public WebViewClientFlutterApiImpl mockFlutterApi; + + @Mock public WebView mockWebView; + + InstanceManager instanceManager; + WebViewClientHostApiImpl hostApiImpl; + WebViewClientHostApiImpl.WebViewClientImpl webViewClient; + + @Before + public void setUp() { + instanceManager = InstanceManager.create(identifier -> {}); + + final WebViewClientCreator webViewClientCreator = + new WebViewClientCreator() { + @Override + @NonNull + public WebViewClient createWebViewClient( + @NonNull WebViewClientFlutterApiImpl flutterApi) { + webViewClient = new WebViewClientHostApiImpl.WebViewClientImpl(flutterApi); + return webViewClient; + } + }; + + hostApiImpl = + new WebViewClientHostApiImpl(instanceManager, webViewClientCreator, mockFlutterApi); + hostApiImpl.create(1L); + } + + @After + public void tearDown() { + instanceManager.stopFinalizationListener(); + } + + @Test + public void onPageStarted() { + webViewClient.onPageStarted(mockWebView, "https://www.google.com", null); + verify(mockFlutterApi) + .onPageStarted(eq(webViewClient), eq(mockWebView), eq("https://www.google.com"), any()); + } + + @Test + public void onReceivedError() { + webViewClient.onReceivedError(mockWebView, 32, "description", "https://www.google.com"); + verify(mockFlutterApi) + .onReceivedError( + eq(webViewClient), + eq(mockWebView), + eq(32L), + eq("description"), + eq("https://www.google.com"), + any()); + } -public class WebViewClientImplTest extends WebViewClientTest { + @Test + public void urlLoading() { + webViewClient.shouldOverrideUrlLoading(mockWebView, "https://www.google.com"); + verify(mockFlutterApi) + .urlLoading(eq(webViewClient), eq(mockWebView), eq("https://www.google.com"), any()); + } + + @Test + public void urlLoadingForMainFrame() { + webViewClient.setReturnValueForShouldOverrideUrlLoading(false); + + final WebResourceRequest mockRequest = mock(WebResourceRequest.class); + when(mockRequest.isForMainFrame()).thenReturn(true); - @Override - WebViewClient createInstance(WebViewClientFlutterApiImpl flutterApi) { - return new WebViewClientHostApiImpl.WebViewClientImpl(flutterApi); + assertFalse(webViewClient.shouldOverrideUrlLoading(mockWebView, mockRequest)); + verify(mockFlutterApi) + .requestLoading(eq(webViewClient), eq(mockWebView), eq(mockRequest), any()); } - @Override - void setReturnValueForShouldOverrideUrlLoading(WebViewClient client, boolean value) { - ((WebViewClientHostApiImpl.WebViewClientImpl) client) - .setReturnValueForShouldOverrideUrlLoading(value); + @Test + public void urlLoadingForMainFrameWithOverride() { + webViewClient.setReturnValueForShouldOverrideUrlLoading(true); + + final WebResourceRequest mockRequest = mock(WebResourceRequest.class); + when(mockRequest.isForMainFrame()).thenReturn(true); + + assertTrue(webViewClient.shouldOverrideUrlLoading(mockWebView, mockRequest)); + verify(mockFlutterApi) + .requestLoading(eq(webViewClient), eq(mockWebView), eq(mockRequest), any()); + } + + @Test + public void urlLoadingNotForMainFrame() { + webViewClient.setReturnValueForShouldOverrideUrlLoading(false); + + final WebResourceRequest mockRequest = mock(WebResourceRequest.class); + when(mockRequest.isForMainFrame()).thenReturn(false); + + assertFalse(webViewClient.shouldOverrideUrlLoading(mockWebView, mockRequest)); + verifyNoInteractions(mockFlutterApi); + } + + @Test + public void urlLoadingNotForMainFrameWithOverride() { + webViewClient.setReturnValueForShouldOverrideUrlLoading(true); + + final WebResourceRequest mockRequest = mock(WebResourceRequest.class); + when(mockRequest.isForMainFrame()).thenReturn(false); + + assertFalse(webViewClient.shouldOverrideUrlLoading(mockWebView, mockRequest)); + verifyNoInteractions(mockFlutterApi); + } + + @Test + public void convertWebResourceRequestWithNullHeaders() { + final Uri mockUri = mock(Uri.class); + when(mockUri.toString()).thenReturn(""); + + final WebResourceRequest mockRequest = mock(WebResourceRequest.class); + when(mockRequest.getMethod()).thenReturn("method"); + when(mockRequest.getUrl()).thenReturn(mockUri); + when(mockRequest.isForMainFrame()).thenReturn(true); + when(mockRequest.getRequestHeaders()).thenReturn(null); + + final GeneratedAndroidWebView.WebResourceRequestData data = + WebViewClientFlutterApiImpl.createWebResourceRequestData(mockRequest); + assertEquals(data.getRequestHeaders(), new HashMap()); + } + + @Test + public void doUpdateVisitedHistory() { + webViewClient.doUpdateVisitedHistory(mockWebView, "https://www.google.com", true); + verify(mockFlutterApi) + .doUpdateVisitedHistory( + eq(webViewClient), eq(mockWebView), eq("https://www.google.com"), eq(true), any()); + } + + @Test + public void onReceivedHttpError() { + final Uri mockUri = mock(Uri.class); + when(mockUri.toString()).thenReturn(""); + + final WebResourceRequest mockRequest = mock(WebResourceRequest.class); + when(mockRequest.getMethod()).thenReturn("method"); + when(mockRequest.getUrl()).thenReturn(mockUri); + when(mockRequest.isForMainFrame()).thenReturn(true); + when(mockRequest.getRequestHeaders()).thenReturn(null); + + final WebResourceResponse mockResponse = mock(WebResourceResponse.class); + when(mockResponse.getStatusCode()).thenReturn(404); + + webViewClient.onReceivedHttpError(mockWebView, mockRequest, mockResponse); + verify(mockFlutterApi) + .onReceivedHttpError( + eq(webViewClient), + eq(mockWebView), + any(WebResourceRequest.class), + any(WebResourceResponse.class), + any()); } } diff --git a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientTest.java b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientTest.java index cf34c6b62c6a..658b623b2034 100644 --- a/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientTest.java +++ b/packages/webview_flutter/webview_flutter_android/android/src/test/java/io/flutter/plugins/webviewflutter/WebViewClientTest.java @@ -4,24 +4,13 @@ package io.flutter.plugins.webviewflutter; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import android.net.Uri; -import android.webkit.WebResourceRequest; -import android.webkit.WebResourceResponse; -import android.webkit.WebView; import android.webkit.WebViewClient; import androidx.annotation.NonNull; import io.flutter.plugins.webviewflutter.WebViewClientHostApiImpl.WebViewClientCompatImpl; import io.flutter.plugins.webviewflutter.WebViewClientHostApiImpl.WebViewClientCreator; -import java.util.HashMap; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -30,22 +19,14 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; -public abstract class WebViewClientTest { +public class WebViewClientTest { @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @Mock public WebViewClientFlutterApiImpl mockFlutterApi; - @Mock public WebView mockWebView; - - @Mock public WebViewClientCompatImpl mockWebViewClient; - InstanceManager instanceManager; WebViewClientHostApiImpl hostApiImpl; - WebViewClient webViewClient; - - abstract WebViewClient createInstance(WebViewClientFlutterApiImpl flutterApi); - - abstract void setReturnValueForShouldOverrideUrlLoading(WebViewClient client, boolean value); + WebViewClientCompatImpl webViewClient; @Before public void setUp() { @@ -57,7 +38,7 @@ public void setUp() { @NonNull public WebViewClient createWebViewClient( @NonNull WebViewClientFlutterApiImpl flutterApi) { - webViewClient = createInstance(flutterApi); + webViewClient = (WebViewClientCompatImpl) super.createWebViewClient(flutterApi); return webViewClient; } }; @@ -72,101 +53,9 @@ public void tearDown() { instanceManager.stopFinalizationListener(); } - @Test - public void onPageStarted() { - webViewClient.onPageStarted(mockWebView, "https://www.google.com", null); - verify(mockFlutterApi) - .onPageStarted(eq(webViewClient), eq(mockWebView), eq("https://www.google.com"), any()); - } - - @Test - @SuppressWarnings("deprecation") - public void onReceivedError() { - webViewClient.onReceivedError(mockWebView, 32, "description", "https://www.google.com"); - verify(mockFlutterApi) - .onReceivedError( - eq(webViewClient), - eq(mockWebView), - eq(32L), - eq("description"), - eq("https://www.google.com"), - any()); - } - - @Test - @SuppressWarnings("deprecation") - public void urlLoading() { - webViewClient.shouldOverrideUrlLoading(mockWebView, "https://www.google.com"); - verify(mockFlutterApi) - .urlLoading(eq(webViewClient), eq(mockWebView), eq("https://www.google.com"), any()); - } - - @Test - public void urlLoadingForMainFrame() { - setReturnValueForShouldOverrideUrlLoading(webViewClient, false); - - final WebResourceRequest mockRequest = mock(WebResourceRequest.class); - when(mockRequest.isForMainFrame()).thenReturn(true); - - assertFalse(webViewClient.shouldOverrideUrlLoading(mockWebView, mockRequest)); - verify(mockFlutterApi) - .requestLoading(eq(webViewClient), eq(mockWebView), eq(mockRequest), any()); - } - - @Test - public void urlLoadingForMainFrameWithOverride() { - setReturnValueForShouldOverrideUrlLoading(webViewClient, true); - - final WebResourceRequest mockRequest = mock(WebResourceRequest.class); - when(mockRequest.isForMainFrame()).thenReturn(true); - - assertTrue(webViewClient.shouldOverrideUrlLoading(mockWebView, mockRequest)); - verify(mockFlutterApi) - .requestLoading(eq(webViewClient), eq(mockWebView), eq(mockRequest), any()); - } - - @Test - public void urlLoadingNotForMainFrame() { - setReturnValueForShouldOverrideUrlLoading(webViewClient, false); - - final WebResourceRequest mockRequest = mock(WebResourceRequest.class); - when(mockRequest.isForMainFrame()).thenReturn(false); - - assertFalse(webViewClient.shouldOverrideUrlLoading(mockWebView, mockRequest)); - verify(mockFlutterApi) - .requestLoading(eq(webViewClient), eq(mockWebView), eq(mockRequest), any()); - } - - @Test - public void urlLoadingNotForMainFrameWithOverride() { - setReturnValueForShouldOverrideUrlLoading(webViewClient, true); - - final WebResourceRequest mockRequest = mock(WebResourceRequest.class); - when(mockRequest.isForMainFrame()).thenReturn(false); - - assertFalse(webViewClient.shouldOverrideUrlLoading(mockWebView, mockRequest)); - verify(mockFlutterApi) - .requestLoading(eq(webViewClient), eq(mockWebView), eq(mockRequest), any()); - } - - @Test - public void convertWebResourceRequestWithNullHeaders() { - final Uri mockUri = mock(Uri.class); - when(mockUri.toString()).thenReturn(""); - - final WebResourceRequest mockRequest = mock(WebResourceRequest.class); - when(mockRequest.getMethod()).thenReturn("method"); - when(mockRequest.getUrl()).thenReturn(mockUri); - when(mockRequest.isForMainFrame()).thenReturn(true); - when(mockRequest.getRequestHeaders()).thenReturn(null); - - final GeneratedAndroidWebView.WebResourceRequestData data = - WebViewClientFlutterApiImpl.createWebResourceRequestData(mockRequest); - assertEquals(data.getRequestHeaders(), new HashMap()); - } - @Test public void setReturnValueForShouldOverrideUrlLoading() { + final WebViewClientCompatImpl mockWebViewClient = mock(); final WebViewClientHostApiImpl webViewClientHostApi = new WebViewClientHostApiImpl( instanceManager, @@ -185,36 +74,4 @@ public WebViewClient createWebViewClient( verify(mockWebViewClient).setReturnValueForShouldOverrideUrlLoading(false); } - - @Test - public void doUpdateVisitedHistory() { - webViewClient.doUpdateVisitedHistory(mockWebView, "https://www.google.com", true); - verify(mockFlutterApi) - .doUpdateVisitedHistory( - eq(webViewClient), eq(mockWebView), eq("https://www.google.com"), eq(true), any()); - } - - @Test - public void onReceivedHttpError() { - final Uri mockUri = mock(Uri.class); - when(mockUri.toString()).thenReturn(""); - - final WebResourceRequest mockRequest = mock(WebResourceRequest.class); - when(mockRequest.getMethod()).thenReturn("method"); - when(mockRequest.getUrl()).thenReturn(mockUri); - when(mockRequest.isForMainFrame()).thenReturn(true); - when(mockRequest.getRequestHeaders()).thenReturn(null); - - final WebResourceResponse mockResponse = mock(WebResourceResponse.class); - when(mockResponse.getStatusCode()).thenReturn(404); - - webViewClient.onReceivedHttpError(mockWebView, mockRequest, mockResponse); - verify(mockFlutterApi) - .onReceivedHttpError( - eq(webViewClient), - eq(mockWebView), - any(WebResourceRequest.class), - any(WebResourceResponse.class), - any()); - } }