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);
        }