From e5457fd908bebc59c51f70dc73d77ac562d4e242 Mon Sep 17 00:00:00 2001 From: balvinderz Date: Wed, 12 Aug 2020 15:02:11 +0530 Subject: [PATCH 1/5] added windowName parameter in url_launcher_web --- .../url_launcher/url_launcher/CHANGELOG.md | 3 ++ .../test/url_launcher_example_test.dart | 37 +++++++++++-------- .../url_launcher/lib/url_launcher.dart | 5 +++ .../url_launcher/url_launcher/pubspec.yaml | 14 +++++-- .../url_launcher/test/url_launcher_test.dart | 11 +++++- .../CHANGELOG.md | 4 ++ .../lib/method_channel_url_launcher.dart | 2 + .../lib/url_launcher_platform_interface.dart | 17 ++++----- .../pubspec.yaml | 2 +- .../method_channel_url_launcher_test.dart | 16 ++++++++ .../url_launcher_web/CHANGELOG.md | 3 ++ .../lib/url_launcher_web.dart | 10 +++-- .../url_launcher_web/pubspec.yaml | 15 ++++++-- .../test/url_launcher_web_test.dart | 4 ++ 14 files changed, 107 insertions(+), 36 deletions(-) diff --git a/packages/url_launcher/url_launcher/CHANGELOG.md b/packages/url_launcher/url_launcher/CHANGELOG.md index a5364726bee3..36ff980fe0e6 100644 --- a/packages/url_launcher/url_launcher/CHANGELOG.md +++ b/packages/url_launcher/url_launcher/CHANGELOG.md @@ -1,3 +1,6 @@ +## 5.5.1 +* Added windowName web only parameter + ## 5.5.0 * Support Linux by default. diff --git a/packages/url_launcher/url_launcher/example/test/url_launcher_example_test.dart b/packages/url_launcher/url_launcher/example/test/url_launcher_example_test.dart index 41b9f6f5ec6c..635dd7cac77b 100644 --- a/packages/url_launcher/url_launcher/example/test/url_launcher_example_test.dart +++ b/packages/url_launcher/url_launcher/example/test/url_launcher_example_test.dart @@ -16,27 +16,34 @@ void main() { const Map defaultHeaders = { 'my_header_key': 'my_header_value' }; - verifyNever(mock.launch(defaultUrl, - useSafariVC: false, - useWebView: false, - enableDomStorage: false, - enableJavaScript: false, - universalLinksOnly: false, - headers: defaultHeaders)); + verifyNever(mock.launch( + defaultUrl, + useSafariVC: false, + useWebView: false, + enableDomStorage: false, + enableJavaScript: false, + universalLinksOnly: false, + headers: defaultHeaders, + windowName: "_blank", + )); Finder browserlaunchBtn = find.widgetWithText(RaisedButton, 'Launch in browser'); expect(browserlaunchBtn, findsOneWidget); await tester.tap(browserlaunchBtn); - verify(mock.launch(defaultUrl, - useSafariVC: false, - useWebView: false, - enableDomStorage: false, - enableJavaScript: false, - universalLinksOnly: false, - headers: defaultHeaders)) - .called(1); + verify( + mock.launch( + defaultUrl, + useSafariVC: false, + useWebView: false, + enableDomStorage: false, + enableJavaScript: false, + universalLinksOnly: false, + headers: defaultHeaders, + windowName: "_blank", + ), + ).called(1); }); } diff --git a/packages/url_launcher/url_launcher/lib/url_launcher.dart b/packages/url_launcher/url_launcher/lib/url_launcher.dart index 2ce725da8642..86930a2b00fd 100644 --- a/packages/url_launcher/url_launcher/lib/url_launcher.dart +++ b/packages/url_launcher/url_launcher/lib/url_launcher.dart @@ -44,6 +44,9 @@ import 'package:url_launcher_platform_interface/url_launcher_platform_interface. /// [enableDomStorage] is an Android only setting. If true, WebView enable /// DOM storage. /// [headers] is an Android only setting that adds headers to the WebView. +/// [windowName] is an Web only setting . _blank opens the new url in new tab , +/// _self opens the new url in current tab. +/// Default behaviour is to open the url in new tab. /// /// Note that if any of the above are set to true but the URL is not a web URL, /// this will throw a [PlatformException]. @@ -63,6 +66,7 @@ Future launch( bool universalLinksOnly, Map headers, Brightness statusBarBrightness, + String windowName, }) async { assert(urlString != null); final Uri url = Uri.parse(urlString.trimLeft()); @@ -93,6 +97,7 @@ Future launch( enableDomStorage: enableDomStorage ?? false, universalLinksOnly: universalLinksOnly ?? false, headers: headers ?? {}, + windowName: windowName ?? "_blank", ); assert(previousAutomaticSystemUiAdjustment != null); if (statusBarBrightness != null) { diff --git a/packages/url_launcher/url_launcher/pubspec.yaml b/packages/url_launcher/url_launcher/pubspec.yaml index 299de938165f..ab250774c4c3 100644 --- a/packages/url_launcher/url_launcher/pubspec.yaml +++ b/packages/url_launcher/url_launcher/pubspec.yaml @@ -2,7 +2,7 @@ name: url_launcher description: Flutter plugin for launching a URL on Android and iOS. Supports web, phone, SMS, and email schemes. homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher -version: 5.5.0 +version: 5.5.1 flutter: plugin: @@ -22,13 +22,21 @@ flutter: dependencies: flutter: sdk: flutter - url_launcher_platform_interface: ^1.0.4 + url_launcher_platform_interface: + git: + url: https://github.com/balvinderz/plugins + ref: windowname + path: packages/url_launcher/url_launcher_platform_interface # The design on https://flutter.dev/go/federated-plugins was to leave # this constraint as "any". We cannot do it right now as it fails pub publish # validation, so we set a ^ constraint. # TODO(amirh): Revisit this (either update this part in the design or the pub tool). # https://github.com/flutter/flutter/issues/46264 - url_launcher_web: ^0.1.0+1 + url_launcher_web: + git: + url: https://github.com/balvinderz/plugins + ref: windowname + path: packages/url_launcher/url_launcher_web url_launcher_linux: ^0.0.1 url_launcher_macos: ^0.0.1 diff --git a/packages/url_launcher/url_launcher/test/url_launcher_test.dart b/packages/url_launcher/url_launcher/test/url_launcher_test.dart index 9d01b43d8e72..8aa08d5c135d 100644 --- a/packages/url_launcher/url_launcher/test/url_launcher_test.dart +++ b/packages/url_launcher/url_launcher/test/url_launcher_test.dart @@ -44,7 +44,7 @@ void main() { }); test('default behavior', () async { - await launch('http://flutter.dev/'); + await launch('http://flutter.dev/', windowName: "_blank"); expect( verify(mock.launch( captureAny, @@ -54,6 +54,7 @@ void main() { enableDomStorage: captureAnyNamed('enableDomStorage'), universalLinksOnly: captureAnyNamed('universalLinksOnly'), headers: captureAnyNamed('headers'), + windowName: captureAnyNamed('windowName'), )).captured, [ 'http://flutter.dev/', @@ -63,6 +64,7 @@ void main() { false, false, {}, + "_blank", ], ); }); @@ -81,6 +83,7 @@ void main() { enableDomStorage: anyNamed('enableDomStorage'), universalLinksOnly: anyNamed('universalLinksOnly'), headers: captureAnyNamed('headers'), + windowName: anyNamed('windowName'), )).captured.single, {'key': 'value'}, ); @@ -97,6 +100,7 @@ void main() { enableDomStorage: anyNamed('enableDomStorage'), universalLinksOnly: anyNamed('universalLinksOnly'), headers: anyNamed('headers'), + windowName: anyNamed('windowName'), )).captured.single, true, ); @@ -114,6 +118,7 @@ void main() { enableDomStorage: anyNamed('enableDomStorage'), universalLinksOnly: captureAnyNamed('universalLinksOnly'), headers: anyNamed('headers'), + windowName: anyNamed('windowName'), )).captured, [false, true], ); @@ -130,6 +135,7 @@ void main() { enableDomStorage: anyNamed('enableDomStorage'), universalLinksOnly: anyNamed('universalLinksOnly'), headers: anyNamed('headers'), + windowName: anyNamed('windowName'), )).captured.single, true, ); @@ -147,6 +153,7 @@ void main() { enableDomStorage: anyNamed('enableDomStorage'), universalLinksOnly: anyNamed('universalLinksOnly'), headers: anyNamed('headers'), + windowName: anyNamed('windowName'), )).captured, [true, true], ); @@ -164,6 +171,7 @@ void main() { enableDomStorage: captureAnyNamed('enableDomStorage'), universalLinksOnly: anyNamed('universalLinksOnly'), headers: anyNamed('headers'), + windowName: anyNamed('windowName'), )).captured, [true, true], ); @@ -181,6 +189,7 @@ void main() { enableDomStorage: anyNamed('enableDomStorage'), universalLinksOnly: anyNamed('universalLinksOnly'), headers: anyNamed('headers'), + windowName: anyNamed('windowName'), )).captured.single, false, ); diff --git a/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md b/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md index 8766d7a3f239..fe0dbedfabe5 100644 --- a/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.8 + +* Added windowName web only parameter + ## 1.0.7 * Update lower bound of dart dependency to 2.1.0. diff --git a/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart b/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart index 3fbd2ee01843..fca2390a3843 100644 --- a/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart +++ b/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart @@ -35,6 +35,7 @@ class MethodChannelUrlLauncher extends UrlLauncherPlatform { @required bool enableDomStorage, @required bool universalLinksOnly, @required Map headers, + @required String windowName, }) { return _channel.invokeMethod( 'launch', @@ -46,6 +47,7 @@ class MethodChannelUrlLauncher extends UrlLauncherPlatform { 'enableDomStorage': enableDomStorage, 'universalLinksOnly': universalLinksOnly, 'headers': headers, + 'windowName': windowName, }, ); } diff --git a/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart b/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart index 164555d63e0c..e27a615911ad 100644 --- a/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart +++ b/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart @@ -47,15 +47,14 @@ abstract class UrlLauncherPlatform extends PlatformInterface { /// /// For documentation on the other arguments, see the `launch` documentation /// in `package:url_launcher/url_launcher.dart`. - Future launch( - String url, { - @required bool useSafariVC, - @required bool useWebView, - @required bool enableJavaScript, - @required bool enableDomStorage, - @required bool universalLinksOnly, - @required Map headers, - }) { + Future launch(String url, + {@required bool useSafariVC, + @required bool useWebView, + @required bool enableJavaScript, + @required bool enableDomStorage, + @required bool universalLinksOnly, + @required Map headers, + @required String windowName}) { throw UnimplementedError('launch() has not been implemented.'); } diff --git a/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml b/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml index 4486134310c2..0c4096278bcb 100644 --- a/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml +++ b/packages/url_launcher/url_launcher_platform_interface/pubspec.yaml @@ -3,7 +3,7 @@ description: A common platform interface for the url_launcher plugin. homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_platform_interface # 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: 1.0.7 +version: 1.0.8 dependencies: flutter: diff --git a/packages/url_launcher/url_launcher_platform_interface/test/method_channel_url_launcher_test.dart b/packages/url_launcher/url_launcher_platform_interface/test/method_channel_url_launcher_test.dart index 628ab48498ec..e20df029eef9 100644 --- a/packages/url_launcher/url_launcher_platform_interface/test/method_channel_url_launcher_test.dart +++ b/packages/url_launcher/url_launcher_platform_interface/test/method_channel_url_launcher_test.dart @@ -70,6 +70,7 @@ void main() { enableDomStorage: false, universalLinksOnly: false, headers: const {}, + windowName: '_blank', ); expect( log, @@ -82,6 +83,7 @@ void main() { 'enableDomStorage': false, 'universalLinksOnly': false, 'headers': {}, + 'windowName': '_blank', }) ], ); @@ -96,6 +98,7 @@ void main() { enableDomStorage: false, universalLinksOnly: false, headers: const {'key': 'value'}, + windowName: '_blank', ); expect( log, @@ -108,6 +111,7 @@ void main() { 'enableDomStorage': false, 'universalLinksOnly': false, 'headers': {'key': 'value'}, + 'windowName': '_blank', }) ], ); @@ -122,6 +126,7 @@ void main() { enableDomStorage: false, universalLinksOnly: false, headers: const {}, + windowName: "_blank", ); expect( log, @@ -134,6 +139,7 @@ void main() { 'enableDomStorage': false, 'universalLinksOnly': false, 'headers': {}, + 'windowName': '_blank', }) ], ); @@ -148,6 +154,7 @@ void main() { enableDomStorage: false, universalLinksOnly: true, headers: const {}, + windowName: "_blank", ); expect( log, @@ -160,6 +167,7 @@ void main() { 'enableDomStorage': false, 'universalLinksOnly': true, 'headers': {}, + 'windowName': '_blank', }) ], ); @@ -174,6 +182,7 @@ void main() { enableDomStorage: false, universalLinksOnly: false, headers: const {}, + windowName: '_blank', ); expect( log, @@ -186,6 +195,7 @@ void main() { 'enableDomStorage': false, 'universalLinksOnly': false, 'headers': {}, + 'windowName': '_blank', }) ], ); @@ -200,6 +210,7 @@ void main() { enableDomStorage: false, universalLinksOnly: false, headers: const {}, + windowName: '_blank', ); expect( log, @@ -212,6 +223,7 @@ void main() { 'enableDomStorage': false, 'universalLinksOnly': false, 'headers': {}, + 'windowName': '_blank', }) ], ); @@ -226,6 +238,7 @@ void main() { enableDomStorage: true, universalLinksOnly: false, headers: const {}, + windowName: '_blank', ); expect( log, @@ -238,6 +251,7 @@ void main() { 'enableDomStorage': true, 'universalLinksOnly': false, 'headers': {}, + 'windowName': '_blank', }) ], ); @@ -252,6 +266,7 @@ void main() { enableDomStorage: false, universalLinksOnly: false, headers: const {}, + windowName: '_blank', ); expect( log, @@ -264,6 +279,7 @@ void main() { 'enableDomStorage': false, 'universalLinksOnly': false, 'headers': {}, + 'windowName': '_blank', }) ], ); diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md index e9f7bde63fda..2b7d91784bcc 100644 --- a/packages/url_launcher/url_launcher_web/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_web/CHANGELOG.md @@ -1,3 +1,6 @@ +# 0.1.3 +- Added "windowName" parameter that lets you launch url in new tab,same tab or in an iframe + # 0.1.2 - Adds "tel" and "sms" support diff --git a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart index 1bac4d524122..64a889348e25 100644 --- a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart +++ b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart @@ -39,15 +39,15 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { bool _isSafariTargetTopScheme(String url) => _safariTargetTopSchemes.contains(_getUrlScheme(url)); - /// Opens the given [url] in a new window. + /// Opens the given [url] in the specified [windowName]. /// /// Returns the newly created window. @visibleForTesting - html.WindowBase openNewWindow(String url) { + html.WindowBase openNewWindow(String url, {windowName = ""}) { // We need to open mailto, tel and sms urls on the _top window context on safari browsers. // See https://github.com/flutter/flutter/issues/51461 for reference. final target = - browser.isSafari && _isSafariTargetTopScheme(url) ? '_top' : ''; + browser.isSafari && _isSafariTargetTopScheme(url) ? '_top' : windowName; return _window.open(url, target); } @@ -65,7 +65,9 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { @required bool enableDomStorage, @required bool universalLinksOnly, @required Map headers, + @required String windowName, }) { - return Future.value(openNewWindow(url) != null); + return Future.value( + openNewWindow(url, windowName: windowName) != null); } } diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index 9a5beac00b94..5427badb4224 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -4,7 +4,7 @@ homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher/u # 0.1.y+z is compatible with 1.0.0, if you land a breaking change bump # the version to 2.0.0. # See more details: https://github.com/flutter/flutter/wiki/Package-migration-to-1.0.0 -version: 0.1.2 +version: 0.1.3 flutter: plugin: @@ -14,7 +14,12 @@ flutter: fileName: url_launcher_web.dart dependencies: - url_launcher_platform_interface: ^1.0.1 + url_launcher_platform_interface: + git: + url: https://github.com/balvinderz/plugins + ref: windowname + path: packages/url_launcher/url_launcher_platform_interface + platform_detect: ^1.4.0 flutter: sdk: flutter @@ -25,7 +30,11 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - url_launcher: ^5.2.5 + url_launcher: + git: + url: https://github.com/balvinderz/plugins + ref: windowname + path: packages/url_launcher/url_launcher pedantic: ^1.8.0 mockito: ^4.1.1 diff --git a/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart b/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart index b7e107d892cf..7f7114977bc6 100644 --- a/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart +++ b/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart @@ -68,6 +68,7 @@ void main() { enableDomStorage: null, enableJavaScript: null, headers: null, + windowName: "_blank", ), completion(isTrue)); }); @@ -82,6 +83,7 @@ void main() { enableDomStorage: null, enableJavaScript: null, headers: null, + windowName: "_blank", ), completion(isTrue)); }); @@ -96,6 +98,7 @@ void main() { enableDomStorage: null, enableJavaScript: null, headers: null, + windowName: "_blank", ), completion(isTrue)); }); @@ -110,6 +113,7 @@ void main() { enableDomStorage: null, enableJavaScript: null, headers: null, + windowName: "_blank", ), completion(isTrue)); }); From 296467667c138b2a3fae3afecb8b91aa020c14e6 Mon Sep 17 00:00:00 2001 From: balvinderz Date: Thu, 27 Aug 2020 11:33:00 +0530 Subject: [PATCH 2/5] changed windowName parameter to webOnlyLinkTarget and made it optional.Added 2 tests. --- .../test/url_launcher_web_test.dart | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart b/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart index 7f7114977bc6..c4087bf4283b 100644 --- a/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart +++ b/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart @@ -68,7 +68,6 @@ void main() { enableDomStorage: null, enableJavaScript: null, headers: null, - windowName: "_blank", ), completion(isTrue)); }); @@ -83,7 +82,6 @@ void main() { enableDomStorage: null, enableJavaScript: null, headers: null, - windowName: "_blank", ), completion(isTrue)); }); @@ -98,7 +96,6 @@ void main() { enableDomStorage: null, enableJavaScript: null, headers: null, - windowName: "_blank", ), completion(isTrue)); }); @@ -113,7 +110,6 @@ void main() { enableDomStorage: null, enableJavaScript: null, headers: null, - windowName: "_blank", ), completion(isTrue)); }); @@ -125,7 +121,6 @@ void main() { verify(mockWindow.open('http://www.google.com', '')); }); - test('https urls should be launched in a new window', () { plugin.openNewWindow('https://www.google.com'); @@ -150,6 +145,20 @@ void main() { verify(mockWindow.open('sms:+19725551212?body=hello%20there', '')); }); + test('setting webOnlyLinkTarget as _self opens the url in the same tab', + () { + plugin.openNewWindow("https://www.google.com", + webOnlyLinkTarget: "_self"); + verify(mockWindow.open('https://www.google.com', '_self')); + }); + + test('setting webOnlyLinkTarget as _blank opens the url in a new tab', + () { + plugin.openNewWindow("https://www.google.com", + webOnlyLinkTarget: "_blank"); + verify(mockWindow.open('https://www.google.com', '_blank')); + }); + group('Safari', () { setUp(() { platform.configurePlatformForTesting(browser: platform.safari); From 5ea8a47c521bd878500b97e61b273645c780229d Mon Sep 17 00:00:00 2001 From: balvinderz Date: Thu, 27 Aug 2020 11:52:04 +0530 Subject: [PATCH 3/5] changed windowName parameter to webOnlyLinkTarget and made it optional. Added 2 tests to verify this feature --- .../test/url_launcher_example_test.dart | 2 -- .../url_launcher/lib/url_launcher.dart | 6 +++--- .../url_launcher/test/url_launcher_test.dart | 11 +--------- .../lib/method_channel_url_launcher.dart | 19 ++++++++---------- .../lib/url_launcher_platform_interface.dart | 2 +- .../method_channel_url_launcher_test.dart | 16 --------------- .../lib/url_launcher_web.dart | 20 +++++++++++-------- 7 files changed, 25 insertions(+), 51 deletions(-) diff --git a/packages/url_launcher/url_launcher/example/test/url_launcher_example_test.dart b/packages/url_launcher/url_launcher/example/test/url_launcher_example_test.dart index 635dd7cac77b..a81a0aedcd4b 100644 --- a/packages/url_launcher/url_launcher/example/test/url_launcher_example_test.dart +++ b/packages/url_launcher/url_launcher/example/test/url_launcher_example_test.dart @@ -24,7 +24,6 @@ void main() { enableJavaScript: false, universalLinksOnly: false, headers: defaultHeaders, - windowName: "_blank", )); Finder browserlaunchBtn = @@ -41,7 +40,6 @@ void main() { enableJavaScript: false, universalLinksOnly: false, headers: defaultHeaders, - windowName: "_blank", ), ).called(1); }); diff --git a/packages/url_launcher/url_launcher/lib/url_launcher.dart b/packages/url_launcher/url_launcher/lib/url_launcher.dart index 86930a2b00fd..694749c7a09b 100644 --- a/packages/url_launcher/url_launcher/lib/url_launcher.dart +++ b/packages/url_launcher/url_launcher/lib/url_launcher.dart @@ -44,7 +44,7 @@ import 'package:url_launcher_platform_interface/url_launcher_platform_interface. /// [enableDomStorage] is an Android only setting. If true, WebView enable /// DOM storage. /// [headers] is an Android only setting that adds headers to the WebView. -/// [windowName] is an Web only setting . _blank opens the new url in new tab , +/// [webOnlyLinkTarget] is an Web only setting . _blank opens the new url in new tab , /// _self opens the new url in current tab. /// Default behaviour is to open the url in new tab. /// @@ -66,7 +66,7 @@ Future launch( bool universalLinksOnly, Map headers, Brightness statusBarBrightness, - String windowName, + String webOnlyLinkTarget, }) async { assert(urlString != null); final Uri url = Uri.parse(urlString.trimLeft()); @@ -97,7 +97,7 @@ Future launch( enableDomStorage: enableDomStorage ?? false, universalLinksOnly: universalLinksOnly ?? false, headers: headers ?? {}, - windowName: windowName ?? "_blank", + webOnlyLinkTarget: webOnlyLinkTarget, ); assert(previousAutomaticSystemUiAdjustment != null); if (statusBarBrightness != null) { diff --git a/packages/url_launcher/url_launcher/test/url_launcher_test.dart b/packages/url_launcher/url_launcher/test/url_launcher_test.dart index 8aa08d5c135d..9d01b43d8e72 100644 --- a/packages/url_launcher/url_launcher/test/url_launcher_test.dart +++ b/packages/url_launcher/url_launcher/test/url_launcher_test.dart @@ -44,7 +44,7 @@ void main() { }); test('default behavior', () async { - await launch('http://flutter.dev/', windowName: "_blank"); + await launch('http://flutter.dev/'); expect( verify(mock.launch( captureAny, @@ -54,7 +54,6 @@ void main() { enableDomStorage: captureAnyNamed('enableDomStorage'), universalLinksOnly: captureAnyNamed('universalLinksOnly'), headers: captureAnyNamed('headers'), - windowName: captureAnyNamed('windowName'), )).captured, [ 'http://flutter.dev/', @@ -64,7 +63,6 @@ void main() { false, false, {}, - "_blank", ], ); }); @@ -83,7 +81,6 @@ void main() { enableDomStorage: anyNamed('enableDomStorage'), universalLinksOnly: anyNamed('universalLinksOnly'), headers: captureAnyNamed('headers'), - windowName: anyNamed('windowName'), )).captured.single, {'key': 'value'}, ); @@ -100,7 +97,6 @@ void main() { enableDomStorage: anyNamed('enableDomStorage'), universalLinksOnly: anyNamed('universalLinksOnly'), headers: anyNamed('headers'), - windowName: anyNamed('windowName'), )).captured.single, true, ); @@ -118,7 +114,6 @@ void main() { enableDomStorage: anyNamed('enableDomStorage'), universalLinksOnly: captureAnyNamed('universalLinksOnly'), headers: anyNamed('headers'), - windowName: anyNamed('windowName'), )).captured, [false, true], ); @@ -135,7 +130,6 @@ void main() { enableDomStorage: anyNamed('enableDomStorage'), universalLinksOnly: anyNamed('universalLinksOnly'), headers: anyNamed('headers'), - windowName: anyNamed('windowName'), )).captured.single, true, ); @@ -153,7 +147,6 @@ void main() { enableDomStorage: anyNamed('enableDomStorage'), universalLinksOnly: anyNamed('universalLinksOnly'), headers: anyNamed('headers'), - windowName: anyNamed('windowName'), )).captured, [true, true], ); @@ -171,7 +164,6 @@ void main() { enableDomStorage: captureAnyNamed('enableDomStorage'), universalLinksOnly: anyNamed('universalLinksOnly'), headers: anyNamed('headers'), - windowName: anyNamed('windowName'), )).captured, [true, true], ); @@ -189,7 +181,6 @@ void main() { enableDomStorage: anyNamed('enableDomStorage'), universalLinksOnly: anyNamed('universalLinksOnly'), headers: anyNamed('headers'), - windowName: anyNamed('windowName'), )).captured.single, false, ); diff --git a/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart b/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart index fca2390a3843..81047097fd66 100644 --- a/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart +++ b/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart @@ -27,16 +27,14 @@ class MethodChannelUrlLauncher extends UrlLauncherPlatform { } @override - Future launch( - String url, { - @required bool useSafariVC, - @required bool useWebView, - @required bool enableJavaScript, - @required bool enableDomStorage, - @required bool universalLinksOnly, - @required Map headers, - @required String windowName, - }) { + Future launch(String url, + {@required bool useSafariVC, + @required bool useWebView, + @required bool enableJavaScript, + @required bool enableDomStorage, + @required bool universalLinksOnly, + @required Map headers, + String webOnlyLinkTarget}) { return _channel.invokeMethod( 'launch', { @@ -47,7 +45,6 @@ class MethodChannelUrlLauncher extends UrlLauncherPlatform { 'enableDomStorage': enableDomStorage, 'universalLinksOnly': universalLinksOnly, 'headers': headers, - 'windowName': windowName, }, ); } diff --git a/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart b/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart index e27a615911ad..2a0719740853 100644 --- a/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart +++ b/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart @@ -54,7 +54,7 @@ abstract class UrlLauncherPlatform extends PlatformInterface { @required bool enableDomStorage, @required bool universalLinksOnly, @required Map headers, - @required String windowName}) { + String webOnlyLinkTarget}) { throw UnimplementedError('launch() has not been implemented.'); } diff --git a/packages/url_launcher/url_launcher_platform_interface/test/method_channel_url_launcher_test.dart b/packages/url_launcher/url_launcher_platform_interface/test/method_channel_url_launcher_test.dart index e20df029eef9..628ab48498ec 100644 --- a/packages/url_launcher/url_launcher_platform_interface/test/method_channel_url_launcher_test.dart +++ b/packages/url_launcher/url_launcher_platform_interface/test/method_channel_url_launcher_test.dart @@ -70,7 +70,6 @@ void main() { enableDomStorage: false, universalLinksOnly: false, headers: const {}, - windowName: '_blank', ); expect( log, @@ -83,7 +82,6 @@ void main() { 'enableDomStorage': false, 'universalLinksOnly': false, 'headers': {}, - 'windowName': '_blank', }) ], ); @@ -98,7 +96,6 @@ void main() { enableDomStorage: false, universalLinksOnly: false, headers: const {'key': 'value'}, - windowName: '_blank', ); expect( log, @@ -111,7 +108,6 @@ void main() { 'enableDomStorage': false, 'universalLinksOnly': false, 'headers': {'key': 'value'}, - 'windowName': '_blank', }) ], ); @@ -126,7 +122,6 @@ void main() { enableDomStorage: false, universalLinksOnly: false, headers: const {}, - windowName: "_blank", ); expect( log, @@ -139,7 +134,6 @@ void main() { 'enableDomStorage': false, 'universalLinksOnly': false, 'headers': {}, - 'windowName': '_blank', }) ], ); @@ -154,7 +148,6 @@ void main() { enableDomStorage: false, universalLinksOnly: true, headers: const {}, - windowName: "_blank", ); expect( log, @@ -167,7 +160,6 @@ void main() { 'enableDomStorage': false, 'universalLinksOnly': true, 'headers': {}, - 'windowName': '_blank', }) ], ); @@ -182,7 +174,6 @@ void main() { enableDomStorage: false, universalLinksOnly: false, headers: const {}, - windowName: '_blank', ); expect( log, @@ -195,7 +186,6 @@ void main() { 'enableDomStorage': false, 'universalLinksOnly': false, 'headers': {}, - 'windowName': '_blank', }) ], ); @@ -210,7 +200,6 @@ void main() { enableDomStorage: false, universalLinksOnly: false, headers: const {}, - windowName: '_blank', ); expect( log, @@ -223,7 +212,6 @@ void main() { 'enableDomStorage': false, 'universalLinksOnly': false, 'headers': {}, - 'windowName': '_blank', }) ], ); @@ -238,7 +226,6 @@ void main() { enableDomStorage: true, universalLinksOnly: false, headers: const {}, - windowName: '_blank', ); expect( log, @@ -251,7 +238,6 @@ void main() { 'enableDomStorage': true, 'universalLinksOnly': false, 'headers': {}, - 'windowName': '_blank', }) ], ); @@ -266,7 +252,6 @@ void main() { enableDomStorage: false, universalLinksOnly: false, headers: const {}, - windowName: '_blank', ); expect( log, @@ -279,7 +264,6 @@ void main() { 'enableDomStorage': false, 'universalLinksOnly': false, 'headers': {}, - 'windowName': '_blank', }) ], ); diff --git a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart index 64a889348e25..80266cac137b 100644 --- a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart +++ b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart @@ -34,20 +34,25 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { UrlLauncherPlatform.instance = UrlLauncherPlugin(); } - String _getUrlScheme(String url) => Uri.tryParse(url)?.scheme; + String _getUrlScheme(String url) => + Uri + .tryParse(url) + ?.scheme; bool _isSafariTargetTopScheme(String url) => _safariTargetTopSchemes.contains(_getUrlScheme(url)); - /// Opens the given [url] in the specified [windowName]. + /// Opens the given [url] in the specified [webOnlyLinkTarget]. /// /// Returns the newly created window. @visibleForTesting - html.WindowBase openNewWindow(String url, {windowName = ""}) { + html.WindowBase openNewWindow(String url,{webOnlyLinkTarget} ) { // We need to open mailto, tel and sms urls on the _top window context on safari browsers. // See https://github.com/flutter/flutter/issues/51461 for reference. final target = - browser.isSafari && _isSafariTargetTopScheme(url) ? '_top' : windowName; + browser.isSafari && _isSafariTargetTopScheme(url) + ? '_top' + : webOnlyLinkTarget ?? ""; return _window.open(url, target); } @@ -57,17 +62,16 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { } @override - Future launch( - String url, { + Future launch(String url, { @required bool useSafariVC, @required bool useWebView, @required bool enableJavaScript, @required bool enableDomStorage, @required bool universalLinksOnly, @required Map headers, - @required String windowName, + String webOnlyLinkTarget, }) { return Future.value( - openNewWindow(url, windowName: windowName) != null); + openNewWindow(url,webOnlyLinkTarget: webOnlyLinkTarget) != null); } } From 01f9c3620ed89fb5aaa15f904489130f910d6b7e Mon Sep 17 00:00:00 2001 From: balvinderz Date: Fri, 28 Aug 2020 01:07:51 +0530 Subject: [PATCH 4/5] changed webOnlyLinkTarget to webOnlyWindowName. Added test for mailto url --- .../test/url_launcher_web_test.dart | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart b/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart index c4087bf4283b..70926acae18d 100644 --- a/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart +++ b/packages/url_launcher/url_launcher_web/test/url_launcher_web_test.dart @@ -145,17 +145,17 @@ void main() { verify(mockWindow.open('sms:+19725551212?body=hello%20there', '')); }); - test('setting webOnlyLinkTarget as _self opens the url in the same tab', + test('setting oOnlyLinkTarget as _self opens the url in the same tab', () { plugin.openNewWindow("https://www.google.com", - webOnlyLinkTarget: "_self"); + webOnlyWindowName: "_self"); verify(mockWindow.open('https://www.google.com', '_self')); }); test('setting webOnlyLinkTarget as _blank opens the url in a new tab', () { plugin.openNewWindow("https://www.google.com", - webOnlyLinkTarget: "_blank"); + webOnlyWindowName: "_blank"); verify(mockWindow.open('https://www.google.com', '_blank')); }); @@ -194,6 +194,13 @@ void main() { verify( mockWindow.open('sms:+19725551212?body=hello%20there', '_top')); }); + test( + 'mailto urls should use _blank if webOnlyWindowName is set as _blank', + () { + plugin.openNewWindow("mailto:name@mydomain.com", + webOnlyWindowName: "_blank"); + verify(mockWindow.open("mailto:name@mydomain.com", "_blank")); + }); }); }); }); From 12efeb80d37f09d98db6d095f86c5795756fd8b4 Mon Sep 17 00:00:00 2001 From: balvinderz Date: Fri, 28 Aug 2020 01:09:58 +0530 Subject: [PATCH 5/5] url_launcher changes --- .../url_launcher/url_launcher/CHANGELOG.md | 3 +- .../url_launcher/example/pubspec.yaml | 41 ++++++++++++++----- .../url_launcher/lib/url_launcher.dart | 6 +-- .../CHANGELOG.md | 2 +- .../lib/method_channel_url_launcher.dart | 18 ++++---- .../lib/url_launcher_platform_interface.dart | 18 ++++---- .../lib/url_launcher_web.dart | 23 ++++------- .../url_launcher_web/pubspec.yaml | 6 +-- 8 files changed, 67 insertions(+), 50 deletions(-) diff --git a/packages/url_launcher/url_launcher/CHANGELOG.md b/packages/url_launcher/url_launcher/CHANGELOG.md index 36ff980fe0e6..e8779cb5195e 100644 --- a/packages/url_launcher/url_launcher/CHANGELOG.md +++ b/packages/url_launcher/url_launcher/CHANGELOG.md @@ -1,5 +1,6 @@ ## 5.5.1 -* Added windowName web only parameter + +* Added webOnlyWindowName web only parameter ## 5.5.0 diff --git a/packages/url_launcher/url_launcher/example/pubspec.yaml b/packages/url_launcher/url_launcher/example/pubspec.yaml index 576b1041129b..ae8657755409 100644 --- a/packages/url_launcher/url_launcher/example/pubspec.yaml +++ b/packages/url_launcher/url_launcher/example/pubspec.yaml @@ -1,20 +1,41 @@ -name: url_launcher_example -description: Demonstrates how to use the url_launcher plugin. +name: url_launcher_web +description: Web platform implementation of url_launcher +homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_web +# 0.1.y+z is compatible with 1.0.0, if you land a breaking change bump +# the version to 2.0.0. +# See more details: https://github.com/flutter/flutter/wiki/Package-migration-to-1.0.0 +version: 0.1.3 +flutter: + plugin: + platforms: + web: + pluginClass: UrlLauncherPlugin + fileName: url_launcher_web.dart dependencies: + url_launcher_platform_interface: + git: + url: https://github.com/balvinderz/plugins + ref: windowname + path: packages/url_launcher/url_launcher_platform_interface + platform_detect: ^1.4.0 flutter: sdk: flutter - url_launcher: - path: ../ + flutter_web_plugins: + sdk: flutter + meta: ^1.1.7 dev_dependencies: - e2e: - path: ../../../e2e - flutter_driver: + flutter_test: sdk: flutter + url_launcher: + git: + url: https://github.com/balvinderz/plugins + ref: windowname + path: packages/url_launcher/url_launcher pedantic: ^1.8.0 mockito: ^4.1.1 - plugin_platform_interface: ^1.0.0 -flutter: - uses-material-design: true +environment: + sdk: ">=2.2.0 <3.0.0" + flutter: ">=1.10.0 <2.0.0" \ No newline at end of file diff --git a/packages/url_launcher/url_launcher/lib/url_launcher.dart b/packages/url_launcher/url_launcher/lib/url_launcher.dart index 694749c7a09b..bc171062093c 100644 --- a/packages/url_launcher/url_launcher/lib/url_launcher.dart +++ b/packages/url_launcher/url_launcher/lib/url_launcher.dart @@ -44,7 +44,7 @@ import 'package:url_launcher_platform_interface/url_launcher_platform_interface. /// [enableDomStorage] is an Android only setting. If true, WebView enable /// DOM storage. /// [headers] is an Android only setting that adds headers to the WebView. -/// [webOnlyLinkTarget] is an Web only setting . _blank opens the new url in new tab , +/// [webOnlyWindowName] is an Web only setting . _blank opens the new url in new tab , /// _self opens the new url in current tab. /// Default behaviour is to open the url in new tab. /// @@ -66,7 +66,7 @@ Future launch( bool universalLinksOnly, Map headers, Brightness statusBarBrightness, - String webOnlyLinkTarget, + String webOnlyWindowName, }) async { assert(urlString != null); final Uri url = Uri.parse(urlString.trimLeft()); @@ -97,7 +97,7 @@ Future launch( enableDomStorage: enableDomStorage ?? false, universalLinksOnly: universalLinksOnly ?? false, headers: headers ?? {}, - webOnlyLinkTarget: webOnlyLinkTarget, + webOnlyWindowName: webOnlyWindowName, ); assert(previousAutomaticSystemUiAdjustment != null); if (statusBarBrightness != null) { diff --git a/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md b/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md index fe0dbedfabe5..768042be4cef 100644 --- a/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_platform_interface/CHANGELOG.md @@ -1,6 +1,6 @@ ## 1.0.8 -* Added windowName web only parameter +* Added webOnlyWindowName parameter ## 1.0.7 diff --git a/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart b/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart index 81047097fd66..f87630ee3045 100644 --- a/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart +++ b/packages/url_launcher/url_launcher_platform_interface/lib/method_channel_url_launcher.dart @@ -27,14 +27,16 @@ class MethodChannelUrlLauncher extends UrlLauncherPlatform { } @override - Future launch(String url, - {@required bool useSafariVC, - @required bool useWebView, - @required bool enableJavaScript, - @required bool enableDomStorage, - @required bool universalLinksOnly, - @required Map headers, - String webOnlyLinkTarget}) { + Future launch( + String url, { + @required bool useSafariVC, + @required bool useWebView, + @required bool enableJavaScript, + @required bool enableDomStorage, + @required bool universalLinksOnly, + @required Map headers, + String webOnlyWindowName, + }) { return _channel.invokeMethod( 'launch', { diff --git a/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart b/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart index 2a0719740853..1de5742c1f6f 100644 --- a/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart +++ b/packages/url_launcher/url_launcher_platform_interface/lib/url_launcher_platform_interface.dart @@ -47,14 +47,16 @@ abstract class UrlLauncherPlatform extends PlatformInterface { /// /// For documentation on the other arguments, see the `launch` documentation /// in `package:url_launcher/url_launcher.dart`. - Future launch(String url, - {@required bool useSafariVC, - @required bool useWebView, - @required bool enableJavaScript, - @required bool enableDomStorage, - @required bool universalLinksOnly, - @required Map headers, - String webOnlyLinkTarget}) { + Future launch( + String url, { + @required bool useSafariVC, + @required bool useWebView, + @required bool enableJavaScript, + @required bool enableDomStorage, + @required bool universalLinksOnly, + @required Map headers, + String webOnlyWindowName, + }) { throw UnimplementedError('launch() has not been implemented.'); } diff --git a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart index 80266cac137b..ebd3497a856f 100644 --- a/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart +++ b/packages/url_launcher/url_launcher_web/lib/url_launcher_web.dart @@ -34,25 +34,20 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { UrlLauncherPlatform.instance = UrlLauncherPlugin(); } - String _getUrlScheme(String url) => - Uri - .tryParse(url) - ?.scheme; + String _getUrlScheme(String url) => Uri.tryParse(url)?.scheme; bool _isSafariTargetTopScheme(String url) => _safariTargetTopSchemes.contains(_getUrlScheme(url)); - /// Opens the given [url] in the specified [webOnlyLinkTarget]. + /// Opens the given [url] in the specified [webOnlyWindowName]. /// /// Returns the newly created window. @visibleForTesting - html.WindowBase openNewWindow(String url,{webOnlyLinkTarget} ) { + html.WindowBase openNewWindow(String url, {String webOnlyWindowName}) { // We need to open mailto, tel and sms urls on the _top window context on safari browsers. // See https://github.com/flutter/flutter/issues/51461 for reference. - final target = - browser.isSafari && _isSafariTargetTopScheme(url) - ? '_top' - : webOnlyLinkTarget ?? ""; + + final target = webOnlyWindowName ?? ((browser.isSafari && _isSafariTargetTopScheme(url)) ? '_top' : ''); return _window.open(url, target); } @@ -62,16 +57,16 @@ class UrlLauncherPlugin extends UrlLauncherPlatform { } @override - Future launch(String url, { + Future launch( + String url, { @required bool useSafariVC, @required bool useWebView, @required bool enableJavaScript, @required bool enableDomStorage, @required bool universalLinksOnly, @required Map headers, - String webOnlyLinkTarget, + String webOnlyWindowName, }) { - return Future.value( - openNewWindow(url,webOnlyLinkTarget: webOnlyLinkTarget) != null); + return Future.value(openNewWindow(url, webOnlyWindowName: webOnlyWindowName) != null); } } diff --git a/packages/url_launcher/url_launcher_web/pubspec.yaml b/packages/url_launcher/url_launcher_web/pubspec.yaml index 677eca8c741d..e344100577dd 100644 --- a/packages/url_launcher/url_launcher_web/pubspec.yaml +++ b/packages/url_launcher/url_launcher_web/pubspec.yaml @@ -18,7 +18,6 @@ dependencies: url: https://github.com/balvinderz/plugins ref: windowname path: packages/url_launcher/url_launcher_platform_interface - platform_detect: ^1.4.0 flutter: sdk: flutter @@ -30,10 +29,7 @@ dev_dependencies: flutter_test: sdk: flutter url_launcher: - git: - url: https://github.com/balvinderz/plugins - ref: windowname - path: packages/url_launcher/url_launcher + path: ../url_launcher pedantic: ^1.8.0 mockito: ^4.1.1