diff options
author | Vsevolod Kukol <sevoku@microsoft.com> | 2019-04-10 20:42:17 +0300 |
---|---|---|
committer | xamarin-jenkins <jo.shields+jenkins@xamarin.com> | 2019-04-11 11:44:27 +0300 |
commit | cd5774799d7016245c3d4d4f5ca17d7d1d0dfc48 (patch) | |
tree | f56f7256ce94d55b35f1445319bd0a63b4a6621f | |
parent | 4441acaf285551860975b3003ac71d269c7851ef (diff) |
[Mac] Fix leaking Proxy Credential Dialog
Fixes VSTS #844262
-rw-r--r-- | main/src/addins/MacPlatform/MacProxyCredentialProvider.cs | 102 |
1 files changed, 52 insertions, 50 deletions
diff --git a/main/src/addins/MacPlatform/MacProxyCredentialProvider.cs b/main/src/addins/MacPlatform/MacProxyCredentialProvider.cs index ad74568afa..437534b33e 100644 --- a/main/src/addins/MacPlatform/MacProxyCredentialProvider.cs +++ b/main/src/addins/MacPlatform/MacProxyCredentialProvider.cs @@ -115,56 +115,58 @@ namespace MonoDevelop.MacIntegration uri.Host ); - var alert = new NSAlert { - MessageText = GettextCatalog.GetString ("Credentials Required"), - InformativeText = message - }; - - var okButton = alert.AddButton (GettextCatalog.GetString ("OK")); - var cancelButton = alert.AddButton (GettextCatalog.GetString ("Cancel")); - - alert.Icon = NSApplication.SharedApplication.ApplicationIconImage; - - var view = new NSView (new CGRect (0, 0, 313, 91)); - - var usernameLabel = new NSTextField (new CGRect (17, 55, 71, 17)) { - Identifier = "usernameLabel", - StringValue = "Username:", - Alignment = NSTextAlignment.Right, - Editable = false, - Bordered = false, - DrawsBackground = false, - Bezeled = false, - Selectable = false, - }; - view.AddSubview (usernameLabel); - - var usernameInput = new NSTextField (new CGRect (93, 52, 200, 22)); - view.AddSubview (usernameInput); - - var passwordLabel = new NSTextField (new CGRect (22, 23, 66, 17)) { - StringValue = "Password:", - Alignment = NSTextAlignment.Right, - Editable = false, - Bordered = false, - DrawsBackground = false, - Bezeled = false, - Selectable = false, - }; - view.AddSubview (passwordLabel); - - var passwordInput = new NSSecureTextField (new CGRect (93, 20, 200, 22)); - view.AddSubview (passwordInput); - - alert.AccessoryView = view; - alert.Window.WeakDelegate = new PasswordAlertWindowDelegate (usernameInput, passwordInput, cancelButton, okButton); - alert.Window.InitialFirstResponder = usernameInput; - if (alert.RunModal () != NSAlertFirstButtonReturn) - return; - - var username = usernameInput.StringValue; - var password = passwordInput.StringValue; - result = new NetworkCredential (username, password); + using (var alert = new NSAlert ()) { + alert.MessageText = GettextCatalog.GetString ("Credentials Required"); + alert.InformativeText = message; + + var okButton = alert.AddButton (GettextCatalog.GetString ("OK")); + var cancelButton = alert.AddButton (GettextCatalog.GetString ("Cancel")); + + alert.Icon = NSApplication.SharedApplication.ApplicationIconImage; + + var view = new NSView (new CGRect (0, 0, 313, 91)); + + var usernameLabel = new NSTextField (new CGRect (17, 55, 71, 17)) { + Identifier = "usernameLabel", + StringValue = "Username:", + Alignment = NSTextAlignment.Right, + Editable = false, + Bordered = false, + DrawsBackground = false, + Bezeled = false, + Selectable = false, + }; + view.AddSubview (usernameLabel); + + var usernameInput = new NSTextField (new CGRect (93, 52, 200, 22)); + view.AddSubview (usernameInput); + + var passwordLabel = new NSTextField (new CGRect (22, 23, 66, 17)) { + StringValue = "Password:", + Alignment = NSTextAlignment.Right, + Editable = false, + Bordered = false, + DrawsBackground = false, + Bezeled = false, + Selectable = false, + }; + view.AddSubview (passwordLabel); + + var passwordInput = new NSSecureTextField (new CGRect (93, 20, 200, 22)); + view.AddSubview (passwordInput); + + using (var alertDelegate = new PasswordAlertWindowDelegate (usernameInput, passwordInput, cancelButton, okButton)) { + alert.AccessoryView = view; + alert.Window.WeakDelegate = alertDelegate; + alert.Window.InitialFirstResponder = usernameInput; + alert.Window.ReleasedWhenClosed = true; + if (alert.RunModal () == NSAlertFirstButtonReturn) { + var username = usernameInput.StringValue; + var password = passwordInput.StringValue; + result = new NetworkCredential (username, password); + } + } + } } }).Wait (); |