Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
9950ee5
Added cookie manager to interface.
BeMacized Nov 29, 2021
4782a68
Added Android implementation for new CookieManager.
BeMacized Nov 29, 2021
0577815
Added iOS implementation for new CookieManager.
BeMacized Nov 29, 2021
2e3dba3
Update pubspec
BeMacized Nov 29, 2021
4816d71
Revert accidental push of ios changes
BeMacized Nov 29, 2021
34c680e
Update deprecation notice
BeMacized Nov 29, 2021
44eca64
Merge branch 'master' into webview_flutter/set_cookies_platform
BeMacized Nov 29, 2021
fd8db2c
Merge branch 'webview_flutter/set_cookies_platform' into webview_flut…
BeMacized Nov 29, 2021
555ed5c
Added iOS implementations for new CookieManager
BeMacized Nov 29, 2021
e1f45b9
Merge branch 'webview_flutter/set_cookies_platform' into webview_flut…
BeMacized Nov 29, 2021
0d0f281
Fix analysis issues
BeMacized Nov 29, 2021
623a975
Merge branch 'webview_flutter/set_cookies_platform' into webview_flut…
BeMacized Nov 29, 2021
176b55c
Merge branch 'webview_flutter/set_cookies_platform' into webview_flut…
BeMacized Nov 29, 2021
cbdba1c
Partially fix merge error
BeMacized Nov 29, 2021
d0f48d4
Merge branch 'webview_flutter/set_cookies_android' into webview_flutt…
BeMacized Nov 29, 2021
490da19
Enforce extending class for cookie manager platform interface
BeMacized Nov 29, 2021
60b5945
Merge branch 'webview_flutter/set_cookies_platform' into webview_flut…
BeMacized Nov 29, 2021
8eb7bf5
Update to match platform interface changes
BeMacized Nov 29, 2021
7371b70
Merge branch 'webview_flutter/set_cookies_platform' into webview_flut…
BeMacized Nov 29, 2021
eb66b7a
Update to match platform interface changes
BeMacized Nov 29, 2021
6f9742a
Process PR feedback
BeMacized Nov 30, 2021
c7067c0
Process PR feedback
BeMacized Nov 30, 2021
e9efb44
Merge branch 'webview_flutter/set_cookies_platform' into webview_flut…
BeMacized Nov 30, 2021
e557cbc
Merge branch 'webview_flutter/set_cookies_platform' into webview_flut…
BeMacized Nov 30, 2021
92a460d
Merge branch 'webview_flutter/set_cookies_ios' into webview_flutter/s…
BeMacized Nov 30, 2021
ec98150
Merge branch 'webview_flutter/set_cookies_android' into webview_flutt…
BeMacized Nov 30, 2021
4b2d0b9
Fix issue with WebViewCookieManager
BeMacized Nov 30, 2021
8f5bb77
Fix issue with WebViewCookieManager
BeMacized Nov 30, 2021
44c7012
Merge branch 'webview_flutter/set_cookies_ios' into webview_flutter/s…
BeMacized Nov 30, 2021
2db9fa4
Merge branch 'webview_flutter/set_cookies_android' into webview_flutt…
BeMacized Nov 30, 2021
6878223
Add setCookie to CookieManager and support initial cookies in creatio…
BeMacized Dec 1, 2021
cdc302e
Add fix for platform implementation registration.
BeMacized Dec 1, 2021
9a28b7b
Merge branch 'webview_flutter/set_cookies_android' into webview_flutt…
BeMacized Dec 1, 2021
9f98faf
Fix build issue
BeMacized Dec 2, 2021
b9f5a1a
Merge branch 'webview_flutter/set_cookies_android' into webview_flutt…
BeMacized Dec 2, 2021
6b021e9
Process PR feedback
BeMacized Dec 7, 2021
f09e807
Merge android, ios and platform interface from master
BeMacized Dec 7, 2021
851d98d
Merge branch 'master' into webview_flutter/set_cookies_app
BeMacized Dec 7, 2021
362e0dd
Fix merge errors
BeMacized Dec 7, 2021
79b3d54
Fix changelog
BeMacized Dec 7, 2021
bc01990
Updated dependency
BeMacized Dec 7, 2021
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
5 changes: 5 additions & 0 deletions packages/webview_flutter/webview_flutter/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## 2.7.0

* Adds `setCookie` to CookieManager.
* CreationParams now supports setting `initialCookies`.

## 2.6.0

* Adds support for the `loadRequest` method.
Expand Down
17 changes: 17 additions & 0 deletions packages/webview_flutter/webview_flutter/example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ enum MenuOptions {
loadLocalFile,
loadHtmlString,
transparentBackground,
setCookie,
}

class SampleMenu extends StatelessWidget {
Expand Down Expand Up @@ -232,6 +233,9 @@ class SampleMenu extends StatelessWidget {
case MenuOptions.transparentBackground:
_onTransparentBackground(controller.data!, context);
break;
case MenuOptions.setCookie:
_onSetCookie(controller.data!, context);
break;
}
},
itemBuilder: (BuildContext context) => <PopupMenuItem<MenuOptions>>[
Expand Down Expand Up @@ -281,6 +285,10 @@ class SampleMenu extends StatelessWidget {
value: MenuOptions.transparentBackground,
child: Text('Transparent background example'),
),
const PopupMenuItem<MenuOptions>(
value: MenuOptions.setCookie,
child: Text('Set cookie'),
),
],
);
},
Expand Down Expand Up @@ -357,6 +365,15 @@ class SampleMenu extends StatelessWidget {
await controller.loadUrl('data:text/html;base64,$contentBase64');
}

Future<void> _onSetCookie(
WebViewController controller, BuildContext context) async {
await CookieManager().setCookie(
const WebViewCookie(
name: 'foo', value: 'bar', domain: 'httpbin.org', path: '/anything'),
);
await controller.loadUrl('https://httpbin.org/anything');
}

Future<void> _onDoPostRequest(
WebViewController controller, BuildContext context) async {
final WebViewRequest request = WebViewRequest(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@ export 'package:webview_flutter_platform_interface/webview_flutter_platform_inte
WebSettings,
WebResourceError,
WebResourceErrorType,
WebViewCookie,
WebViewRequest,
WebViewRequestMethod;
32 changes: 28 additions & 4 deletions packages/webview_flutter/webview_flutter/lib/src/webview.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@
// found in the LICENSE file.

import 'dart:async';
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:webview_flutter_android/webview_android.dart';
import 'package:webview_flutter_android/webview_android_cookie_manager.dart';
import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart';
import 'package:webview_flutter_wkwebview/webview_flutter_wkwebview.dart';

import '../platform_interface.dart';
Expand Down Expand Up @@ -79,6 +82,7 @@ class WebView extends StatefulWidget {
Key? key,
this.onWebViewCreated,
this.initialUrl,
this.initialCookies = const <WebViewCookie>[],
this.javascriptMode = JavascriptMode.disabled,
this.javascriptChannels,
this.navigationDelegate,
Expand Down Expand Up @@ -150,6 +154,9 @@ class WebView extends StatefulWidget {
/// The initial URL to load.
final String? initialUrl;

/// The initial cookies to set.
final List<WebViewCookie> initialCookies;

/// Whether JavaScript execution is enabled.
final JavascriptMode javascriptMode;

Expand Down Expand Up @@ -365,6 +372,7 @@ CreationParams _creationParamsfromWidget(WebView widget) {
userAgent: widget.userAgent,
autoMediaPlaybackPolicy: widget.initialMediaPlaybackPolicy,
backgroundColor: widget.backgroundColor,
cookies: widget.initialCookies,
);
}

Expand Down Expand Up @@ -779,16 +787,32 @@ class CookieManager {
return _instance ??= CookieManager._();
}

CookieManager._();
CookieManager._() {
if (WebViewCookieManagerPlatform.instance == null) {
if (Platform.isAndroid) {
WebViewCookieManagerPlatform.instance = WebViewAndroidCookieManager();
} else if (Platform.isIOS) {
WebViewCookieManagerPlatform.instance = WKWebViewCookieManager();
} else {
throw AssertionError(
'This platform is currently unsupported by webview_flutter.');
}
}
}

static CookieManager? _instance;

/// Clears all cookies for all [WebView] instances.
///
/// This is a no op on iOS version smaller than 9.
///
/// Returns true if cookies were present before clearing, else false.
Future<bool> clearCookies() => WebView.platform.clearCookies();
Future<bool> clearCookies() =>
WebViewCookieManagerPlatform.instance!.clearCookies();

/// Sets a cookie for all [WebView] instances.
///
/// This is a no op on iOS versions below 11.
Future<void> setCookie(WebViewCookie cookie) =>
WebViewCookieManagerPlatform.instance!.setCookie(cookie);
}

// Throws an ArgumentError if `url` is not a valid URL string.
Expand Down
6 changes: 3 additions & 3 deletions packages/webview_flutter/webview_flutter/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: webview_flutter
description: A Flutter plugin that provides a WebView widget on Android and iOS.
repository: https://github.com/flutter/plugins/tree/master/packages/webview_flutter/webview_flutter
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22
version: 2.6.0
version: 2.7.0

environment:
sdk: ">=2.14.0 <3.0.0"
Expand All @@ -19,9 +19,9 @@ flutter:
dependencies:
flutter:
sdk: flutter
webview_flutter_android: ^2.7.0
webview_flutter_android: ^2.8.0
webview_flutter_platform_interface: ^1.8.0
webview_flutter_wkwebview: ^2.5.0
webview_flutter_wkwebview: ^2.6.0

dev_dependencies:
build_runner: ^2.1.5
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,12 @@ void main() {

late MockWebViewPlatform mockWebViewPlatform;
late MockWebViewPlatformController mockWebViewPlatformController;
late MockWebViewCookieManagerPlatform mockWebViewCookieManagerPlatform;

setUp(() {
mockWebViewPlatformController = MockWebViewPlatformController();
mockWebViewPlatform = MockWebViewPlatform();
mockWebViewCookieManagerPlatform = MockWebViewCookieManagerPlatform();
when(mockWebViewPlatform.build(
context: anyNamed('context'),
creationParams: anyNamed('creationParams'),
Expand All @@ -46,6 +48,11 @@ void main() {
});

WebView.platform = mockWebViewPlatform;
WebViewCookieManagerPlatform.instance = mockWebViewCookieManagerPlatform;
});

tearDown(() {
mockWebViewCookieManagerPlatform.reset();
});

testWidgets('Create WebView', (WidgetTester tester) async {
Expand Down Expand Up @@ -499,9 +506,6 @@ void main() {
});

testWidgets('Cookies can be cleared once', (WidgetTester tester) async {
when(mockWebViewPlatform.clearCookies())
.thenAnswer((_) => Future<bool>.value(true));

await tester.pumpWidget(
const WebView(
initialUrl: 'https://flutter.io',
Expand All @@ -512,6 +516,21 @@ void main() {
expect(hasCookies, true);
});

testWidgets('Cookies can be set', (WidgetTester tester) async {
const WebViewCookie cookie =
WebViewCookie(name: 'foo', value: 'bar', domain: 'flutter.dev');

await tester.pumpWidget(
const WebView(
initialUrl: 'https://flutter.io',
),
);
final CookieManager cookieManager = CookieManager();
await cookieManager.setCookie(cookie);
expect(mockWebViewCookieManagerPlatform.setCookieCalls,
<WebViewCookie>[cookie]);
});

testWidgets('Initial JavaScript channels', (WidgetTester tester) async {
await tester.pumpWidget(
WebView(
Expand Down Expand Up @@ -1308,3 +1327,19 @@ class MatchesCreationParams extends Matcher {
.matches(creationParams.javascriptChannelNames, matchState);
}
}

class MockWebViewCookieManagerPlatform extends WebViewCookieManagerPlatform {
List<WebViewCookie> setCookieCalls = <WebViewCookie>[];

@override
Future<bool> clearCookies() async => true;

@override
Future<void> setCookie(WebViewCookie cookie) async {
setCookieCalls.add(cookie);
}

void reset() {
setCookieCalls = <WebViewCookie>[];
}
}