constructor(helperProxy, opt_isPopout) {
    super();

    /**
     * Executor for the End-to-End actions.
     * @type {!e2e.ext.actions.Executor}
     * @private
     */
    this.actionExecutor_ =
        new e2e.ext.actions.Executor(goog.bind(this.displayFailure_, this));

    /**
     * The End-to-End actions that the user can select in the prompt UI.
     * @type {!Array.<!Object.<constants.Actions,string>>}
     * @private
     */
    this.selectableActions_ = [
      {
        value: constants.Actions.ENCRYPT_SIGN,
        title: chrome.i18n.getMessage('promptEncryptSignTitle')
      },
      {
        value: constants.Actions.DECRYPT_VERIFY,
        title: chrome.i18n.getMessage('promptDecryptVerifyTitle')
      },
      {
        value: constants.Actions.IMPORT_KEY,
        title: chrome.i18n.getMessage('promptImportKeyTitle')
      },
      {
        value: constants.Actions.CONFIGURE_EXTENSION,
        title: chrome.i18n.getMessage('actionConfigureExtension')
      }
    ];

    /**
     * Content injected externally. Used for popout functionality and
     * provider-initiated actions.
     * @private
     * @type {?messages.BridgeMessageRequest}
     */
    this.injectedContent_ = null;

    /**
     * Is the prompt displayed in a popout window.
     * @type {boolean}
     */
    this.isPopout = Boolean(opt_isPopout);

    /**
     * Message listener bound to this object. Used by popouts.
     * @type {function(!Event): undefined}
     * @private
     */
    this.boundMessageListener_ = goog.nullFunction;

    /**
     * Currently attached panel.
     * @type {?panels.prompt.PanelBase}
     * @private
     */
    this.panel_ = null;

    /**
     * Helper proxy object.
     * @type {!e2e.ext.utils.HelperProxy}
     * @private
     */
    this.helperProxy_ = helperProxy;
  }
@param {!e2e.ext.utils.HelperProxy} helperProxy HelperProxy object used to
    communicate with the content script.
@param {boolean=} opt_isPopout Is the prompt displayed in a popout window.