Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

[webview_flutter] Fix debuggingEnabled on Android #4859

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
## NEXT
## 2.8.3

* Fixes a bug causing `debuggingEnabled` to always be set to true.
* Fixes an integration test race condition.

## 2.8.2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -708,6 +708,6 @@ class WebViewProxy {
///
/// See [android_webview.WebView].setWebContentsDebuggingEnabled.
Future<void> setWebContentsDebuggingEnabled(bool enabled) {
return android_webview.WebView.setWebContentsDebuggingEnabled(true);
return android_webview.WebView.setWebContentsDebuggingEnabled(enabled);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: webview_flutter_android
description: A Flutter plugin that provides a WebView widget on Android.
repository: https://github.com/flutter/plugins/tree/main/packages/webview_flutter/webview_flutter_android
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
version: 2.8.2
version: 2.8.3

environment:
sdk: ">=2.14.0 <3.0.0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ void main() {
TestWidgetsFlutterBinding.ensureInitialized();

group('Android WebView', () {
group('$WebView', () {
group('WebView', () {
late MockTestWebViewHostApi mockPlatformHostApi;

late InstanceManager instanceManager;
Expand All @@ -55,11 +55,16 @@ void main() {
verify(mockPlatformHostApi.create(webViewInstanceId, false));
});

test('setWebContentsDebuggingEnabled', () {
test('setWebContentsDebuggingEnabled true', () {
WebView.setWebContentsDebuggingEnabled(true);
verify(mockPlatformHostApi.setWebContentsDebuggingEnabled(true));
});

test('setWebContentsDebuggingEnabled false', () {
WebView.setWebContentsDebuggingEnabled(false);
verify(mockPlatformHostApi.setWebContentsDebuggingEnabled(false));
});

test('loadData', () {
webView.loadData(
data: 'hello',
Expand Down Expand Up @@ -314,7 +319,7 @@ void main() {
});
});

group('$WebSettings', () {
group('WebSettings', () {
late MockTestWebSettingsHostApi mockPlatformHostApi;

late InstanceManager instanceManager;
Expand Down Expand Up @@ -440,7 +445,7 @@ void main() {
});
});

group('$JavaScriptChannel', () {
group('JavaScriptChannel', () {
late JavaScriptChannelFlutterApiImpl flutterApi;

late InstanceManager instanceManager;
Expand Down Expand Up @@ -468,7 +473,7 @@ void main() {
});
});

group('$WebViewClient', () {
group('WebViewClient', () {
late WebViewClientFlutterApiImpl flutterApi;

late InstanceManager instanceManager;
Expand Down Expand Up @@ -583,7 +588,7 @@ void main() {
});
});

group('$DownloadListener', () {
group('DownloadListener', () {
late DownloadListenerFlutterApiImpl flutterApi;

late InstanceManager instanceManager;
Expand Down Expand Up @@ -621,7 +626,7 @@ void main() {
});
});

group('$WebChromeClient', () {
group('WebChromeClient', () {
late WebChromeClientFlutterApiImpl flutterApi;

late InstanceManager instanceManager;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:webview_flutter_android/src/instance_manager.dart';

void main() {
group('$InstanceManager', () {
group('InstanceManager', () {
late InstanceManager testInstanceManager;

setUp(() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,13 @@ import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:webview_flutter_android/src/android_webview.dart'
as android_webview;
import 'package:webview_flutter_android/src/android_webview_api_impls.dart';
import 'package:webview_flutter_android/src/instance_manager.dart';
import 'package:webview_flutter_android/webview_android_widget.dart';
import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';

import 'android_webview.pigeon.dart';
import 'android_webview_test.mocks.dart' show MockTestWebViewHostApi;
import 'webview_android_widget_test.mocks.dart';

@GenerateMocks(<Type>[
Expand All @@ -31,7 +35,7 @@ import 'webview_android_widget_test.mocks.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();

group('$WebViewAndroidWidget', () {
group('WebViewAndroidWidget', () {
late MockFlutterAssetManager mockFlutterAssetManager;
late MockWebView mockWebView;
late MockWebSettings mockWebSettings;
Expand Down Expand Up @@ -93,7 +97,7 @@ void main() {
webChromeClient = testController.webChromeClient;
}

testWidgets('$WebViewAndroidWidget', (WidgetTester tester) async {
testWidgets('WebViewAndroidWidget', (WidgetTester tester) async {
await buildWidget(tester);

verify(mockWebSettings.setDomStorageEnabled(true));
Expand All @@ -119,7 +123,7 @@ void main() {
},
);

group('$CreationParams', () {
group('CreationParams', () {
testWidgets('initialUrl', (WidgetTester tester) async {
await buildWidget(
tester,
Expand Down Expand Up @@ -201,7 +205,7 @@ void main() {
expect(javaScriptChannels[1].channelName, 'b');
});

group('$WebSettings', () {
group('WebSettings', () {
testWidgets('javascriptMode', (WidgetTester tester) async {
await buildWidget(
tester,
Expand Down Expand Up @@ -232,7 +236,7 @@ void main() {
expect(testController.webViewClient.shouldOverrideUrlLoading, isTrue);
});

testWidgets('debuggingEnabled', (WidgetTester tester) async {
testWidgets('debuggingEnabled true', (WidgetTester tester) async {
await buildWidget(
tester,
creationParams: CreationParams(
Expand All @@ -247,6 +251,21 @@ void main() {
verify(mockWebViewProxy.setWebContentsDebuggingEnabled(true));
});

testWidgets('debuggingEnabled false', (WidgetTester tester) async {
await buildWidget(
tester,
creationParams: CreationParams(
webSettings: WebSettings(
userAgent: const WebSetting<String?>.absent(),
debuggingEnabled: false,
hasNavigationDelegate: false,
),
),
);

verify(mockWebViewProxy.setWebContentsDebuggingEnabled(false));
});

testWidgets('userAgent', (WidgetTester tester) async {
await buildWidget(
tester,
Expand Down Expand Up @@ -278,7 +297,7 @@ void main() {
});
});

group('$WebViewPlatformController', () {
group('WebViewPlatformController', () {
testWidgets('loadFile without "file://" prefix',
(WidgetTester tester) async {
await buildWidget(tester);
Expand Down Expand Up @@ -667,7 +686,7 @@ void main() {
});
});

group('$WebViewPlatformCallbacksHandler', () {
group('WebViewPlatformCallbacksHandler', () {
testWidgets('onPageStarted', (WidgetTester tester) async {
await buildWidget(tester);
webViewClient.onPageStarted(mockWebView, 'https://google.com');
Expand Down Expand Up @@ -773,7 +792,7 @@ void main() {
verify(mockWebView.loadUrl('https://google.com', <String, String>{}));
});

group('$JavascriptChannelRegistry', () {
group('JavascriptChannelRegistry', () {
testWidgets('onJavascriptChannelMessage', (WidgetTester tester) async {
await buildWidget(tester);

Expand All @@ -792,4 +811,32 @@ void main() {
});
});
});

group('WebViewProxy', () {
late MockTestWebViewHostApi mockPlatformHostApi;
late InstanceManager instanceManager;

setUp(() {
// WebViewProxy calls static methods that can't be mocked, so the mocks
// have to be set up at the next layer down, by mocking the implementation
// of WebView itstelf.
mockPlatformHostApi = MockTestWebViewHostApi();
TestWebViewHostApi.setup(mockPlatformHostApi);
instanceManager = InstanceManager();
android_webview.WebView.api =
WebViewHostApiImpl(instanceManager: instanceManager);
});

test('setWebContentsDebuggingEnabled true', () {
const WebViewProxy webViewProxy = WebViewProxy();
webViewProxy.setWebContentsDebuggingEnabled(true);
verify(mockPlatformHostApi.setWebContentsDebuggingEnabled(true));
});

test('setWebContentsDebuggingEnabled false', () {
const WebViewProxy webViewProxy = WebViewProxy();
webViewProxy.setWebContentsDebuggingEnabled(false);
verify(mockPlatformHostApi.setWebContentsDebuggingEnabled(false));
});
});
}