[webview_flutter] Fix debuggingEnabled on Android (#4859)

diff --git a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
index 145bc8f..26fb5ab 100644
--- a/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
+++ b/packages/webview_flutter/webview_flutter_android/CHANGELOG.md
@@ -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
diff --git a/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart b/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart
index bf85ac9..7200aaa 100644
--- a/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart
+++ b/packages/webview_flutter/webview_flutter_android/lib/webview_android_widget.dart
@@ -708,6 +708,6 @@
   ///
   /// See [android_webview.WebView].setWebContentsDebuggingEnabled.
   Future<void> setWebContentsDebuggingEnabled(bool enabled) {
-    return android_webview.WebView.setWebContentsDebuggingEnabled(true);
+    return android_webview.WebView.setWebContentsDebuggingEnabled(enabled);
   }
 }
diff --git a/packages/webview_flutter/webview_flutter_android/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
index b2329d3..704dc67 100644
--- a/packages/webview_flutter/webview_flutter_android/pubspec.yaml
+++ b/packages/webview_flutter/webview_flutter_android/pubspec.yaml
@@ -2,7 +2,7 @@
 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"
diff --git a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart
index 8688a19..91385ff 100644
--- a/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/android_webview_test.dart
@@ -32,7 +32,7 @@
   TestWidgetsFlutterBinding.ensureInitialized();
 
   group('Android WebView', () {
-    group('$WebView', () {
+    group('WebView', () {
       late MockTestWebViewHostApi mockPlatformHostApi;
 
       late InstanceManager instanceManager;
@@ -55,11 +55,16 @@
         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',
@@ -314,7 +319,7 @@
       });
     });
 
-    group('$WebSettings', () {
+    group('WebSettings', () {
       late MockTestWebSettingsHostApi mockPlatformHostApi;
 
       late InstanceManager instanceManager;
@@ -440,7 +445,7 @@
       });
     });
 
-    group('$JavaScriptChannel', () {
+    group('JavaScriptChannel', () {
       late JavaScriptChannelFlutterApiImpl flutterApi;
 
       late InstanceManager instanceManager;
@@ -468,7 +473,7 @@
       });
     });
 
-    group('$WebViewClient', () {
+    group('WebViewClient', () {
       late WebViewClientFlutterApiImpl flutterApi;
 
       late InstanceManager instanceManager;
@@ -583,7 +588,7 @@
       });
     });
 
-    group('$DownloadListener', () {
+    group('DownloadListener', () {
       late DownloadListenerFlutterApiImpl flutterApi;
 
       late InstanceManager instanceManager;
@@ -621,7 +626,7 @@
       });
     });
 
-    group('$WebChromeClient', () {
+    group('WebChromeClient', () {
       late WebChromeClientFlutterApiImpl flutterApi;
 
       late InstanceManager instanceManager;
diff --git a/packages/webview_flutter/webview_flutter_android/test/instance_manager_test.dart b/packages/webview_flutter/webview_flutter_android/test/instance_manager_test.dart
index fd020fc..3aeb005 100644
--- a/packages/webview_flutter/webview_flutter_android/test/instance_manager_test.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/instance_manager_test.dart
@@ -6,7 +6,7 @@
 import 'package:webview_flutter_android/src/instance_manager.dart';
 
 void main() {
-  group('$InstanceManager', () {
+  group('InstanceManager', () {
     late InstanceManager testInstanceManager;
 
     setUp(() {
diff --git a/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart b/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart
index fed1c11..af10939 100644
--- a/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart
+++ b/packages/webview_flutter/webview_flutter_android/test/webview_android_widget_test.dart
@@ -11,9 +11,13 @@
 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>[
@@ -31,7 +35,7 @@
 void main() {
   TestWidgetsFlutterBinding.ensureInitialized();
 
-  group('$WebViewAndroidWidget', () {
+  group('WebViewAndroidWidget', () {
     late MockFlutterAssetManager mockFlutterAssetManager;
     late MockWebView mockWebView;
     late MockWebSettings mockWebSettings;
@@ -93,7 +97,7 @@
       webChromeClient = testController.webChromeClient;
     }
 
-    testWidgets('$WebViewAndroidWidget', (WidgetTester tester) async {
+    testWidgets('WebViewAndroidWidget', (WidgetTester tester) async {
       await buildWidget(tester);
 
       verify(mockWebSettings.setDomStorageEnabled(true));
@@ -119,7 +123,7 @@
       },
     );
 
-    group('$CreationParams', () {
+    group('CreationParams', () {
       testWidgets('initialUrl', (WidgetTester tester) async {
         await buildWidget(
           tester,
@@ -201,7 +205,7 @@
         expect(javaScriptChannels[1].channelName, 'b');
       });
 
-      group('$WebSettings', () {
+      group('WebSettings', () {
         testWidgets('javascriptMode', (WidgetTester tester) async {
           await buildWidget(
             tester,
@@ -232,7 +236,7 @@
           expect(testController.webViewClient.shouldOverrideUrlLoading, isTrue);
         });
 
-        testWidgets('debuggingEnabled', (WidgetTester tester) async {
+        testWidgets('debuggingEnabled true', (WidgetTester tester) async {
           await buildWidget(
             tester,
             creationParams: CreationParams(
@@ -247,6 +251,21 @@
           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,
@@ -278,7 +297,7 @@
       });
     });
 
-    group('$WebViewPlatformController', () {
+    group('WebViewPlatformController', () {
       testWidgets('loadFile without "file://" prefix',
           (WidgetTester tester) async {
         await buildWidget(tester);
@@ -667,7 +686,7 @@
       });
     });
 
-    group('$WebViewPlatformCallbacksHandler', () {
+    group('WebViewPlatformCallbacksHandler', () {
       testWidgets('onPageStarted', (WidgetTester tester) async {
         await buildWidget(tester);
         webViewClient.onPageStarted(mockWebView, 'https://google.com');
@@ -773,7 +792,7 @@
         verify(mockWebView.loadUrl('https://google.com', <String, String>{}));
       });
 
-      group('$JavascriptChannelRegistry', () {
+      group('JavascriptChannelRegistry', () {
         testWidgets('onJavascriptChannelMessage', (WidgetTester tester) async {
           await buildWidget(tester);
 
@@ -792,4 +811,32 @@
       });
     });
   });
+
+  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));
+    });
+  });
 }