protected virtual void OnProcessRequest(NavigationRequest request, Action <bool> requestCallback)
        {
            Guard.ArgumentNotNull(request, "request");
            Guard.ArgumentNotNull(requestCallback, "requestCallback");

            // if there is a pending request
            if (ActiveNavigationRequest != null)
            {
                NavigationService.CancelNavigation(ActiveNavigationRequest);
                ActiveNavigationRequest = null;
            }

            // we say we are navigating
            var _cancelEventArgs = new NavigatingCancelEventArgs(this, request);

            OnNavigating(_cancelEventArgs);

            // if not cancelled, then we go to our base class to check against the ISupportNavigation
            if (!_cancelEventArgs.Cancel)
            {
                NavigationService.ProcessNavigationLifecycle(request, this.CurrentNavigationLifecycleSupporter, this.CurrentNavigationViewLifecycleSupporter,
                                                             (b) =>
                {
                    if (b)
                    {
                        ActiveNavigationRequest = request;
                    }
                    else
                    {
                        requestCallback(b);
                    }
                },
                                                             () =>
                {
                    TransitionToNavigationState(Controls.NavigationState.Navigating);
                    requestCallback(true);
                });
            }
            else
            {
                requestCallback(false);
            }
        }