renderEncryptionKeys_() {
    return new goog.Promise(function(resolve, reject) {
      this.actionExecutor_.execute(
          /** @type {!e2e.ext.messages.ApiRequest} */ (
              {action: constants.Actions.LIST_KEYS, content: 'public'}),
          this, goog.bind(function(searchResult) {
            var providedRecipients = this.getContent().recipients || [];
            var intendedRecipients = [];
            var allAvailableRecipients = goog.object.getKeys(searchResult);
            var recipientsEmailMap =
                this.getRecipientsEmailMap_(allAvailableRecipients);
            goog.array.forEach(providedRecipients, function(recipient) {
              if (recipientsEmailMap.hasOwnProperty(recipient)) {
                goog.array.extend(
                    intendedRecipients, recipientsEmailMap[recipient]);
              }
            });
            this.chipHolder_ = new panels.ChipHolder(
                intendedRecipients, allAvailableRecipients,
                goog.bind(this.renderEncryptionPassphraseDialog_, this));
            this.addChild(this.chipHolder_, false);
            this.chipHolder_.decorate(
                goog.dom.getElement(constants.ElementId.CHIP_HOLDER));
            resolve();
          }, this), goog.bind(function(error) {
            this.chipHolder_ = new panels.ChipHolder(
                [], [],
                goog.bind(this.renderEncryptionPassphraseDialog_, this));
            this.addChild(this.chipHolder_, false);
            this.chipHolder_.decorate(
                goog.dom.getElement(constants.ElementId.CHIP_HOLDER));
            this.errorCallback_(error);
            resolve();
          }, this));
    }, this);
  }
Renders the available encryption keys in the UI.
@return {!goog.Promise} Promise resolved when the encryption keys have
    been successfully rendered. It's never rejected.
@private