saveDraft_(origin, evt) {
    var formText = /** @type {HTMLTextAreaElement} */
        (this.getElement().querySelector('textarea'));
    var subject = goog.dom.getElement(constants.ElementId.SUBJECT) ?
        goog.dom.getElement(constants.ElementId.SUBJECT).value :
        undefined;
    var signer = goog.dom.getElement(constants.ElementId.SIGNER_SELECT).value;
    this.actionExecutor_.execute(
        /** @type {!e2e.ext.messages.ApiRequest} */ ({
          action: constants.Actions.ENCRYPT_SIGN,
          content: formText.value,
          recipients: [signer],
          currentUser: signer
        }),
        this, goog.bind(function(encrypted) {
          var draft = e2e.openpgp.asciiArmor.markAsDraft(encrypted);
          // Inject the draft into website.
          var prompt = /** @type {e2e.ext.ui.Prompt} */ (this.getParent());
          var shouldSend = false;
          prompt.getHelperProxy().updateSelectedContent(
              draft, [], origin, shouldSend, goog.nullFunction,
              goog.bind(this.errorCallback_, this), subject);
        }, this), goog.bind(function(error) {
          if (error.messageId == 'promptNoEncryptionTarget') {
            var dialog = new dialogs.Generic(
                chrome.i18n.getMessage('promptNoEncryptionKeysFound'),
                function() {
                  goog.dispose(dialog);
                },
                dialogs.InputType.NONE);
            this.renderDialog(dialog);
          }

          // NOTE(radi): Errors are silenced here on purpose.
        }, this));
  }
Encrypts the current draft and persists it into the web application that
the user is interacting with.
@param {string} origin The web origin where the message was created.
@param {goog.events.Event} evt The event that triggers the saving of the
    draft.
@private