From 477408dd3b6705942c296c489df47f07fd63eb71 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 21 Aug 2022 15:02:38 -0700 Subject: [PATCH 1/5] cookie manager impl --- .../src/v4/src/webview_cookie_manager.dart | 39 +++++++++++++++++++ .../lib/src/v4/webview_flutter.dart | 10 +++++ 2 files changed, 49 insertions(+) create mode 100644 packages/webview_flutter/webview_flutter/lib/src/v4/src/webview_cookie_manager.dart create mode 100644 packages/webview_flutter/webview_flutter/lib/src/v4/webview_flutter.dart diff --git a/packages/webview_flutter/webview_flutter/lib/src/v4/src/webview_cookie_manager.dart b/packages/webview_flutter/webview_flutter/lib/src/v4/src/webview_cookie_manager.dart new file mode 100644 index 000000000000..2247d5a7fd8f --- /dev/null +++ b/packages/webview_flutter/webview_flutter/lib/src/v4/src/webview_cookie_manager.dart @@ -0,0 +1,39 @@ +// 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:webview_flutter_platform_interface/v4/webview_flutter_platform_interface.dart'; + +/// Manages cookies pertaining to all WebViews. +class WebViewCookieManager { + /// Constructs a [WebViewCookieManager]. + WebViewCookieManager() + : this.withPlatform( + platform: PlatformWebViewCookieManager( + const PlatformWebViewCookieManagerCreationParams(), + ), + ); + + /// Constructs a [WebViewCookieManager] with creation params for a specific + /// platform. + WebViewCookieManager.withPlatformCreationParams( + PlatformWebViewCookieManagerCreationParams params, + ) : this.withPlatform(platform: PlatformWebViewCookieManager(params)); + + /// Constructs a [WebViewCookieManager] with a specific platform + /// implementation. + WebViewCookieManager.withPlatform({required this.platform}); + + /// Implementation of [PlatformWebViewCookieManager] for the current platform. + final PlatformWebViewCookieManager platform; + + /// Clears all cookies for all WebViews. + /// + /// Returns true if cookies were present before clearing, else false. + Future clearCookies() => platform.clearCookies(); + + /// Sets a cookie for all WebView instances. + /// + /// This is a no op on iOS versions below 11. + Future setCookie(WebViewCookie cookie) => platform.setCookie(cookie); +} diff --git a/packages/webview_flutter/webview_flutter/lib/src/v4/webview_flutter.dart b/packages/webview_flutter/webview_flutter/lib/src/v4/webview_flutter.dart new file mode 100644 index 000000000000..891b537ad0fd --- /dev/null +++ b/packages/webview_flutter/webview_flutter/lib/src/v4/webview_flutter.dart @@ -0,0 +1,10 @@ +// 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. + +library webview_flutter; + +export 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart' + show WebViewCookie; + +export 'src/webview_cookie_manager.dart'; From e2cd4c0a47a35b7f24c70e22e7d438b0118cfa14 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 21 Aug 2022 15:15:04 -0700 Subject: [PATCH 2/5] tests --- .../test/v4/webview_cookie_manager_test.dart | 54 ++++++++++++++++++ .../v4/webview_cookie_manager_test.mocks.dart | 56 +++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 packages/webview_flutter/webview_flutter/test/v4/webview_cookie_manager_test.dart create mode 100644 packages/webview_flutter/webview_flutter/test/v4/webview_cookie_manager_test.mocks.dart diff --git a/packages/webview_flutter/webview_flutter/test/v4/webview_cookie_manager_test.dart b/packages/webview_flutter/webview_flutter/test/v4/webview_cookie_manager_test.dart new file mode 100644 index 000000000000..2d85d0978234 --- /dev/null +++ b/packages/webview_flutter/webview_flutter/test/v4/webview_cookie_manager_test.dart @@ -0,0 +1,54 @@ +// 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:flutter_test/flutter_test.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:webview_flutter/src/v4/src/webview_cookie_manager.dart'; +import 'package:webview_flutter_platform_interface/v4/webview_flutter_platform_interface.dart'; + +import 'webview_cookie_manager_test.mocks.dart'; + +@GenerateMocks([PlatformWebViewCookieManager]) +void main() { + group('WebViewCookieManager', () { + test('clearCookies', () async { + final MockPlatformWebViewCookieManager mockPlatformWebViewCookieManager = + MockPlatformWebViewCookieManager(); + when(mockPlatformWebViewCookieManager.clearCookies()).thenAnswer( + (_) => Future.value(false), + ); + + final WebViewCookieManager cookieManager = + WebViewCookieManager.withPlatform( + platform: mockPlatformWebViewCookieManager, + ); + + await expectLater(cookieManager.clearCookies(), completion(false)); + }); + + test('setCookie', () async { + final MockPlatformWebViewCookieManager mockPlatformWebViewCookieManager = + MockPlatformWebViewCookieManager(); + + final WebViewCookieManager cookieManager = + WebViewCookieManager.withPlatform( + platform: mockPlatformWebViewCookieManager, + ); + + const WebViewCookie cookie = WebViewCookie( + name: 'name', + value: 'value', + domain: 'domain', + ); + + await cookieManager.setCookie(cookie); + + final WebViewCookie capturedCookie = verify( + mockPlatformWebViewCookieManager.setCookie(captureAny), + ).captured.single as WebViewCookie; + expect(capturedCookie, cookie); + }); + }); +} diff --git a/packages/webview_flutter/webview_flutter/test/v4/webview_cookie_manager_test.mocks.dart b/packages/webview_flutter/webview_flutter/test/v4/webview_cookie_manager_test.mocks.dart new file mode 100644 index 000000000000..4bca8b6a1f12 --- /dev/null +++ b/packages/webview_flutter/webview_flutter/test/v4/webview_cookie_manager_test.mocks.dart @@ -0,0 +1,56 @@ +// Mocks generated by Mockito 5.3.0 from annotations +// in webview_flutter/test/v4/webview_cookie_manager_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:mockito/mockito.dart' as _i1; +import 'package:webview_flutter_platform_interface/v4/src/platform_webview_cookie_manager.dart' + as _i3; +import 'package:webview_flutter_platform_interface/v4/src/webview_platform.dart' + as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakePlatformWebViewCookieManagerCreationParams_0 extends _i1.SmartFake + implements _i2.PlatformWebViewCookieManagerCreationParams { + _FakePlatformWebViewCookieManagerCreationParams_0( + Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [PlatformWebViewCookieManager]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockPlatformWebViewCookieManager extends _i1.Mock + implements _i3.PlatformWebViewCookieManager { + MockPlatformWebViewCookieManager() { + _i1.throwOnMissingStub(this); + } + + @override + _i2.PlatformWebViewCookieManagerCreationParams get params => + (super.noSuchMethod(Invocation.getter(#params), + returnValue: _FakePlatformWebViewCookieManagerCreationParams_0( + this, Invocation.getter(#params))) + as _i2.PlatformWebViewCookieManagerCreationParams); + @override + _i4.Future clearCookies() => + (super.noSuchMethod(Invocation.method(#clearCookies, []), + returnValue: _i4.Future.value(false)) as _i4.Future); + @override + _i4.Future setCookie(_i2.WebViewCookie? cookie) => (super.noSuchMethod( + Invocation.method(#setCookie, [cookie]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value()) as _i4.Future); +} From 44a32603625ce379028992df8a626c20d13eb87d Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Wed, 31 Aug 2022 11:01:38 -0400 Subject: [PATCH 3/5] change to from --- .../lib/src/v4/src/webview_cookie_manager.dart | 12 ++++++------ .../test/v4/webview_cookie_manager_test.dart | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/webview_flutter/webview_flutter/lib/src/v4/src/webview_cookie_manager.dart b/packages/webview_flutter/webview_flutter/lib/src/v4/src/webview_cookie_manager.dart index 2247d5a7fd8f..c209e95a1917 100644 --- a/packages/webview_flutter/webview_flutter/lib/src/v4/src/webview_cookie_manager.dart +++ b/packages/webview_flutter/webview_flutter/lib/src/v4/src/webview_cookie_manager.dart @@ -8,21 +8,21 @@ import 'package:webview_flutter_platform_interface/v4/webview_flutter_platform_i class WebViewCookieManager { /// Constructs a [WebViewCookieManager]. WebViewCookieManager() - : this.withPlatform( + : this.fromPlatform( platform: PlatformWebViewCookieManager( const PlatformWebViewCookieManagerCreationParams(), ), ); - /// Constructs a [WebViewCookieManager] with creation params for a specific + /// Constructs a [WebViewCookieManager] from creation params for a specific /// platform. - WebViewCookieManager.withPlatformCreationParams( + WebViewCookieManager.fromPlatformCreationParams( PlatformWebViewCookieManagerCreationParams params, - ) : this.withPlatform(platform: PlatformWebViewCookieManager(params)); + ) : this.fromPlatform(platform: PlatformWebViewCookieManager(params)); - /// Constructs a [WebViewCookieManager] with a specific platform + /// Constructs a [WebViewCookieManager] from a specific platform /// implementation. - WebViewCookieManager.withPlatform({required this.platform}); + WebViewCookieManager.fromPlatform({required this.platform}); /// Implementation of [PlatformWebViewCookieManager] for the current platform. final PlatformWebViewCookieManager platform; diff --git a/packages/webview_flutter/webview_flutter/test/v4/webview_cookie_manager_test.dart b/packages/webview_flutter/webview_flutter/test/v4/webview_cookie_manager_test.dart index 2d85d0978234..d7941ab60cc9 100644 --- a/packages/webview_flutter/webview_flutter/test/v4/webview_cookie_manager_test.dart +++ b/packages/webview_flutter/webview_flutter/test/v4/webview_cookie_manager_test.dart @@ -21,7 +21,7 @@ void main() { ); final WebViewCookieManager cookieManager = - WebViewCookieManager.withPlatform( + WebViewCookieManager.fromPlatform( platform: mockPlatformWebViewCookieManager, ); @@ -33,7 +33,7 @@ void main() { MockPlatformWebViewCookieManager(); final WebViewCookieManager cookieManager = - WebViewCookieManager.withPlatform( + WebViewCookieManager.fromPlatform( platform: mockPlatformWebViewCookieManager, ); From ffe561cd111d2b788a738916a672b1b9b7a0ced8 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Wed, 31 Aug 2022 11:02:12 -0400 Subject: [PATCH 4/5] interface version bump --- packages/webview_flutter/webview_flutter/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter/pubspec.yaml b/packages/webview_flutter/webview_flutter/pubspec.yaml index 996f6478b800..a02b0323e7ab 100644 --- a/packages/webview_flutter/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: flutter: sdk: flutter webview_flutter_android: ^2.8.0 - webview_flutter_platform_interface: ^1.8.0 + webview_flutter_platform_interface: ^1.9.3 webview_flutter_wkwebview: ^2.7.0 dev_dependencies: From dbf1a6449be98ec3a88fed906fc9ac12a02ffe81 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Wed, 31 Aug 2022 11:13:44 -0400 Subject: [PATCH 5/5] export correct type --- .../webview_flutter/lib/src/v4/webview_flutter.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter/lib/src/v4/webview_flutter.dart b/packages/webview_flutter/webview_flutter/lib/src/v4/webview_flutter.dart index 891b537ad0fd..6ab8c3a2f6c8 100644 --- a/packages/webview_flutter/webview_flutter/lib/src/v4/webview_flutter.dart +++ b/packages/webview_flutter/webview_flutter/lib/src/v4/webview_flutter.dart @@ -4,7 +4,7 @@ library webview_flutter; -export 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart' +export 'package:webview_flutter_platform_interface/v4/webview_flutter_platform_interface.dart' show WebViewCookie; export 'src/webview_cookie_manager.dart';