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

Commit ce0870e

Browse files
[webview_flutter] Fix debuggingEnabled on Android (#4859)
1 parent 2b08dcb commit ce0870e

File tree

6 files changed

+72
-19
lines changed

6 files changed

+72
-19
lines changed

packages/webview_flutter/webview_flutter_android/CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
## NEXT
1+
## 2.8.3
22

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

56
## 2.8.2

packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,6 @@ class WebViewProxy {
708708
///
709709
/// See [android_webview.WebView].setWebContentsDebuggingEnabled.
710710
Future<void> setWebContentsDebuggingEnabled(bool enabled) {
711-
return android_webview.WebView.setWebContentsDebuggingEnabled(true);
711+
return android_webview.WebView.setWebContentsDebuggingEnabled(enabled);
712712
}
713713
}

packages/webview_flutter/webview_flutter_android/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: webview_flutter_android
22
description: A Flutter plugin that provides a WebView widget on Android.
33
repository: https://github.com/flutter/plugins/tree/main/packages/webview_flutter/webview_flutter_android
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
5-
version: 2.8.2
5+
version: 2.8.3
66

77
environment:
88
sdk: ">=2.14.0 <3.0.0"

packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ void main() {
3232
TestWidgetsFlutterBinding.ensureInitialized();
3333

3434
group('Android WebView', () {
35-
group('$WebView', () {
35+
group('WebView', () {
3636
late MockTestWebViewHostApi mockPlatformHostApi;
3737

3838
late InstanceManager instanceManager;
@@ -55,11 +55,16 @@ void main() {
5555
verify(mockPlatformHostApi.create(webViewInstanceId, false));
5656
});
5757

58-
test('setWebContentsDebuggingEnabled', () {
58+
test('setWebContentsDebuggingEnabled true', () {
5959
WebView.setWebContentsDebuggingEnabled(true);
6060
verify(mockPlatformHostApi.setWebContentsDebuggingEnabled(true));
6161
});
6262

63+
test('setWebContentsDebuggingEnabled false', () {
64+
WebView.setWebContentsDebuggingEnabled(false);
65+
verify(mockPlatformHostApi.setWebContentsDebuggingEnabled(false));
66+
});
67+
6368
test('loadData', () {
6469
webView.loadData(
6570
data: 'hello',
@@ -314,7 +319,7 @@ void main() {
314319
});
315320
});
316321

317-
group('$WebSettings', () {
322+
group('WebSettings', () {
318323
late MockTestWebSettingsHostApi mockPlatformHostApi;
319324

320325
late InstanceManager instanceManager;
@@ -440,7 +445,7 @@ void main() {
440445
});
441446
});
442447

443-
group('$JavaScriptChannel', () {
448+
group('JavaScriptChannel', () {
444449
late JavaScriptChannelFlutterApiImpl flutterApi;
445450

446451
late InstanceManager instanceManager;
@@ -468,7 +473,7 @@ void main() {
468473
});
469474
});
470475

471-
group('$WebViewClient', () {
476+
group('WebViewClient', () {
472477
late WebViewClientFlutterApiImpl flutterApi;
473478

474479
late InstanceManager instanceManager;
@@ -583,7 +588,7 @@ void main() {
583588
});
584589
});
585590

586-
group('$DownloadListener', () {
591+
group('DownloadListener', () {
587592
late DownloadListenerFlutterApiImpl flutterApi;
588593

589594
late InstanceManager instanceManager;
@@ -621,7 +626,7 @@ void main() {
621626
});
622627
});
623628

624-
group('$WebChromeClient', () {
629+
group('WebChromeClient', () {
625630
late WebChromeClientFlutterApiImpl flutterApi;
626631

627632
late InstanceManager instanceManager;

packages/webview_flutter/webview_flutter_android/test/instance_manager_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import 'package:flutter_test/flutter_test.dart';
66
import 'package:webview_flutter_android/src/instance_manager.dart';
77

88
void main() {
9-
group('$InstanceManager', () {
9+
group('InstanceManager', () {
1010
late InstanceManager testInstanceManager;
1111

1212
setUp(() {

packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart

Lines changed: 55 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,13 @@ import 'package:mockito/annotations.dart';
1111
import 'package:mockito/mockito.dart';
1212
import 'package:webview_flutter_android/src/android_webview.dart'
1313
as android_webview;
14+
import 'package:webview_flutter_android/src/android_webview_api_impls.dart';
15+
import 'package:webview_flutter_android/src/instance_manager.dart';
1416
import 'package:webview_flutter_android/webview_android_widget.dart';
1517
import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';
1618

19+
import 'android_webview.pigeon.dart';
20+
import 'android_webview_test.mocks.dart' show MockTestWebViewHostApi;
1721
import 'webview_android_widget_test.mocks.dart';
1822

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

34-
group('$WebViewAndroidWidget', () {
38+
group('WebViewAndroidWidget', () {
3539
late MockFlutterAssetManager mockFlutterAssetManager;
3640
late MockWebView mockWebView;
3741
late MockWebSettings mockWebSettings;
@@ -93,7 +97,7 @@ void main() {
9397
webChromeClient = testController.webChromeClient;
9498
}
9599

96-
testWidgets('$WebViewAndroidWidget', (WidgetTester tester) async {
100+
testWidgets('WebViewAndroidWidget', (WidgetTester tester) async {
97101
await buildWidget(tester);
98102

99103
verify(mockWebSettings.setDomStorageEnabled(true));
@@ -119,7 +123,7 @@ void main() {
119123
},
120124
);
121125

122-
group('$CreationParams', () {
126+
group('CreationParams', () {
123127
testWidgets('initialUrl', (WidgetTester tester) async {
124128
await buildWidget(
125129
tester,
@@ -201,7 +205,7 @@ void main() {
201205
expect(javaScriptChannels[1].channelName, 'b');
202206
});
203207

204-
group('$WebSettings', () {
208+
group('WebSettings', () {
205209
testWidgets('javascriptMode', (WidgetTester tester) async {
206210
await buildWidget(
207211
tester,
@@ -232,7 +236,7 @@ void main() {
232236
expect(testController.webViewClient.shouldOverrideUrlLoading, isTrue);
233237
});
234238

235-
testWidgets('debuggingEnabled', (WidgetTester tester) async {
239+
testWidgets('debuggingEnabled true', (WidgetTester tester) async {
236240
await buildWidget(
237241
tester,
238242
creationParams: CreationParams(
@@ -247,6 +251,21 @@ void main() {
247251
verify(mockWebViewProxy.setWebContentsDebuggingEnabled(true));
248252
});
249253

254+
testWidgets('debuggingEnabled false', (WidgetTester tester) async {
255+
await buildWidget(
256+
tester,
257+
creationParams: CreationParams(
258+
webSettings: WebSettings(
259+
userAgent: const WebSetting<String?>.absent(),
260+
debuggingEnabled: false,
261+
hasNavigationDelegate: false,
262+
),
263+
),
264+
);
265+
266+
verify(mockWebViewProxy.setWebContentsDebuggingEnabled(false));
267+
});
268+
250269
testWidgets('userAgent', (WidgetTester tester) async {
251270
await buildWidget(
252271
tester,
@@ -278,7 +297,7 @@ void main() {
278297
});
279298
});
280299

281-
group('$WebViewPlatformController', () {
300+
group('WebViewPlatformController', () {
282301
testWidgets('loadFile without "file://" prefix',
283302
(WidgetTester tester) async {
284303
await buildWidget(tester);
@@ -667,7 +686,7 @@ void main() {
667686
});
668687
});
669688

670-
group('$WebViewPlatformCallbacksHandler', () {
689+
group('WebViewPlatformCallbacksHandler', () {
671690
testWidgets('onPageStarted', (WidgetTester tester) async {
672691
await buildWidget(tester);
673692
webViewClient.onPageStarted(mockWebView, 'https://google.com');
@@ -773,7 +792,7 @@ void main() {
773792
verify(mockWebView.loadUrl('https://google.com', <String, String>{}));
774793
});
775794

776-
group('$JavascriptChannelRegistry', () {
795+
group('JavascriptChannelRegistry', () {
777796
testWidgets('onJavascriptChannelMessage', (WidgetTester tester) async {
778797
await buildWidget(tester);
779798

@@ -792,4 +811,32 @@ void main() {
792811
});
793812
});
794813
});
814+
815+
group('WebViewProxy', () {
816+
late MockTestWebViewHostApi mockPlatformHostApi;
817+
late InstanceManager instanceManager;
818+
819+
setUp(() {
820+
// WebViewProxy calls static methods that can't be mocked, so the mocks
821+
// have to be set up at the next layer down, by mocking the implementation
822+
// of WebView itstelf.
823+
mockPlatformHostApi = MockTestWebViewHostApi();
824+
TestWebViewHostApi.setup(mockPlatformHostApi);
825+
instanceManager = InstanceManager();
826+
android_webview.WebView.api =
827+
WebViewHostApiImpl(instanceManager: instanceManager);
828+
});
829+
830+
test('setWebContentsDebuggingEnabled true', () {
831+
const WebViewProxy webViewProxy = WebViewProxy();
832+
webViewProxy.setWebContentsDebuggingEnabled(true);
833+
verify(mockPlatformHostApi.setWebContentsDebuggingEnabled(true));
834+
});
835+
836+
test('setWebContentsDebuggingEnabled false', () {
837+
const WebViewProxy webViewProxy = WebViewProxy();
838+
webViewProxy.setWebContentsDebuggingEnabled(false);
839+
verify(mockPlatformHostApi.setWebContentsDebuggingEnabled(false));
840+
});
841+
});
795842
}

0 commit comments

Comments
 (0)