public static Task <LoginCompletedArgs> LoginFacebookAsync(this WebBrowser browser, Uri uri, string fbAppId, string extendedPermissions)
        {
            CurrentState = FacebookSDKState.Login;

            loginTaskCompletionSource = new TaskCompletionSource <LoginCompletedArgs>();

            onLoginCompleted = null;
            onLoginCompleted = (object sender, NavigationEventArgs e) =>
            {
                LoginCompletedArgs result;
                LoginNavigationCallBack(e, fbAppId, extendedPermissions, out result);
                if (result != null)
                {
                    browser.Navigated -= onLoginCompleted;
                    loginTaskCompletionSource.SetResult(result);
                }
            };

            onLoginFailed = null;
            onLoginFailed = (object sender, NavigationFailedEventArgs e) =>
            {
                browser.NavigationFailed -= onLoginFailed;
                loginTaskCompletionSource.SetResult(new LoginCompletedArgs(false));
            };

            browser.Navigated        += onLoginCompleted;
            browser.NavigationFailed += onLoginFailed;

            browser.Navigate(uri);

            return(loginTaskCompletionSource.Task);
        }
        public static Task <FeedCompletedArgs> FeedFacebookAsync(this WebBrowser browser, Uri uri)
        {
            CurrentState = FacebookSDKState.FeedDialog;

            feedTaskCompletionSource = new TaskCompletionSource <FeedCompletedArgs>();

            onFeedCompleted = null;
            onFeedCompleted = (object sender, NavigationEventArgs e) =>
            {
                FeedCompletedArgs result;
                FeedNavigationCallBack(e, out result);
                if (result != null)
                {
                    browser.Navigated -= onFeedCompleted;
                    feedTaskCompletionSource.SetResult(result);
                }
            };

            onFeedFailed = null;
            onFeedFailed = (object sender, NavigationFailedEventArgs e) =>
            {
                browser.NavigationFailed -= onFeedFailed;
                feedTaskCompletionSource.SetResult(new FeedCompletedArgs(false));
            };

            browser.Navigated        += onFeedCompleted;
            browser.NavigationFailed += onFeedFailed;

            browser.Navigate(uri);

            return(feedTaskCompletionSource.Task);
        }
        public static Task <AppRequestsCompletedArgs> AppRequestFacebookAsync(this WebBrowser browser, Uri uri)
        {
            CurrentState = FacebookSDKState.AppRequestDialog;

            appRequestTaskCompletionSource = new TaskCompletionSource <AppRequestsCompletedArgs>();

            onRequestCompleted = null;
            onRequestCompleted = (object sender, NavigationEventArgs e) =>
            {
                AppRequestsCompletedArgs result;
                RequestNavigationCallBack(e, out result);
                if (result != null)
                {
                    browser.Navigated -= onRequestCompleted;
                    appRequestTaskCompletionSource.SetResult(result);
                }
            };

            onRequestFailed = null;
            onRequestFailed = (object sender, NavigationFailedEventArgs e) =>
            {
                browser.NavigationFailed -= onRequestFailed;
                appRequestTaskCompletionSource.SetResult(new AppRequestsCompletedArgs(false));
            };

            browser.Navigated        += onRequestCompleted;
            browser.NavigationFailed += onRequestFailed;

            browser.Navigate(uri);

            return(appRequestTaskCompletionSource.Task);
        }