From 6e07e7d52a453beb5317f14d7e6d77a6c638d462 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Tue, 15 Aug 2023 08:49:44 +0200 Subject: [PATCH 1/4] Adds option to override console log --- .../CHANGELOG.md | 5 ++++ .../lib/src/platform_webview_controller.dart | 9 +++++++ .../src/types/javascript_console_message.dart | 23 ++++++++++++++++++ .../lib/src/types/javascript_log_level.dart | 24 +++++++++++++++++++ .../lib/src/types/types.dart | 2 ++ .../pubspec.yaml | 2 +- .../platform_webview_controller_test.dart | 14 +++++++++++ ...latform_webview_controller_test.mocks.dart | 4 +++- .../test/webview_platform_test.mocks.dart | 4 +++- 9 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_console_message.dart create mode 100644 packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_log_level.dart diff --git a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md index 30c3ab2a8d66..c6142d5a5461 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md @@ -1,3 +1,8 @@ +## 2.5.0 + +* Adds support to register a callback to intercept messages that are written to + the JavaScript console. See `PlatformWebViewController.setConsoleLogCallback`. + ## 2.4.0 * Adds support to retrieve the url from a web resource loading error. See `WebResourceError.url`. diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart index c7ec71e5dcc2..402b849af789 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart @@ -270,6 +270,15 @@ abstract class PlatformWebViewController extends PlatformInterface { 'setOnPermissionRequest is not implemented on the current platform', ); } + + /// Sets a callback that notifies the host application of any console messages + /// written to the JavaScript console. + Future setOnConsoleMessage( + void Function(JavaScriptConsoleMessage consoleMessage) onConsoleMessage) { + throw UnimplementedError( + 'setConsoleLogCallback is not implemented on the current platform', + ); + } } /// Describes the parameters necessary for registering a JavaScript channel. diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_console_message.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_console_message.dart new file mode 100644 index 000000000000..3509e685f4f6 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_console_message.dart @@ -0,0 +1,23 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:meta/meta.dart'; + +import 'javascript_log_level.dart'; + +/// Represents a console message written to the JavaScript console. +@immutable +class JavaScriptConsoleMessage { + /// Creates a [JavaScriptConsoleMessage]. + const JavaScriptConsoleMessage({ + required this.level, + required this.message, + }); + + /// The severity of a JavaScript log message. + final JavaScriptLogLevel level; + + /// The message written to the console. + final String message; +} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_log_level.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_log_level.dart new file mode 100644 index 000000000000..b7319c9082f0 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/javascript_log_level.dart @@ -0,0 +1,24 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// Represents the severity of a JavaScript log message. +enum JavaScriptLogLevel { + /// Indicates an error message was logged via an "error" event of the + /// `console.error` method. + error, + + /// Indicates a warning message was logged using the `console.warning` + /// method. + warning, + + /// Indicates a debug message was logged using the `console.debug` method. + debug, + + /// Indicates an informational message was logged using the `console.info` + /// method. + info, + + /// Indicates a log message was logged using the `console.log` method. + log, +} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/types.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/types.dart index e980aece3afa..c6cbe6967a6c 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/types.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/types.dart @@ -3,6 +3,8 @@ // found in the LICENSE file. export 'http_response_error.dart'; +export 'javascript_console_message.dart'; +export 'javascript_log_level.dart'; export 'javascript_message.dart'; export 'javascript_mode.dart'; export 'load_request_params.dart'; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml index eca7b4927be3..9d01da1fb318 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/packages/tree/main/packages/webview_flutt issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview_flutter%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.4.0 +version: 2.5.0 environment: sdk: ">=2.18.0 <4.0.0" diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart index 2d808dceb69d..3e5d321c3d62 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart @@ -387,6 +387,20 @@ void main() { throwsUnimplementedError, ); }); + + test( + 'Default implementation of setConsoleLogCallback should throw unimplemented error', + () { + final PlatformWebViewController controller = + ExtendsPlatformWebViewController( + const PlatformWebViewControllerCreationParams()); + + expect( + () => + controller.setOnConsoleMessage((JavaScriptConsoleMessage message) {}), + throwsUnimplementedError, + ); + }); } class MockWebViewPlatformWithMixin extends MockWebViewPlatform diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.mocks.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.mocks.dart index 1268858978c8..3ab612ee8c51 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.mocks.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.mocks.dart @@ -1,7 +1,9 @@ -// Mocks generated by Mockito 5.4.0 from annotations +// Mocks generated by Mockito 5.4.1 from annotations // in webview_flutter_platform_interface/test/platform_webview_controller_test.dart. // Do not manually edit this file. +// @dart=2.19 + // ignore_for_file: no_leading_underscores_for_library_prefixes import 'dart:async' as _i4; diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.mocks.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.mocks.dart index e9ff0bd9f282..7b6d661a4c29 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.mocks.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/webview_platform_test.mocks.dart @@ -1,7 +1,9 @@ -// Mocks generated by Mockito 5.4.0 from annotations +// Mocks generated by Mockito 5.4.1 from annotations // in webview_flutter_platform_interface/test/webview_platform_test.dart. // Do not manually edit this file. +// @dart=2.19 + // ignore_for_file: no_leading_underscores_for_library_prefixes import 'package:mockito/mockito.dart' as _i1; import 'package:webview_flutter_platform_interface/src/platform_navigation_delegate.dart' From e13952c4615d8be7711247bb64513007aae9557e Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 7 Sep 2023 11:05:26 -0400 Subject: [PATCH 2/4] Update packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart --- .../lib/src/platform_webview_controller.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart index 402b849af789..9ee629563638 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/platform_webview_controller.dart @@ -276,7 +276,7 @@ abstract class PlatformWebViewController extends PlatformInterface { Future setOnConsoleMessage( void Function(JavaScriptConsoleMessage consoleMessage) onConsoleMessage) { throw UnimplementedError( - 'setConsoleLogCallback is not implemented on the current platform', + 'setOnConsoleMessage is not implemented on the current platform', ); } } From 028b7b0bfa5818c5858d443a5d683d5b9d96242f Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 7 Sep 2023 11:05:37 -0400 Subject: [PATCH 3/4] Update packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart --- .../test/platform_webview_controller_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart index 3e5d321c3d62..85027afe4817 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/test/platform_webview_controller_test.dart @@ -389,7 +389,7 @@ void main() { }); test( - 'Default implementation of setConsoleLogCallback should throw unimplemented error', + 'Default implementation of setOnConsoleMessage should throw unimplemented error', () { final PlatformWebViewController controller = ExtendsPlatformWebViewController( From 15c502f41b8c2f752e5db1758aceeb1aa494d469 Mon Sep 17 00:00:00 2001 From: Maurits van Beusekom Date: Thu, 7 Sep 2023 17:07:05 +0200 Subject: [PATCH 4/4] Update packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md Co-authored-by: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> --- .../webview_flutter_platform_interface/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md index c6142d5a5461..38c25735a537 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md @@ -1,7 +1,7 @@ ## 2.5.0 * Adds support to register a callback to intercept messages that are written to - the JavaScript console. See `PlatformWebViewController.setConsoleLogCallback`. + the JavaScript console. See `PlatformWebViewController.setOnConsoleMessage`. ## 2.4.0