[url_launcher, url_launcher_web]Added webOnlyWindowName parameter to launch()  (#2979)

diff --git a/packages/url_launcher/url_launcher/CHANGELOG.md b/packages/url_launcher/url_launcher/CHANGELOG.md
index a536472..845fec7 100644
--- a/packages/url_launcher/url_launcher/CHANGELOG.md
+++ b/packages/url_launcher/url_launcher/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 5.5.1
+
+* Added webOnlyWindowName parameter to launch()
+
 ## 5.5.0
 
 * Support Linux by default.
diff --git a/packages/url_launcher/url_launcher/lib/url_launcher.dart b/packages/url_launcher/url_launcher/lib/url_launcher.dart
index 2ce725d..bc17106 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 @@
 /// [enableDomStorage] is an Android only setting. If true, WebView enable
 /// DOM storage.
 /// [headers] is an Android only setting that adds headers to the WebView.
+/// [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.
 ///
 /// 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 @@
   bool universalLinksOnly,
   Map<String, String> headers,
   Brightness statusBarBrightness,
+  String webOnlyWindowName,
 }) async {
   assert(urlString != null);
   final Uri url = Uri.parse(urlString.trimLeft());
@@ -93,6 +97,7 @@
     enableDomStorage: enableDomStorage ?? false,
     universalLinksOnly: universalLinksOnly ?? false,
     headers: headers ?? <String, String>{},
+    webOnlyWindowName: webOnlyWindowName,
   );
   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 299de93..a395522 100644
--- a/packages/url_launcher/url_launcher/pubspec.yaml
+++ b/packages/url_launcher/url_launcher/pubspec.yaml
@@ -2,7 +2,7 @@
 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:
diff --git a/packages/url_launcher/url_launcher_web/CHANGELOG.md b/packages/url_launcher/url_launcher_web/CHANGELOG.md
index ed80142..2f33ffb 100644
--- a/packages/url_launcher/url_launcher_web/CHANGELOG.md
+++ b/packages/url_launcher/url_launcher_web/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 0.1.3
+
+- Added webOnlyWindowName parameter to launch()
+
 # 0.1.2+1
 
 - Update docs
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 1bac4d5..da73cd8 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 @@
   bool _isSafariTargetTopScheme(String url) =>
       _safariTargetTopSchemes.contains(_getUrlScheme(url));
 
-  /// Opens the given [url] in a new window.
+  /// Opens the given [url] in the specified [webOnlyWindowName].
   ///
   /// Returns the newly created window.
   @visibleForTesting
-  html.WindowBase openNewWindow(String url) {
+  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' : '';
+    final target = webOnlyWindowName ??
+        ((browser.isSafari && _isSafariTargetTopScheme(url)) ? '_top' : '');
     return _window.open(url, target);
   }
 
@@ -65,7 +65,9 @@
     @required bool enableDomStorage,
     @required bool universalLinksOnly,
     @required Map<String, String> headers,
+    String webOnlyWindowName,
   }) {
-    return Future<bool>.value(openNewWindow(url) != null);
+    return Future<bool>.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 727b396..a77692d 100644
--- a/packages/url_launcher/url_launcher_web/pubspec.yaml
+++ b/packages/url_launcher/url_launcher_web/pubspec.yaml
@@ -4,7 +4,7 @@
 # 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+1
+version: 0.1.3
 
 flutter:
   plugin:
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 b7e107d..9cbaf68 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,6 +145,19 @@
 
         verify(mockWindow.open('sms:+19725551212?body=hello%20there', ''));
       });
+      test('setting oOnlyLinkTarget as _self opens the url in the same tab',
+          () {
+        plugin.openNewWindow("https://www.google.com",
+            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",
+            webOnlyWindowName: "_blank");
+        verify(mockWindow.open('https://www.google.com', '_blank'));
+      });
 
       group('Safari', () {
         setUp(() {
@@ -181,6 +194,13 @@
           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"));
+        });
       });
     });
   });