internal static Task <BrowserResult> Start(ExtendedBrowserOptions options, CancellationToken cancellationToken) { var tcs = new TaskCompletionSource <BrowserResult>(); // Create web view controller var browserController = new UINavigationController(new WKWebViewController(options, cancellationToken) { ModalPresentationStyle = UIModalPresentationStyle.FormSheet, }); browserController.PresentationController.Delegate = new DismissablePresentationControllerDelegate(); async void Callback(string response) { ActivityMediator.Instance.ActivityMessageReceived -= Callback; if (response == "UserCancel") { BrowserMediator.Instance.Cancel(); await browserController.DismissViewControllerAsync(true); // Close web view browserController.Dispose(); tcs.SetResult(Canceled()); } else if (response == "RestartFlow") { // Close existing await browserController.DismissViewControllerAsync(true); // Close web view browserController.Dispose(); // Launch new FindRootController().PresentViewController(browserController, true, null); } else { BrowserMediator.Instance.Success(); await browserController.DismissViewControllerAsync(true); // Close web view browserController.Dispose(); tcs.SetResult(Success(response)); } } ActivityMediator.Instance.ActivityMessageReceived += Callback; // Launch web view FindRootController().PresentViewController(browserController, true, null); return(tcs.Task); }