code: function finalizeTransition(transition, newState) {
  
        try {
          log(transition.router, transition.sequence, "Resolved all models on destination route; finalizing transition.");
  
          var router = transition.router,
              handlerInfos = newState.handlerInfos,
              seq = transition.sequence;
  
          // Run all the necessary enter/setup/exit hooks
          setupContexts(router, newState, transition);
  
          // Check if a redirect occurred in enter/setup
          if (transition.isAborted) {
            // TODO: cleaner way? distinguish b/w targetHandlerInfos?
            router.state.handlerInfos = router.currentHandlerInfos;
            return Promise.reject(logAbort(transition));
          }
  
          updateURL(transition, newState, transition.intent.url);
  
          transition.isActive = false;
          router.activeTransition = null;
  
          trigger(router, router.currentHandlerInfos, true, ['didTransition']);
  
          if (router.didTransition) {
            router.didTransition(router.currentHandlerInfos);
          }
  
          log(router, transition.sequence, "TRANSITION COMPLETE.");
  
          // Resolve with the final handler.
          return handlerInfos[handlerInfos.length - 1].handler;
        } catch(e) {
          if (!((e instanceof TransitionAborted))) {
            //var erroneousHandler = handlerInfos.pop();
            var infos = transition.state.handlerInfos;
            transition.trigger(true, 'error', e, transition, infos[infos.length-1].handler);
            transition.abort();
          }
  
          throw e;
        }
      }
docs: @private
  
  Updates the URL (if necessary) and calls `setupContexts`
  to update the router's array of `currentHandlerInfos`.