cb = function(user) {
      if (user &&
          // If email already exists, user must first be signed in it to the
          // existing account on the internal Auth instance before the
          // credential is linked and merge conflict is triggered.
          !firebaseui.auth.storage.getPendingEmailCredential(self.getAppId())) {
        // Anonymous user eligible for upgrade detected.
        // Linking occurs on external Auth instance.
        // This could occur when anonymous user linking with redirect fails for
        // some reason.
        return /** @type {!goog.Promise<!firebase.auth.UserCredential>} */ (
            goog.Promise.resolve(self.getExternalAuth().getRedirectResult()
            .then(function(result) {
              // Should not happen in real life as this will only run when the
              // user is anonymous.
              return result;
             }, function(error) {
              // This will trigger account linking flow.
              if (error &&
                  error['code'] == 'auth/email-already-in-use' &&
                  error['email'] && error['credential']) {
                throw error;
              }
              return self.onUpgradeError(error);
            })));
      } else {
        // No eligible anonymous user detected on external instance.
        // Get redirect result from internal instance first.
        return goog.Promise.resolve(
            self.getAuth().getRedirectResult().then(function(result) {
              // Anonymous user could have successfully completed
              // linkWithRedirect.
              if (self.getConfig().autoUpgradeAnonymousUsers() &&
                  // No user signed in on internal instance.
                  !result['user'] &&
                  // Current non anonymous user available on external instance.
                  self.currentUser_ &&
                  !self.currentUser_['isAnonymous']) {
                // Return redirect result from external instance.
                return self.getExternalAuth().getRedirectResult();
              }
              // Return redirect result from internal instance.
              return result;
            }));
      }
    }
If sign-in succeeded, returns the signed in user. If sign-in was
unsuccessful, fails with an error. If no redirect operation was called,
returns a UserCredential with a null User.

@return {!goog.Promise<!firebase.auth.UserCredential>} a UserCredential
    from the redirect-based sign-in flow.