diff --git a/core/modules/block_content/src/BlockContentViewsData.php b/core/modules/block_content/src/BlockContentViewsData.php
new file mode 100644
index 0000000..66931a9
--- /dev/null
+++ b/core/modules/block_content/src/BlockContentViewsData.php
@@ -0,0 +1,209 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\block_content\BlockContentViewsData.
+ */
+
+namespace Drupal\block_content;
+
+use Drupal\views\EntityViewsData;
+
+/**
+ * Provides the views data for the block_content entity type.
+ */
+class BlockContentViewsData extends EntityViewsData {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getViewsData() {
+
+    $data = parent::getViewsData();
+
+    $data['block_content']['table']['wizard_id'] = 'block_content';
+
+    $data['block_content']['id']['field']['id'] = 'block_content';
+
+    $data['block_content_field_data']['info']['field']['id'] = 'block_content';
+    $data['block_content_field_data']['info']['field']['link_to_block_content default'] = TRUE;
+
+    $data['block_content_field_data']['type']['field']['id'] = 'block_content_type';
+
+    // @todo Figure out do we need this or not.
+    // $data['block_content_field_data']['langcode']['help'] = t('The language of the block content or translation.');
+    // $data['block_content_field_data']['langcode']['field']['id'] = 'block_content_language';
+
+    if (\Drupal::moduleHandler()->moduleExists('content_translation')) {
+      $data['block_content']['translation_link'] = array(
+        'title' => t('Translation link'),
+        'help' => t('Provide a link to the translations overview for custom blocks.'),
+        'field' => array(
+          'id' => 'content_translation_link',
+        ),
+      );
+    }
+
+    $data['block_content']['view_link'] = array(
+      'field' => array(
+        'title' => t('Link to block content'),
+        'help' => t('Provide a simple link to the block content.'),
+        'id' => 'block_content_link',
+      ),
+    );
+
+    $data['block_content']['edit_link'] = array(
+      'field' => array(
+        'title' => t('Link to edit block content'),
+        'help' => t('Provide a simple link to edit the block content.'),
+        'id' => 'block_content_edit_link',
+      ),
+    );
+
+    $data['block_content']['delete_link'] = array(
+      'field' => array(
+        'title' => t('Link to delete block content'),
+        'help' => t('Provide a simple link to delete the block content.'),
+        'id' => 'block_content_delete_link',
+      ),
+    );
+
+    $data['block_content']['path'] = array(
+      'field' => array(
+        'title' => t('Path'),
+        'help' => t('The aliased path to this block content.'),
+        'id' => 'block_content_path',
+      ),
+    );
+
+    // Bogus fields for aliasing purposes.
+
+    // @todo Add similar support to any date field
+    // @see https://drupal.org/node/2337507
+
+    $data['block_content_field_data']['changed_fulldate'] = array(
+      'title' => t('Updated date'),
+      'help' => t('Date in the form of CCYYMMDD.'),
+      'argument' => array(
+        'field' => 'changed',
+        'id' => 'date_fulldate',
+      ),
+    );
+
+    $data['block_content_field_data']['changed_year_month'] = array(
+      'title' => t('Updated year + month'),
+      'help' => t('Date in the form of YYYYMM.'),
+      'argument' => array(
+        'field' => 'changed',
+        'id' => 'date_year_month',
+      ),
+    );
+
+    $data['block_content_field_data']['changed_year'] = array(
+      'title' => t('Updated year'),
+      'help' => t('Date in the form of YYYY.'),
+      'argument' => array(
+        'field' => 'changed',
+        'id' => 'date_year',
+      ),
+    );
+
+    $data['block_content_field_data']['changed_month'] = array(
+      'title' => t('Updated month'),
+      'help' => t('Date in the form of MM (01 - 12).'),
+      'argument' => array(
+        'field' => 'changed',
+        'id' => 'date_month',
+      ),
+    );
+
+    $data['block_content_field_data']['changed_day'] = array(
+      'title' => t('Updated day'),
+      'help' => t('Date in the form of DD (01 - 31).'),
+      'argument' => array(
+        'field' => 'changed',
+        'id' => 'date_day',
+      ),
+    );
+
+    $data['block_content_field_data']['changed_week'] = array(
+      'title' => t('Updated week'),
+      'help' => t('Date in the form of WW (01 - 53).'),
+      'argument' => array(
+        'field' => 'changed',
+        'id' => 'date_week',
+      ),
+    );
+
+    $data['block_content_revision']['table']['wizard_id'] = 'block_content_revision';
+
+    // Advertise this table as a possible base table.
+    $data['block_content_revision']['table']['base']['help'] = t('Block Content revision is a history of changes to content.');
+    $data['block_content_revision']['table']['base']['defaults']['title'] = 'info';
+
+    // @todo the ID field needs different behaviour on revision/non-revision
+    //   tables. It would be neat if this could be encoded in the base field
+    //   definition.
+    $data['block_content_revision']['id']['relationship']['id'] = 'standard';
+    $data['block_content_revision']['id']['relationship']['base'] = 'block_content';
+    $data['block_content_revision']['id']['relationship']['base field'] = 'id';
+    $data['block_content_revision']['id']['relationship']['title'] = t('Block Content');
+    $data['block_content_revision']['id']['relationship']['label'] = t('Get the actual block content from a block content revision.');
+
+    $data['block_content_revision']['id']['relationship']['id'] = 'standard';
+    $data['block_content_revision']['id']['relationship']['base'] = 'block_content';
+    $data['block_content_revision']['id']['relationship']['base field'] = 'revision_id';
+    $data['block_content_revision']['id']['relationship']['title'] = t('Block Content');
+    $data['block_content_revision']['id']['relationship']['label'] = t('Get the actual block content from a block content revision.');
+
+    // @todo Figure out do we need this or not.
+    // $data['block_content_revision']['langcode']['field']['id'] = 'block_content_language';
+
+    $data['block_content_revision']['revision_log']['field']['id'] = 'xss';
+
+    $data['block_content_field_revision']['table']['wizard_id'] = 'block_content_field_revision';
+
+    $data['block_content_field_revision']['table']['join']['block_content']['left_field'] = 'revision_id';
+    $data['block_content_field_revision']['table']['join']['block_content']['field'] = 'revision_id';
+
+    // @todo Fix this when we support block content revision links.
+    // $data['block_content_field_revision']['info']['field']['id'] = 'block_content_revision';
+
+    // @todo Figure out do we need this or not.
+    // $data['block_content_field_revision']['langcode']['field']['id'] = 'block_content_language';
+
+    // @todo Fix this when we support block content revision links.
+    // $data['block_content_field_revision']['link_to_revision'] = array(
+    //   'field' => array(
+    //     'title' => t('Link to revision'),
+    //     'help' => t('Provide a simple link to the revision.'),
+    //     'id' => 'block_content_revision_link', //@todo
+    //     'click sortable' => FALSE,
+    //   ),
+    // );
+
+    // @todo Fix this when we support block content revision links.
+    // $data['block_content_field_revision']['revert_revision'] = array(
+    //   'field' => array(
+    //     'title' => t('Link to revert revision'),
+    //     'help' => t('Provide a simple link to revert to the revision.'),
+    //     'id' => 'block_content_revision_link_revert', //@todo
+    //     'click sortable' => FALSE,
+    //   ),
+    // );
+
+    // @todo Fix this when we support block content revision links.
+    // $data['block_content_field_revision']['delete_revision'] = array(
+    //   'field' => array(
+    //     'title' => t('Link to delete revision'),
+    //     'help' => t('Provide a simple link to delete the content revision.'),
+    //     'id' => 'block_content_revision_link_delete', //@todo
+    //     'click sortable' => FALSE,
+    //   ),
+    // );
+
+    return $data;
+
+  }
+
+}
diff --git a/core/modules/block_content/src/Entity/BlockContent.php b/core/modules/block_content/src/Entity/BlockContent.php
index 6b5736e..c7634fe 100644
--- a/core/modules/block_content/src/Entity/BlockContent.php
+++ b/core/modules/block_content/src/Entity/BlockContent.php
@@ -26,6 +26,7 @@
  *     "access" = "Drupal\block_content\BlockContentAccessControlHandler",
  *     "list_builder" = "Drupal\block_content\BlockContentListBuilder",
  *     "view_builder" = "Drupal\block_content\BlockContentViewBuilder",
+ *     "views_data" = "Drupal\block_content\BlockContentViewsData",
  *     "form" = {
  *       "add" = "Drupal\block_content\BlockContentForm",
  *       "edit" = "Drupal\block_content\BlockContentForm",
diff --git a/core/modules/block_content/src/Plugin/views/field/BlockContent.php b/core/modules/block_content/src/Plugin/views/field/BlockContent.php
new file mode 100644
index 0000000..8c1dd0c
--- /dev/null
+++ b/core/modules/block_content/src/Plugin/views/field/BlockContent.php
@@ -0,0 +1,107 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\block_content\Plugin\views\field\BlockContent.
+ */
+
+namespace Drupal\block_content\Plugin\views\field;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\views\ResultRow;
+use Drupal\views\ViewExecutable;
+use Drupal\views\Plugin\views\display\DisplayPluginBase;
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+
+/**
+ * Field handler to provide simple renderer that allows linking to a block_content.
+ * Definition terms:
+ * - link_to_block_content default: Should this field have the checkbox
+ *   "link to block_content" enabled by default.
+ *
+ * @ingroup views_field_handlers
+ *
+ * @ViewsField("block_content")
+ */
+class BlockContent extends FieldPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
+    parent::init($view, $display, $options);
+
+    // Don't add the additional fields to groupby
+    if (!empty($this->options['link_to_block_content'])) {
+      $this->additional_fields['id'] = array('table' => 'block_content', 'field' => 'id');
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function defineOptions() {
+    $options = parent::defineOptions();
+    $options['link_to_block_content'] = array('default' => isset($this->definition['link_to_block_content default']) ? $this->definition['link_to_block_content default'] : FALSE);
+    return $options;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
+    $form['link_to_block_content'] = array(
+      '#title' => $this->t('Link this field to the original piece of block content'),
+      '#description' => $this->t("Enable to override this field's links."),
+      '#type' => 'checkbox',
+      '#default_value' => !empty($this->options['link_to_block_content']),
+    );
+
+    parent::buildOptionsForm($form, $form_state);
+  }
+
+  /**
+   * Prepares link to the block_content.
+   *
+   * @param string $data
+   *   The XSS safe string for the link text.
+   * @param \Drupal\views\ResultRow $values
+   *   The values retrieved from a single row of a view's query result.
+   *
+   * @return string
+   *   Returns a string for the link text.
+   */
+  protected function renderLink($data, ResultRow $values) {
+    if (!empty($this->options['link_to_block_content']) && !empty($this->additional_fields['id'])) {
+      if ($data !== NULL && $data !== '') {
+        $id = $this->getValue($values, 'id');
+        $block_content = entity_load('block_content', $id);
+        $this->options['alter']['make_link'] = TRUE;
+        $this->options['alter']['path'] = $block_content->url();
+        if (isset($this->aliases['langcode'])) {
+          $languages = language_list();
+          $langcode = $this->getValue($values, 'langcode');
+          if (isset($languages[$langcode])) {
+            $this->options['alter']['language'] = $languages[$langcode];
+          }
+          else {
+            unset($this->options['alter']['language']);
+          }
+        }
+      }
+      else {
+        $this->options['alter']['make_link'] = FALSE;
+      }
+    }
+    return $data;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function render(ResultRow $values) {
+    $value = $this->getValue($values);
+    return $this->renderLink($this->sanitizeValue($value), $values);
+  }
+
+}
diff --git a/core/modules/block_content/src/Plugin/views/field/Link.php b/core/modules/block_content/src/Plugin/views/field/Link.php
new file mode 100644
index 0000000..8321704
--- /dev/null
+++ b/core/modules/block_content/src/Plugin/views/field/Link.php
@@ -0,0 +1,91 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\block_content\Plugin\views\field\Link.
+ */
+
+namespace Drupal\block_content\Plugin\views\field;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\views\ResultRow;
+
+/**
+ * Field handler to present a link to the block_content.
+ *
+ * @ingroup views_field_handlers
+ *
+ * @ViewsField("block_content_link")
+ */
+class Link extends FieldPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function usesGroupBy() {
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function defineOptions() {
+    $options = parent::defineOptions();
+    $options['text'] = array('default' => '');
+    return $options;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
+    $form['text'] = array(
+      '#type' => 'textfield',
+      '#title' => $this->t('Text to display'),
+      '#default_value' => $this->options['text'],
+    );
+    parent::buildOptionsForm($form, $form_state);
+
+    // The path is set by renderLink function so don't allow to set it.
+    $form['alter']['path'] = array('#access' => FALSE);
+    $form['alter']['external'] = array('#access' => FALSE);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    $this->addAdditionalFields();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function render(ResultRow $values) {
+    if ($entity = $this->getEntity($values)) {
+      return $this->renderLink($entity, $values);
+    }
+  }
+
+  /**
+   * Prepares the link to the block_content.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $block_content
+   *   The block_content entity this field belongs to.
+   * @param ResultRow $values
+   *   The values retrieved from the view's result set.
+   *
+   * @return string
+   *   Returns a string for the link text.
+   */
+  protected function renderLink($block_content, ResultRow $values) {
+    if ($block_content->access('view')) {
+      $this->options['alter']['make_link'] = TRUE;
+      $this->options['alter']['path'] = $block_content->url();
+      $text = !empty($this->options['text']) ? $this->options['text'] : $this->t('View');
+      return $text;
+    }
+  }
+
+}
diff --git a/core/modules/block_content/src/Plugin/views/field/LinkDelete.php b/core/modules/block_content/src/Plugin/views/field/LinkDelete.php
new file mode 100644
index 0000000..5d8a79f
--- /dev/null
+++ b/core/modules/block_content/src/Plugin/views/field/LinkDelete.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\block_content\Plugin\views\field\LinkDelete.
+ */
+
+namespace Drupal\block_content\Plugin\views\field;
+
+use Drupal\views\ResultRow;
+
+/**
+ * Field handler to present a link to delete a block_content.
+ *
+ * @ingroup views_field_handlers
+ *
+ * @ViewsField("block_content_link_delete")
+ */
+class LinkDelete extends Link {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function renderLink($block_content, ResultRow $values) {
+    // Ensure user has access to delete this block_content.
+    if (!$block_content->access('delete')) {
+      return;
+    }
+
+    $this->options['alter']['make_link'] = TRUE;
+    $this->options['alter']['path'] = $block_content->url('delete-form');
+    $this->options['alter']['query'] = drupal_get_destination();
+
+    $text = !empty($this->options['text']) ? $this->options['text'] : $this->t('Delete');
+    return $text;
+  }
+
+}
diff --git a/core/modules/block_content/src/Plugin/views/field/LinkEdit.php b/core/modules/block_content/src/Plugin/views/field/LinkEdit.php
new file mode 100644
index 0000000..1ab8e16
--- /dev/null
+++ b/core/modules/block_content/src/Plugin/views/field/LinkEdit.php
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\block_content\Plugin\views\field\LinkEdit.
+ */
+
+namespace Drupal\block_content\Plugin\views\field;
+
+use Drupal\views\ResultRow;
+
+/**
+ * Field handler to present a link block_content edit.
+ *
+ * @ingroup views_field_handlers
+ *
+ * @ViewsField("block_content_edit_link")
+ */
+class LinkEdit extends Link {
+
+  /**
+   * Prepares the link to the block_content.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $block_content
+   *   The block_content entity this field belongs to.
+   * @param ResultRow $values
+   *   The values retrieved from the view's result set.
+   *
+   * @return string
+   *   Returns a string for the link text.
+   */
+  protected function renderLink($block_content, ResultRow $values) {
+    // Ensure user has access to edit this block_content.
+    if (!$block_content->access('update')) {
+      return;
+    }
+
+    $this->options['alter']['make_link'] = TRUE;
+    $this->options['alter']['path'] = $block_content->url('edit-form');
+    $this->options['alter']['query'] = drupal_get_destination();
+
+    $text = !empty($this->options['text']) ? $this->options['text'] : $this->t('Edit');
+    return $text;
+  }
+
+}
diff --git a/core/modules/block_content/src/Plugin/views/field/Path.php b/core/modules/block_content/src/Plugin/views/field/Path.php
new file mode 100644
index 0000000..c257e18
--- /dev/null
+++ b/core/modules/block_content/src/Plugin/views/field/Path.php
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\block_content\Plugin\views\field\Path.
+ */
+
+namespace Drupal\block_content\Plugin\views\field;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\views\Plugin\views\display\DisplayPluginBase;
+use Drupal\views\ResultRow;
+use Drupal\views\ViewExecutable;
+
+/**
+ * Field handler to present the path to the block_content.
+ *
+ * @ingroup views_field_handlers
+ *
+ * @ViewsField("block_content_path")
+ */
+class Path extends FieldPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
+    parent::init($view, $display, $options);
+
+    $this->additional_fields['id'] = 'id';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function defineOptions() {
+    $options = parent::defineOptions();
+    $options['absolute'] = array('default' => FALSE);
+
+    return $options;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
+    parent::buildOptionsForm($form, $form_state);
+    $form['absolute'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t('Use absolute link (begins with "http://")'),
+      '#default_value' => $this->options['absolute'],
+      '#description' => $this->t('Enable this option to output an absolute link. Required if you want to use the path as a link destination (as in "output this field as a link" above).'),
+      '#fieldset' => 'alter',
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    $this->ensureMyTable();
+    $this->addAdditionalFields();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function render(ResultRow $values) {
+    $id = $this->getValue($values, 'id');
+    return \Drupal::url('entity.block_content.canonical', ['block_content' => $id], ['absolute' => $this->options['absolute']]);
+  }
+
+}
diff --git a/core/modules/block_content/src/Plugin/views/field/Type.php b/core/modules/block_content/src/Plugin/views/field/Type.php
new file mode 100644
index 0000000..1683c41
--- /dev/null
+++ b/core/modules/block_content/src/Plugin/views/field/Type.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\block_content\Plugin\views\field\Type.
+ */
+
+namespace Drupal\block_content\Plugin\views\field;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\views\ResultRow;
+
+/**
+ * Field handler to translate a block content type into its readable form.
+ *
+ * @ingroup views_field_handlers
+ *
+ * @ViewsField("block_content_type")
+ */
+class Type extends BlockContent {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function defineOptions() {
+    $options = parent::defineOptions();
+    $options['machine_name'] = array('default' => FALSE);
+
+    return $options;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
+    parent::buildOptionsForm($form, $form_state);
+
+    $form['machine_name'] = array(
+      '#title' => $this->t('Output machine name'),
+      '#description' => $this->t('Display field as the block content type machine name.'),
+      '#type' => 'checkbox',
+      '#default_value' => !empty($this->options['machine_name']),
+    );
+  }
+
+  /**
+   * Renders block content type as human readable name, unless using machine_name option.
+   */
+  function renderName($data, $values) {
+    if ($this->options['machine_name'] != 1 && $data !== NULL && $data !== '') {
+      $type = entity_load('block_content_type', $data);
+      return $type ? $this->t($this->sanitizeValue($type->label())) : '';
+    }
+    return $this->sanitizeValue($data);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function render(ResultRow $values) {
+    $value = $this->getValue($values);
+    return $this->renderLink($this->renderName($value, $values), $values);
+  }
+
+}
diff --git a/core/modules/block_content/src/Plugin/views/wizard/BlockContent.php b/core/modules/block_content/src/Plugin/views/wizard/BlockContent.php
new file mode 100644
index 0000000..d5ab851
--- /dev/null
+++ b/core/modules/block_content/src/Plugin/views/wizard/BlockContent.php
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\block_content\Plugin\views\wizard\BlockContent.
+ */
+
+namespace Drupal\block_content\Plugin\views\wizard;
+
+use Drupal\views\Plugin\views\wizard\WizardPluginBase;
+
+/**
+ * @todo: replace numbers with constants.
+ */
+
+/**
+ * Tests creating block_content views with the wizard.
+ *
+ * @ViewsWizard(
+ *   id = "block_content",
+ *   base_table = "block_content",
+ *   title = @Translation("Block Content")
+ * )
+ */
+class BlockContent extends WizardPluginBase {
+
+  /**
+   * Set the created column.
+   */
+  protected $createdColumn = 'block_content_field_data-changed';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function defaultDisplayOptions() {
+    $display_options = parent::defaultDisplayOptions();
+
+    // Add permission-based access control.
+    $display_options['access']['type'] = 'perm';
+
+    // Remove the default fields, since we are customizing them here.
+    unset($display_options['fields']);
+
+    /* Field: Block Content: Info */
+    $display_options['fields']['info']['id'] = 'info';
+    $display_options['fields']['info']['table'] = 'block_content_field_data';
+    $display_options['fields']['info']['field'] = 'info';
+    $display_options['fields']['info']['entity_type'] = 'block_content';
+    $display_options['fields']['info']['entity_field'] = 'info';
+    $display_options['fields']['info']['label'] = '';
+    $display_options['fields']['info']['alter']['alter_text'] = 0;
+    $display_options['fields']['info']['alter']['make_link'] = 0;
+    $display_options['fields']['info']['alter']['absolute'] = 0;
+    $display_options['fields']['info']['alter']['trim'] = 0;
+    $display_options['fields']['info']['alter']['word_boundary'] = 0;
+    $display_options['fields']['info']['alter']['ellipsis'] = 0;
+    $display_options['fields']['info']['alter']['strip_tags'] = 0;
+    $display_options['fields']['info']['alter']['html'] = 0;
+    $display_options['fields']['info']['hide_empty'] = 0;
+    $display_options['fields']['info']['empty_zero'] = 0;
+    $display_options['fields']['info']['link_to_block_content'] = 1;
+    $display_options['fields']['info']['plugin_id'] = 'block_content';
+
+    return $display_options;
+  }
+
+}
diff --git a/core/modules/block_content/src/Plugin/views/wizard/BlockContentRevision.php b/core/modules/block_content/src/Plugin/views/wizard/BlockContentRevision.php
new file mode 100644
index 0000000..f77cf70
--- /dev/null
+++ b/core/modules/block_content/src/Plugin/views/wizard/BlockContentRevision.php
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\block_content\Plugin\views\wizard\BlockContentRevision.
+ */
+
+namespace Drupal\block_content\Plugin\views\wizard;
+
+use Drupal\views\Plugin\views\wizard\WizardPluginBase;
+
+/**
+ * @todo: replace numbers with constants.
+ */
+
+/**
+ * Tests creating node revision views with the wizard.
+ *
+ * @ViewsWizard(
+ *   id = "block_content_revision",
+ *   base_table = "block_content_revision",
+ *   title = @Translation("Block Content revisions")
+ * )
+ */
+class BlockContentRevision extends WizardPluginBase {
+
+  /**
+   * Set the created column.
+   */
+  protected $createdColumn = 'block_content_field_revision-changed';
+
+  /**
+   * Overrides Drupal\views\Plugin\views\wizard\WizardPluginBase::defaultDisplayOptions().
+   */
+  protected function defaultDisplayOptions() {
+    $display_options = parent::defaultDisplayOptions();
+
+    // Add permission-based access control.
+    $display_options['access']['type'] = 'perm';
+    $display_options['access']['options']['perm'] = 'view revisions';
+
+    // Remove the default fields, since we are customizing them here.
+    unset($display_options['fields']);
+
+    /* Field: Content revision: Created date */
+    $display_options['fields']['changed']['id'] = 'changed';
+    $display_options['fields']['changed']['table'] = 'node_field_revision';
+    $display_options['fields']['changed']['field'] = 'changed';
+    $display_options['fields']['changed']['entity_type'] = 'node';
+    $display_options['fields']['changed']['entity_field'] = 'changed';
+    $display_options['fields']['changed']['alter']['alter_text'] = FALSE;
+    $display_options['fields']['changed']['alter']['make_link'] = FALSE;
+    $display_options['fields']['changed']['alter']['absolute'] = FALSE;
+    $display_options['fields']['changed']['alter']['trim'] = FALSE;
+    $display_options['fields']['changed']['alter']['word_boundary'] = FALSE;
+    $display_options['fields']['changed']['alter']['ellipsis'] = FALSE;
+    $display_options['fields']['changed']['alter']['strip_tags'] = FALSE;
+    $display_options['fields']['changed']['alter']['html'] = FALSE;
+    $display_options['fields']['changed']['hide_empty'] = FALSE;
+    $display_options['fields']['changed']['empty_zero'] = FALSE;
+    $display_options['fields']['changed']['plugin_id'] = 'date';
+
+    /* Field: Content revision: Title */
+    $display_options['fields']['info']['id'] = 'info';
+    $display_options['fields']['info']['table'] = 'block_content_field_revision';
+    $display_options['fields']['info']['field'] = 'info';
+    $display_options['fields']['info']['entity_type'] = 'block_content';
+    $display_options['fields']['info']['entity_field'] = 'info';
+    $display_options['fields']['info']['label'] = '';
+    $display_options['fields']['info']['alter']['alter_text'] = 0;
+    $display_options['fields']['info']['alter']['make_link'] = 0;
+    $display_options['fields']['info']['alter']['absolute'] = 0;
+    $display_options['fields']['info']['alter']['trim'] = 0;
+    $display_options['fields']['info']['alter']['word_boundary'] = 0;
+    $display_options['fields']['info']['alter']['ellipsis'] = 0;
+    $display_options['fields']['info']['alter']['strip_tags'] = 0;
+    $display_options['fields']['info']['alter']['html'] = 0;
+    $display_options['fields']['info']['hide_empty'] = 0;
+    $display_options['fields']['info']['empty_zero'] = 0;
+    // @todo Fix this when we support block content revision links.
+    // $display_options['fields']['info']['link_to_block_content'] = 0;
+    // $display_options['fields']['info']['link_to_block_content_revision'] = 1;
+    $display_options['fields']['info']['plugin_id'] = 'standard';
+
+    return $display_options;
+  }
+
+}
