providerSigninFailedCallback = function(error) {
    // Removes the pending redirect status being set previously
    // if sign-in with redirect fails.
    firebaseui.auth.storage.removeRedirectStatus(app.getAppId());
    // TODO: align redirect and popup flow error handling for similar errors.
    // Ignore error if cancelled by the client.
    if (error['name'] && error['name'] == 'cancel') {
      return;
    }
    firebaseui.auth.log.error('signInWithRedirect: ' + error['code']);
    var errorMessage = firebaseui.auth.widget.handler.common.getErrorMessage(
          error);
    // If the page was previously blank because the 'nascar' screen is being
    // skipped, then the provider sign-in 'nascar' screen needs to be shown
    // along with the error message. Otherwise, the error message can simply
    // be added to the info bar.
    if (component.getPageId() == 'blank' &&
        app.getConfig().federatedProviderShouldImmediatelyRedirect()) {
      component.dispose();
      firebaseui.auth.widget.handler.handle(
          firebaseui.auth.widget.HandlerName.PROVIDER_SIGN_IN,
          app,
          container,
          errorMessage);
    } else {
      component.showInfoBar(errorMessage);
    }
  }
@param {!firebaseui.auth.AuthUI} app The current FirebaseUI instance whose
    configuration is used.
@param {!firebaseui.auth.ui.page.Base} component The current UI component.
@param {string} providerId The provider ID of the selected IdP.
@param {?string=} opt_email The optional email to try to sign in with.
@package