diff --git a/core/misc/icons/333333/grid.svg b/core/misc/icons/333333/grid.svg
new file mode 100644
index 0000000000..98ada644c6
--- /dev/null
+++ b/core/misc/icons/333333/grid.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#333333" d="M10.5 9h3a1.5 1.5 0 0 1 1.5 1.5v3a1.5 1.5 0 0 1-1.5 1.5h-3A1.5 1.5 0 0 1 9 13.5v-3A1.5 1.5 0 0 1 10.5 9zm-8 0h3A1.5 1.5 0 0 1 7 10.5v3A1.5 1.5 0 0 1 5.5 15h-3A1.5 1.5 0 0 1 1 13.5v-3A1.5 1.5 0 0 1 2.5 9zm8-8h3A1.5 1.5 0 0 1 15 2.5v3A1.5 1.5 0 0 1 13.5 7h-3A1.5 1.5 0 0 1 9 5.5v-3A1.5 1.5 0 0 1 10.5 1zm-8 0h3A1.5 1.5 0 0 1 7 2.5v3A1.5 1.5 0 0 1 5.5 7h-3A1.5 1.5 0 0 1 1 5.5v-3A1.5 1.5 0 0 1 2.5 1z"/></svg>
diff --git a/core/misc/icons/333333/table.svg b/core/misc/icons/333333/table.svg
new file mode 100644
index 0000000000..502bf1c142
--- /dev/null
+++ b/core/misc/icons/333333/table.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#333333" d="M7 15a1.5 1.5 0 0 1 0-3h7a1.5 1.5 0 0 1 0 3H7zm-4.5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zM7 9.5a1.5 1.5 0 0 1 0-3h7a1.5 1.5 0 0 1 0 3H7zm-4.5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zM7 4a1.5 1.5 0 0 1 0-3h7a1.5 1.5 0 0 1 0 3H7zM2.5 4a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"/></svg>
diff --git a/core/modules/media_library/config/install/views.view.media_library.yml b/core/modules/media_library/config/install/views.view.media_library.yml
index b33c865e98..5c14762aef 100644
--- a/core/modules/media_library/config/install/views.view.media_library.yml
+++ b/core/modules/media_library/config/install/views.view.media_library.yml
@@ -3,10 +3,12 @@ status: true
 dependencies:
   config:
     - core.entity_view_mode.media.media_library
+    - image.style.media_library
   enforced:
     module:
       - media_library
   module:
+    - image
     - media
     - media_library
     - user
@@ -72,7 +74,7 @@ display:
         type: default
         options:
           grouping: {  }
-          row_class: 'media-library-item js-media-library-item js-click-to-select'
+          row_class: 'media-library-item media-library-item--grid js-media-library-item js-click-to-select'
           default_row_class: true
       row:
         type: fields
@@ -532,6 +534,8 @@ display:
         filters: false
         filter_groups: false
         arguments: false
+        header: false
+        css_class: false
       display_description: ''
       access:
         type: perm
@@ -662,9 +666,271 @@ display:
           entity_type: media
           entity_field: bundle
           plugin_id: string
+      header:
+        display_link_grid:
+          id: display_link_grid
+          table: views
+          field: display_link
+          display_id: widget
+          label: 'Grid'
+          plugin_id: display_link
+          empty: true
+        display_link_table:
+          id: display_link_table
+          table: views
+          field: display_link
+          display_id: widget_table
+          label: 'Table'
+          plugin_id: display_link
+          empty: true
+      css_class: 'media-library-view js-media-library-view media-library-view--widget'
+    cache_metadata:
+      max-age: -1
+      contexts:
+        - 'languages:language_interface'
+        - url
+        - url.query_args
+        - 'url.query_args:sort_by'
+        - user.permissions
+      tags: {  }
+  widget_table:
+    display_plugin: page
+    id: widget_table
+    display_title: 'Widget (table)'
+    position: 3
+    display_options:
+      display_extenders: {  }
+      path: admin/content/media-widget-table
+      style:
+        type: table
+        options:
+          row_class: 'media-library-item media-library-item--table js-media-library-item js-click-to-select'
+          default_row_class: true
+      defaults:
+        style: false
+        row: false
+        fields: false
+        access: false
+        filters: false
+        filter_groups: false
+        arguments: false
+        header: false
+        css_class: false
+      row:
+        type: fields
+      fields:
+        media_library_select_form:
+          id: media_library_select_form
+          label: ''
+          table: media
+          field: media_library_select_form
+          relationship: none
+          entity_type: media
+          plugin_id: media_library_select_form
+          element_wrapper_class: js-click-to-select-checkbox
+          element_class: ''
+        thumbnail__target_id:
+          id: thumbnail__target_id
+          label: Thumbnail
+          table: media_field_data
+          field: thumbnail__target_id
+          relationship: none
+          type: image
+          entity_type: media
+          entity_field: thumbnail
+          plugin_id: field
+          settings:
+            image_style: media_library
+            image_link: ''
+        name:
+          id: name
+          label: Name
+          table: media_field_data
+          field: name
+          relationship: none
+          type: string
+          entity_type: media
+          entity_field: name
+          plugin_id: field
+          settings:
+            link_to_entity: false
+        uid:
+          id: uid
+          label: Author
+          table: media_field_revision
+          field: uid
+          relationship: none
+          type: entity_reference_label
+          entity_type: media
+          entity_field: uid
+          plugin_id: field
+          settings:
+            link: true
+        changed:
+          id: changed
+          label: Updated
+          table: media_field_data
+          field: changed
+          relationship: none
+          type: timestamp
+          entity_type: media
+          entity_field: changed
+          plugin_id: field
+          settings:
+            date_format: short
+            custom_date_format: ''
+            timezone: ''
+      access:
+        type: perm
+        options:
+          perm: 'view media'
+      filters:
+        status:
+          id: status
+          table: media_field_data
+          field: status
+          relationship: none
+          group_type: group
+          admin_label: ''
+          operator: '='
+          value: '1'
+          group: 1
+          exposed: false
+          expose:
+            operator_id: ''
+            label: ''
+            description: ''
+            use_operator: false
+            operator: ''
+            identifier: ''
+            required: false
+            remember: false
+            multiple: false
+            remember_roles:
+              authenticated: authenticated
+          is_grouped: false
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: true
+            widget: select
+            multiple: false
+            remember: false
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
+          entity_type: media
+          entity_field: status
+          plugin_id: boolean
+        name:
+          id: name
+          table: media_field_data
+          field: name
+          relationship: none
+          group_type: group
+          admin_label: ''
+          operator: contains
+          value: ''
+          group: 1
+          exposed: true
+          expose:
+            operator_id: name_op
+            label: Name
+            description: ''
+            use_operator: false
+            operator: name_op
+            identifier: name
+            required: false
+            remember: false
+            multiple: false
+            remember_roles:
+              authenticated: authenticated
+              anonymous: '0'
+              administrator: '0'
+          is_grouped: false
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: true
+            widget: select
+            multiple: false
+            remember: false
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
+          entity_type: media
+          entity_field: name
+          plugin_id: string
+      filter_groups:
+        operator: AND
+        groups:
+          1: AND
+      arguments:
+        bundle:
+          id: bundle
+          table: media_field_data
+          field: bundle
+          relationship: none
+          group_type: group
+          admin_label: ''
+          default_action: ignore
+          exception:
+            value: all
+            title_enable: false
+            title: All
+          title_enable: false
+          title: ''
+          default_argument_type: fixed
+          default_argument_options:
+            argument: ''
+          default_argument_skip_url: false
+          summary_options:
+            base_path: ''
+            count: true
+            items_per_page: 25
+            override: false
+          summary:
+            sort_order: asc
+            number_of_records: 0
+            format: default_summary
+          specify_validation: false
+          validate:
+            type: none
+            fail: 'not found'
+          validate_options: {  }
+          glossary: false
+          limit: 0
+          case: none
+          path_case: none
+          transform_dash: false
+          break_phrase: false
+          entity_type: media
+          entity_field: bundle
+          plugin_id: string
+      header:
+        display_link_grid:
+          id: display_link_grid
+          table: views
+          field: display_link
+          display_id: widget
+          label: 'Grid'
+          plugin_id: display_link
+          empty: true
+        display_link_table:
+          id: display_link_table
+          table: views
+          field: display_link
+          display_id: widget_table
+          label: 'Table'
+          plugin_id: display_link
+          empty: true
+      css_class: 'media-library-view js-media-library-view media-library-view--widget'
     cache_metadata:
       max-age: -1
       contexts:
+        - 'languages:language_content'
         - 'languages:language_interface'
         - url
         - url.query_args
diff --git a/core/modules/media_library/css/media_library.module.css b/core/modules/media_library/css/media_library.module.css
index 694c5b33e9..d5b69262c2 100644
--- a/core/modules/media_library/css/media_library.module.css
+++ b/core/modules/media_library/css/media_library.module.css
@@ -67,7 +67,7 @@
   width: 100%;
 }
 
-.media-library-view.view-display-id-widget .media-library-select-all {
+.media-library-view--widget .media-library-select-all {
   display: none;
 }
 
@@ -81,7 +81,7 @@
 
 /* @todo Remove or re-work in https://www.drupal.org/node/2985168 */
 .media-library-widget .media-library-item__name a,
-.media-library-view.view-display-id-widget .media-library-item__name a {
+.media-library-view--widget .media-library-item__name a {
   pointer-events: none;
 }
 
diff --git a/core/modules/media_library/css/media_library.theme.css b/core/modules/media_library/css/media_library.theme.css
index 02db7d1ec0..9e651f8281 100644
--- a/core/modules/media_library/css/media_library.theme.css
+++ b/core/modules/media_library/css/media_library.theme.css
@@ -17,7 +17,7 @@
   display: block;
   width: 600px;
   max-width: 20%;
-  margin: 0;
+  margin: 0; /* LTR */
   padding: 0;
   border-bottom: 1px solid #ccc;
   background-color: #e6e5e1;
@@ -58,9 +58,9 @@
 
 .media-library-menu__link.active {
   z-index: 1;
-  margin-right: -1px;
+  margin-right: -1px; /* LTR */
   color: #000;
-  border-right: 1px solid #fcfcfa;
+  border-right: 1px solid #fcfcfa; /* LTR */
   border-bottom: 1px solid #b3b2ad;
   background-color: #fff;
   box-shadow: 0 5px 5px -5px hsla(0, 0%, 0%, 0.3);
@@ -75,7 +75,7 @@
 .media-library-content {
   width: 100%;
   padding: 1em;
-  border-left: 1px solid #b3b2ad;
+  border-left: 1px solid #b3b2ad; /* LTR */
   outline: none;
 }
 [dir="rtl"] .media-library-content {
@@ -129,26 +129,17 @@
   align-self: center;
 }
 
-.media-library-views-form__header .form-item {
-  margin-right: 8px;
-}
-
-#drupal-modal .view-header {
-  margin: 16px 0;
+/* Generic media library view styles. */
+.media-library-select-all {
+  margin: 10px 0 10px 0;
 }
 
-.media-library-item {
-  justify-content: center;
-  width: 180px;
-  margin: 16px 16px 2px 2px;
-  transition: border-color 0.2s, color 0.2s, background 0.2s;
-  vertical-align: top;
-  border: 1px solid #dbdbdb;
-  background: #fff;
+.media-library-select-all input {
+  margin-right: 10px;
 }
 
-.media-library-view {
-  min-height: 300px;
+.media-library-views-form__header .form-item {
+  margin-right: 8px;
 }
 
 .media-library-view .form-actions {
@@ -161,40 +152,148 @@
   margin: 0.75em 0;
 }
 
-.media-library-item .field--name-thumbnail {
+/* Override the table display of the visually hidden labels so they won't take
+   up space. */
+.media-library-item label {
+  display: inline-block;
+}
+
+/* Media library widget view styles. */
+.media-library-wrapper .media-library-view {
+  position: relative;
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+}
+
+/* @todo Remove order and reorder the views header and filters via a views
+     template in https://www.drupal.org/project/drupal/issues/3035994 */
+.media-library-wrapper .view-header {
+  order: 2;
+  align-self: flex-end;
+  margin: 8px 0;
+  text-align: right; /* LTR */
+}
+[dir="rtl"] .media-library-wrapper .view-header {
+  text-align: left;
+}
+
+/* @todo Remove order and reorder the views header and filters via a views
+     template in https://www.drupal.org/project/drupal/issues/3035994 */
+.media-library-wrapper .media-library-view .view-filters {
+  order: 1;
+}
+
+.media-library-wrapper .media-library-view .button--primary {
+  position: absolute;
+  top: 0;
+  left: 0; /* LTR */
+}
+[dir="rtl"] .media-library-wrapper .media-library-view .button--primary {
+  right: 0;
+  left: auto;
+}
+
+/* @todo Remove order and reorder the views header and filters via a views
+     template in https://www.drupal.org/project/drupal/issues/3035994 */
+.media-library-wrapper .media-library-view .view-content {
+  flex: 0 0 100%;
+  order: 3;
+}
+
+/* @todo Remove order and reorder the views header and filters via a views
+     template in https://www.drupal.org/project/drupal/issues/3035994 */
+.media-library-wrapper .media-library-view .pager {
+  order: 4;
+}
+
+.media-library-wrapper .views-display-link {
+  margin: 0;
+  padding-left: 22px; /* LTR */
+  color: #333;
+  line-height: 16px;
+}
+[dir="rtl"] .media-library-wrapper .views-display-link {
+  padding-right: 22px;
+  padding-left: 0;
+}
+
+.media-library-wrapper .views-display-link-widget {
+  margin-right: 15px;
+  background: url(../../../misc/icons/333333/grid.svg) 0 0 no-repeat; /* LTR */
+}
+[dir="rtl"] .media-library-wrapper .views-display-link-widget {
+  background-position: right 0;
+}
+
+.media-library-wrapper .views-display-link-widget_table {
+  background: url(../../../misc/icons/333333/table.svg) 0 0 no-repeat; /* LTR */
+}
+[dir="rtl"] .media-library-wrapper .views-display-link-widget_table {
+  background-position: right 0;
+}
+
+/* Media library item grid styles. */
+.media-library-item--grid {
+  justify-content: center;
+  width: 180px;
+  margin: 2px 16px 16px 2px; /* LTR */
+  transition: border-color 0.2s, color 0.2s, background 0.2s;
+  vertical-align: top;
+  border: 1px solid #dbdbdb;
+  background: #fff;
+}
+[dir="rtl"] .media-library-item--grid {
+  margin: 2px 2px 16px 16px;
+}
+
+.media-library-item--grid .field--name-thumbnail {
   overflow: hidden;
   text-align: center;
   background-color: #ebebeb;
 }
 
-.media-library-item .field--name-thumbnail img {
+.media-library-item--grid .field--name-thumbnail img {
   height: 180px;
+
   object-fit: contain;
   object-position: center center;
 }
 
-.media-library-item.is-hover,
-.media-library-item.checked,
-.media-library-item.is-focus {
-  margin: 14px 14px 0 0;
+.media-library-item--grid.is-hover,
+.media-library-item--grid.checked,
+.media-library-item--grid.is-focus {
+  margin: 0 14px 14px 0; /* LTR */
   border-width: 3px;
   border-color: #40b6ff;
   border-radius: 3px;
 }
+[dir="rtl"] .media-library-item--grid.is-hover,
+[dir="rtl"] .media-library-item--grid.checked,
+[dir="rtl"] .media-library-item--grid.is-focus {
+  margin: 0 0 14px 14px;
+}
 
-.media-library-item.checked {
+.media-library-item--grid.checked {
   border-color: #0076c0;
 }
 
-.media-library-item .js-click-to-select-checkbox input {
+.media-library-item--grid .js-click-to-select-checkbox input {
   width: 30px;
   height: 30px;
 }
 
-.media-library-item .js-click-to-select-checkbox .form-item {
+.media-library-item--grid .js-click-to-select-checkbox .form-item {
   margin: 0;
 }
 
+/* Media library item table styles. */
+.media-library-item--table img {
+  max-width: 100px;
+  height: auto;
+}
+
+/* Media library entity view display styles. */
 .media-library-item__preview {
   padding-bottom: 34px;
 }
@@ -207,17 +306,6 @@
   font-style: italic;
 }
 
-.media-library-item .views-field-operations {
-  height: 30px;
-}
-
-.media-library-item .views-field-operations .dropbutton-wrapper {
-  position: absolute;
-  right: 5px;
-  bottom: 5px;
-  display: inline-block;
-}
-
 .media-library-item__attributes {
   position: absolute;
   bottom: 0;
@@ -244,8 +332,8 @@
 
 .media-library-item__attributes:hover .media-library-item__name a,
 .media-library-item__name a:focus,
-.media-library-item.is-focus .media-library-item__name a,
-.media-library-item.checked .media-library-item__name a {
+.media-library-item--grid.is-focus .media-library-item__name a,
+.media-library-item--grid.checked .media-library-item__name a {
   white-space: normal;
 }
 
@@ -259,34 +347,23 @@
   font-size: 12px;
 }
 
-.media-library-select-all {
-  margin: 10px 0 10px 0;
-}
-
-.media-library-select-all input {
-  margin-right: 10px;
-}
-
 .media-library-item--disabled {
   opacity: 0.5;
 }
 
-.media-library-selection {
-  margin-bottom: 1.5rem;
-}
-
+/* Media library widget styles. */
 .media-library-widget {
   position: relative;
 }
 
-.media-library-widget-empty-text {
-  margin-bottom: 0;
-}
-
 /* @todo Change to .media-library-open-button when styles are moved to the
      seven theme in https://www.drupal.org/project/drupal/issues/2980769 */
 .button.media-library-open-button {
-  margin-left: 0;
+  margin-left: 0; /* LTR */
+}
+[dir="rtl"] .button.media-library-open-button {
+  margin-right: 0;
+  margin-left: 1em;
 }
 
 .media-library-widget__toggle-weight {
@@ -295,18 +372,26 @@
   right: 5px;
 }
 
-.media-library-item .form-item {
+.media-library-selection {
+  margin-top: 1em;
+  margin-bottom: 0.5em;
+}
+
+/* Media library widget weight field styles. */
+.media-library-item--grid .form-item {
   margin: 0.75em;
 }
 
-.media-library-item .media-library-item__remove,
-.media-library-item .media-library-item__remove:hover,
-.media-library-item .media-library-item__remove:focus,
-.media-library-item .media-library-item__remove.button,
-.media-library-item .media-library-item__remove.button:disabled,
-.media-library-item .media-library-item__remove.button:disabled:active,
-.media-library-item .media-library-item__remove.button:hover,
-.media-library-item .media-library-item__remove.button:focus {
+/* Media library widget remove button styles. */
+.media-library-item__remove,
+.media-library-item__remove:hover,
+.media-library-item__remove:focus,
+.media-library-item__remove.button,
+.media-library-item__remove.button:first-child,
+.media-library-item__remove.button:disabled,
+.media-library-item__remove.button:disabled:active,
+.media-library-item__remove.button:hover,
+.media-library-item__remove.button:focus {
   position: absolute;
   z-index: 1;
   top: 0;
@@ -324,11 +409,11 @@
   text-shadow: none;
 }
 
-.media-library-item .media-library-item__remove:hover,
-.media-library-item .media-library-item__remove:focus,
-.media-library-item .media-library-item__remove.button:hover,
-.media-library-item .media-library-item__remove.button:focus,
-.media-library-item .media-library-item__remove.button:disabled:active {
+.media-library-item__remove:hover,
+.media-library-item__remove:focus,
+.media-library-item__remove.button:hover,
+.media-library-item__remove.button:focus,
+.media-library-item__remove.button:disabled:active {
   border-color: #40b6ff;
 }
 
@@ -364,7 +449,7 @@
   justify-content: center;
   align-items: center;
   width: 220px;
-  margin-right: 20px;
+  margin-right: 20px; /* LTR */
   background: #ebebeb;
 }
 [dir="rtl"] .media-library-add-form__preview {
@@ -374,20 +459,20 @@
 
 /* @todo Remove or re-work in https://www.drupal.org/node/2985168 */
 .media-library-widget .media-library-item__name a,
-.media-library-view.view-display-id-widget .media-library-item__name a {
+.media-library-view--widget .media-library-item__name a {
   text-decoration: none;
   color: black;
 }
 
 @media screen and (max-width: 600px) {
-  .media-library-item {
+  .media-library-item--grid {
     width: 150px;
   }
-  .media-library-item .field--name-thumbnail img {
+  .media-library-item--grid .field--name-thumbnail img {
     width: 150px;
     height: 150px;
   }
-  .media-library-item .views-field-operations .dropbutton-wrapper {
+  .media-library-item--grid .views-field-operations .dropbutton-wrapper {
     position: relative;
     right: 0;
     border: 0;
diff --git a/core/modules/media_library/js/media_library.ui.es6.js b/core/modules/media_library/js/media_library.ui.es6.js
index f0676d1013..eee0979531 100644
--- a/core/modules/media_library/js/media_library.ui.es6.js
+++ b/core/modules/media_library/js/media_library.ui.es6.js
@@ -140,6 +140,72 @@
     },
   };
 
+  /**
+   * Load media library displays through AJAX.
+   *
+   * Standard AJAX links (using the 'use-ajax' class) replace the entire library
+   * dialog. When navigating to a media library views display, we only want to
+   * load the changed views display content. This is not only more efficient,
+   * but also provides a more accessible user experience for screen readers.
+   *
+   * @type {Drupal~behavior}
+   *
+   * @prop {Drupal~behaviorAttach} attach
+   *   Attaches behavior to vertical tabs in the media library.
+   *
+   * @todo Remove when the AJAX system adds support for replacing a specific
+   *   selector via a link.
+   *   https://www.drupal.org/project/drupal/issues/3026636
+   */
+  Drupal.behaviors.MediaLibraryViewsDisplay = {
+    attach(context) {
+      $('.js-media-library-view-display-link', context)
+        .once('media-library-views-display-link')
+        .on('click', e => {
+          e.preventDefault();
+          e.stopPropagation();
+
+          const $link = $(e.currentTarget);
+          const displayAnnouncement = $link.data('ajax-display-announcement');
+          const loadingAnnouncement = $link.data('ajax-loading-announcement');
+
+          // Replace the library view.
+          const ajaxObject = Drupal.ajax({
+            wrapper: 'media-library-view',
+            url: e.currentTarget.href,
+            dialogType: 'ajax',
+            progress: {
+              type: 'fullscreen',
+              message: loadingAnnouncement || Drupal.t('Please wait...'),
+            },
+          });
+
+          // Override the AJAX success callback to announce the updated content
+          // to screen readers.
+          if (displayAnnouncement) {
+            const success = ajaxObject.success;
+            ajaxObject.success = function(response, status) {
+              success.bind(this)(response, status);
+              // The AJAX link replace the whole view, including the clicked
+              // link. Move the focus back to the clicked link when the view is
+              // replaced.
+              $(`#${$link.attr('id')}`).focus();
+              Drupal.announce(displayAnnouncement);
+            };
+          }
+
+          ajaxObject.execute();
+
+          // Announce the new view is being loaded to screen readers.
+          // @todo Replace custom announcement when
+          //   https://www.drupal.org/project/drupal/issues/2973140 is in.
+          if (loadingAnnouncement) {
+            Drupal.announce(loadingAnnouncement);
+          }
+        });
+    },
+  };
+
   /**
    * Update the media library selection when loaded or media items are selected.
    *
diff --git a/core/modules/media_library/js/media_library.ui.js b/core/modules/media_library/js/media_library.ui.js
index 4d3e916934..baaaac9271 100644
--- a/core/modules/media_library/js/media_library.ui.js
+++ b/core/modules/media_library/js/media_library.ui.js
@@ -75,6 +75,45 @@
     }
   };
 
+  Drupal.behaviors.MediaLibraryViewsDisplay = {
+    attach: function attach(context) {
+      $('.js-media-library-view-display-link', context).once('media-library-views-display-link').on('click', function (e) {
+        e.preventDefault();
+        e.stopPropagation();
+
+        var $link = $(e.currentTarget);
+        var displayAnnouncement = $link.data('ajax-display-announcement');
+        var loadingAnnouncement = $link.data('ajax-loading-announcement');
+
+        var ajaxObject = Drupal.ajax({
+          wrapper: 'media-library-view',
+          url: e.currentTarget.href,
+          dialogType: 'ajax',
+          progress: {
+            type: 'fullscreen',
+            message: loadingAnnouncement || Drupal.t('Please wait...')
+          }
+        });
+
+        if (displayAnnouncement) {
+          var success = ajaxObject.success;
+          ajaxObject.success = function (response, status) {
+            success.bind(this)(response, status);
+
+            $('#' + $link.attr('id')).focus();
+            Drupal.announce(displayAnnouncement);
+          };
+        }
+
+        ajaxObject.execute();
+
+        if (loadingAnnouncement) {
+          Drupal.announce(loadingAnnouncement);
+        }
+      });
+    }
+  };
+
   Drupal.behaviors.MediaLibraryItemSelection = {
     attach: function attach(context, settings) {
       var $form = $('.js-media-library-views-form', context);
diff --git a/core/modules/media_library/js/media_library.view.es6.js b/core/modules/media_library/js/media_library.view.es6.js
index 8bc7fc1c13..3e7ee438c2 100644
--- a/core/modules/media_library/js/media_library.view.es6.js
+++ b/core/modules/media_library/js/media_library.view.es6.js
@@ -16,7 +16,7 @@
         .once('media-library-item-hover')
         .on('mouseover mouseout', ({ currentTarget, type }) => {
           $(currentTarget)
-            .closest('.media-library-item')
+            .closest('.js-media-library-item')
             .toggleClass('is-hover', type === 'mouseover');
         });
     },
@@ -36,7 +36,7 @@
         .once('media-library-item-focus')
         .on('focus blur', ({ currentTarget, type }) => {
           $(currentTarget)
-            .closest('.media-library-item')
+            .closest('.js-media-library-item')
             .toggleClass('is-focus', type === 'focus');
         });
     },
@@ -55,14 +55,14 @@
       const $view = $('.js-media-library-view', context).once(
         'media-library-select-all',
       );
-      if ($view.length && $view.find('.media-library-item').length) {
+      if ($view.length && $view.find('.js-media-library-item').length) {
         const $checkbox = $(
           '<input type="checkbox" class="form-checkbox" />',
         ).on('click', ({ currentTarget }) => {
           // Toggle all checkboxes.
           const $checkboxes = $(currentTarget)
             .closest('.media-library-view')
-            .find('.media-library-item input[type="checkbox"]');
+            .find('.js-media-library-item input[type="checkbox"]');
           $checkboxes
             .prop('checked', $(currentTarget).prop('checked'))
             .trigger('change');
@@ -79,7 +79,7 @@
         ).text(Drupal.t('Select all media'));
         $label.prepend($checkbox);
         $view
-          .find('.media-library-item')
+          .find('.js-media-library-item')
           .first()
           .before($label);
       }
diff --git a/core/modules/media_library/js/media_library.view.js b/core/modules/media_library/js/media_library.view.js
index 73028f6af8..28cdad64eb 100644
--- a/core/modules/media_library/js/media_library.view.js
+++ b/core/modules/media_library/js/media_library.view.js
@@ -12,7 +12,7 @@
         var currentTarget = _ref.currentTarget,
             type = _ref.type;
 
-        $(currentTarget).closest('.media-library-item').toggleClass('is-hover', type === 'mouseover');
+        $(currentTarget).closest('.js-media-library-item').toggleClass('is-hover', type === 'mouseover');
       });
     }
   };
@@ -23,7 +23,7 @@
         var currentTarget = _ref2.currentTarget,
             type = _ref2.type;
 
-        $(currentTarget).closest('.media-library-item').toggleClass('is-focus', type === 'focus');
+        $(currentTarget).closest('.js-media-library-item').toggleClass('is-focus', type === 'focus');
       });
     }
   };
@@ -31,11 +31,11 @@
   Drupal.behaviors.MediaLibrarySelectAll = {
     attach: function attach(context) {
       var $view = $('.js-media-library-view', context).once('media-library-select-all');
-      if ($view.length && $view.find('.media-library-item').length) {
+      if ($view.length && $view.find('.js-media-library-item').length) {
         var $checkbox = $('<input type="checkbox" class="form-checkbox" />').on('click', function (_ref3) {
           var currentTarget = _ref3.currentTarget;
 
-          var $checkboxes = $(currentTarget).closest('.media-library-view').find('.media-library-item input[type="checkbox"]');
+          var $checkboxes = $(currentTarget).closest('.media-library-view').find('.js-media-library-item input[type="checkbox"]');
           $checkboxes.prop('checked', $(currentTarget).prop('checked')).trigger('change');
 
           var announcement = $(currentTarget).prop('checked') ? Drupal.t('Zero items selected') : Drupal.t('All @count items selected', {
@@ -45,7 +45,7 @@
         });
         var $label = $('<label class="media-library-select-all"></label>').text(Drupal.t('Select all media'));
         $label.prepend($checkbox);
-        $view.find('.media-library-item').first().before($label);
+        $view.find('.js-media-library-item').first().before($label);
       }
     }
   };
diff --git a/core/modules/media_library/media_library.libraries.yml b/core/modules/media_library/media_library.libraries.yml
index 40cab695c0..6b339b01a2 100644
--- a/core/modules/media_library/media_library.libraries.yml
+++ b/core/modules/media_library/media_library.libraries.yml
@@ -37,5 +37,6 @@ ui:
     js/media_library.ui.js: {}
   dependencies:
     - core/drupal.ajax
+    - core/drupal.announce
     - core/jquery.once
     - media_library/view
diff --git a/core/modules/media_library/media_library.module b/core/modules/media_library/media_library.module
index ac4db0a4d6..81dd4e0434 100644
--- a/core/modules/media_library/media_library.module
+++ b/core/modules/media_library/media_library.module
@@ -63,14 +63,62 @@ function media_library_theme() {
   ];
 }
 
+/**
+ * Implements hook_preprocess_container().
+ */
+function media_library_preprocess_container(&$variables) {
+  // We need to set an ID on the views element container for the widget displays
+  // of the media library view, to allow the display links in the header area to
+  // load via AJAX.
+  // @see Drupal.behaviors.MediaLibraryViewsDisplay
+  // @see \Drupal\views\Element\View::preRenderViewElement()
+  if (isset($variables['element']['#view_id']) && $variables['element']['#view_id'] === 'media_library' && strpos($variables['element']['#display_id'], 'widget') === 0) {
+    $variables['attributes']['id'] = 'media-library-view';
+  }
+}
+
+/**
+ * Implements hook_link_alter().
+ */
+function media_library_link_alter(&$variables) {
+  $options = &$variables['options'];
+  // The only way to find the display links is through the options set on the
+  // link in DisplayLink::render().
+  // @see \Drupal\views\Plugin\views\area\DisplayLink::render()
+  $is_view_display_link = isset($options['view'], $options['target_display_id']);
+  if ($is_view_display_link && $options['view']->id() === 'media_library' && strpos($options['view']->current_display, 'widget') === 0) {
+    $options['attributes']['class'][] = 'js-media-library-view-display-link';
+
+    // The AJAX link replace the whole view, including the clicked link. After
+    // the page is updated with the new view, the focus needs to be returned to
+    // the clicked link, so we add an ID to target the link.
+    // @see Drupal.behaviors.MediaLibraryViewsDisplay
+    $options['attributes']['id'] = 'views-media-library-display-link-' . $options['target_display_id'];
+
+    // Add announcements for screen readers in a data attribute so they can be
+    // announced when the AJAX content had loaded.
+    // @see Drupal.behaviors.MediaLibraryViewsDisplay
+    // @todo Replace the custom announcements when
+    //   https://www.drupal.org/project/drupal/issues/2973140 is in.
+    if ($options['target_display_id'] === 'widget') {
+      $options['attributes']['data-ajax-display-announcement'] = t('Changed to grid view.');
+      $options['attributes']['data-ajax-loading-announcement'] = t('Loading grid view.');
+    }
+    elseif ($options['target_display_id'] === 'widget_table') {
+      $options['attributes']['data-ajax-display-announcement'] = t('Changed to table view.');
+      $options['attributes']['data-ajax-loading-announcement'] = t('Loading table view.');
+    }
+  }
+}
+
 /**
  * Implements hook_views_post_render().
  */
 function media_library_views_post_render(ViewExecutable $view, &$output, CachePluginBase $cache) {
   if ($view->id() === 'media_library') {
     $output['#attached']['library'][] = 'media_library/view';
-    if ($view->current_display === 'widget') {
-      $query = MediaLibraryState::fromRequest(\Drupal::request())->all();
+    if (strpos($view->current_display, 'widget') === 0) {
+      $query = MediaLibraryState::fromRequest($view->getRequest())->all();
       // If the current query contains any parameters we use to contextually
       // filter the view, ensure they persist across AJAX rebuilds.
       // The ajax_path is shared for all AJAX views on the page, but our query
@@ -81,9 +129,6 @@ function media_library_views_post_render(ViewExecutable $view, &$output, CachePl
         $parsed_url = UrlHelper::parse($ajax_path);
         $query = array_merge($query, $parsed_url['query']);
         $ajax_path = $parsed_url['path'] . '?' . UrlHelper::buildQuery($query);
-        if (isset($query['media_library_remaining'])) {
-          $output['#attached']['drupalSettings']['media_library']['selection_remaining'] = (int) $query['media_library_remaining'];
-        }
       }
     }
   }
@@ -148,7 +193,7 @@ function media_library_form_alter(array &$form, FormStateInterface $form_state,
   }
 
   // Add after build to fix media library views exposed filter's submit button.
-  if ($form_id === 'views_exposed_form' && $form['#id'] === 'views-exposed-form-media-library-widget') {
+  if ($form_id === 'views_exposed_form' && strpos($form['#id'], 'views-exposed-form-media-library-widget') === 0) {
     $form['#after_build'][] = '_media_library_views_form_media_library_after_build';
   }
 
diff --git a/core/modules/media_library/media_library.post_update.php b/core/modules/media_library/media_library.post_update.php
index 48f2820abb..8f999331a4 100644
--- a/core/modules/media_library/media_library.post_update.php
+++ b/core/modules/media_library/media_library.post_update.php
@@ -6,6 +6,7 @@
  */
 
 use Drupal\media\Entity\MediaType;
+use Drupal\views\Views;
 
 /**
  * Create and configure Media Library form and view displays for media types.
@@ -28,3 +29,159 @@ function media_library_post_update_display_modes() {
     ]);
   }
 }
+
+/**
+ * Add a table display to the media library view and link grid/table displays.
+ */
+function media_library_post_update_table_display() {
+  $view = Views::getView('media_library');
+
+  if (!$view) {
+    return t('The media_library view could not be updated because it has been deleted. The media library module needs this view to display correctly. Uninstall and reinstall the module so the view will be re-created.');
+  }
+
+  // Override CSS classes to allow targeting grid displays.
+  $view->setDisplay('default');
+  $default_display = $view->getDisplay('default');
+  $style = $default_display->getOption('style');
+  $style['options']['row_class'] = 'media-library-item media-library-item--grid js-media-library-item js-click-to-select';
+  $default_display->setOption('style', $style);
+
+  // Override CSS classes to allow targeting widget displays.
+  $view->setDisplay('widget');
+  $grid_display = $view->getDisplay('widget');
+  $grid_display->overrideOption('css_class', 'media-library-view js-media-library-view media-library-view--widget');
+
+  // Create the new table display.
+  $table_display = $view->newDisplay('page', 'Widget (table)', 'widget_table');
+  $table_display->setOption('path', 'admin/content/media-widget-table');
+
+  // Override CSS classes to allow targeting widget displays.
+  $table_display->overrideOption('css_class', 'media-library-view js-media-library-view media-library-view--widget');
+
+  // Set table as the display style.
+  $table_display->overrideOption('style', [
+    'type' => 'table',
+    'options' => [
+      'row_class' => 'media-library-item media-library-item--table js-media-library-item js-click-to-select',
+      'default_row_class' => TRUE,
+    ],
+  ]);
+
+  // Set fields for table display.
+  $table_display->overrideOption('row', [
+    'type' => 'fields',
+  ]);
+  $table_display->overrideOption('fields', [
+    'media_library_select_form' => [
+      'id' => 'media_library_select_form',
+      'label' => '',
+      'table' => 'media',
+      'field' => 'media_library_select_form',
+      'relationship' => 'none',
+      'entity_type' => 'media',
+      'plugin_id' => 'media_library_select_form',
+      'element_wrapper_class' => 'js-click-to-select-checkbox',
+      'element_class' => '',
+    ],
+    'thumbnail__target_id' => [
+      'id' => 'thumbnail__target_id',
+      'label' => 'Thumbnail',
+      'table' => 'media_field_data',
+      'field' => 'thumbnail__target_id',
+      'relationship' => 'none',
+      'type' => 'image',
+      'entity_type' => 'media',
+      'entity_field' => 'thumbnail',
+      'plugin_id' => 'field',
+      'settings' => [
+        'image_style' => 'media_library',
+        'image_link' => '',
+      ],
+    ],
+    'name' => [
+      'id' => 'name',
+      'label' => 'Name',
+      'table' => 'media_field_data',
+      'field' => 'name',
+      'relationship' => 'none',
+      'type' => 'string',
+      'entity_type' => 'media',
+      'entity_field' => 'name',
+      'plugin_id' => 'field',
+      'settings' => [
+        'link_to_entity' => FALSE,
+      ],
+    ],
+    'uid' => [
+      'id' => 'uid',
+      'label' => 'Author',
+      'table' => 'media_field_revision',
+      'field' => 'uid',
+      'relationship' => 'none',
+      'type' => 'entity_reference_label',
+      'entity_type' => 'media',
+      'entity_field' => 'uid',
+      'plugin_id' => 'field',
+      'settings' => [
+        'link' => TRUE,
+      ],
+    ],
+    'changed' => [
+      'id' => 'changed',
+      'label' => 'Updated',
+      'table' => 'media_field_data',
+      'field' => 'changed',
+      'relationship' => 'none',
+      'type' => 'timestamp',
+      'entity_type' => 'media',
+      'entity_field' => 'changed',
+      'plugin_id' => 'field',
+      'settings' => [
+        'date_format' => 'short',
+        'custom_date_format' => '',
+        'timezone' => '',
+      ],
+    ],
+  ]);
+
+  // Override the table display options in the same way as the grid display.
+  $table_display->overrideOption('access', $grid_display->getOption('access'));
+  $table_display->overrideOption('filters', $grid_display->getOption('filters'));
+  $table_display->overrideOption('arguments', $grid_display->getOption('arguments'));
+
+  // Also override the sorts and pager if the grid display has overrides.
+  $defaults = $grid_display->getOption('defaults');
+  if (isset($defaults['sorts']) && !$defaults['sorts']) {
+    $table_display->overrideOption('sorts', $grid_display->getOption('sorts'));
+  }
+  if (isset($defaults['pager']) && !$defaults['pager']) {
+    $table_display->overrideOption('pager', $grid_display->getOption('pager'));
+  }
+
+  // Add display links to both widget and widget table displays.
+  $display_links = [
+    'display_link_grid' => [
+      'id' => 'display_link_grid',
+      'table' => 'views',
+      'field' => 'display_link',
+      'display_id' => 'widget',
+      'label' => 'Grid',
+      'plugin_id' => 'display_link',
+      'empty' => TRUE,
+    ],
+    'display_link_table' => [
+      'id' => 'display_link_table',
+      'table' => 'views',
+      'field' => 'display_link',
+      'display_id' => 'widget_table',
+      'label' => 'Table',
+      'plugin_id' => 'display_link',
+      'empty' => TRUE,
+    ],
+  ];
+  $grid_display->overrideOption('header', $display_links);
+  $table_display->overrideOption('header', $display_links);
+
+  $view->save();
+}
diff --git a/core/modules/media_library/src/MediaLibraryUiBuilder.php b/core/modules/media_library/src/MediaLibraryUiBuilder.php
index 4359e0b0e4..7cd3619967 100644
--- a/core/modules/media_library/src/MediaLibraryUiBuilder.php
+++ b/core/modules/media_library/src/MediaLibraryUiBuilder.php
@@ -117,8 +117,16 @@ public function buildUi(MediaLibraryState $state = NULL) {
         ],
         'menu' => $this->buildMediaTypeMenu($state),
         'content' => $this->buildLibraryContent($state),
+        // Attach the JavaScript for the media library UI. The number of
+        // available slots needs to be added to make sure users can't select
+        // more items than allowed.
         '#attached' => [
           'library' => ['media_library/ui'],
+          'drupalSettings' => [
+            'media_library' => [
+              'selection_remaining' => $state->getAvailableSlots(),
+            ],
+          ],
         ],
       ];
     }
@@ -290,6 +298,12 @@ protected function buildMediaLibraryView(MediaLibraryState $state) {
     $view_executable = $this->viewsExecutableFactory->get($view);
     $display_id = 'widget';
 
+    // Make sure the state parameters are set in the request so the view can
+    // pass the parameters along in the pager, filters etc.
+    $view_request = $view_executable->getRequest();
+    $view_request->query->add($state->all());
+    $view_executable->setRequest($view_request);
+
     $args = [$state->getSelectedTypeId()];
 
     $view_executable->setDisplay($display_id);
diff --git a/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php b/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
index 530b675fff..e8ad3b1f29 100644
--- a/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
+++ b/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
@@ -328,6 +328,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
         '#attributes' => [
           'class' => [
             'media-library-item',
+            'media-library-item--grid',
             'js-media-library-item',
           ],
         ],
diff --git a/core/modules/media_library/src/Plugin/views/field/MediaLibrarySelectForm.php b/core/modules/media_library/src/Plugin/views/field/MediaLibrarySelectForm.php
index 5660e43f4a..ab2fe35bae 100644
--- a/core/modules/media_library/src/Plugin/views/field/MediaLibrarySelectForm.php
+++ b/core/modules/media_library/src/Plugin/views/field/MediaLibrarySelectForm.php
@@ -53,6 +53,9 @@ public function viewsForm(array &$form, FormStateInterface $form_state) {
       'class' => ['media-library-views-form', 'js-media-library-views-form'],
     ];
 
+    // Add the view to the form state.
+    $form_state->set('view', $this->view);
+
     // Render checkboxes for all rows.
     $form[$this->options['id']]['#tree'] = TRUE;
     foreach ($this->view->result as $row_index => $row) {
@@ -83,7 +86,7 @@ public function viewsForm(array &$form, FormStateInterface $form_state) {
     // not the form action. This causes bugs when this form is rendered from an
     // AJAX path like /views/ajax, which cannot process AJAX form submits.
     $url = parse_url($form['#action'], PHP_URL_PATH);
-    $query = \Drupal::request()->query->all();
+    $query = $this->view->getRequest()->query->all();
     $query[FormBuilderInterface::AJAX_FORM_REQUEST] = TRUE;
     $form['actions']['submit']['#ajax'] = [
       'url' => Url::fromUserInput($url),
@@ -120,7 +123,7 @@ public static function updateWidget(array &$form, FormStateInterface $form_state
 
     $ids = implode(',', $selected);
 
-    $opener_id = MediaLibraryState::fromRequest(\Drupal::request())->getOpenerId();
+    $opener_id = MediaLibraryState::fromRequest($form_state->get('view')->getRequest())->getOpenerId();
     if ($field_id = MediaLibraryWidget::getOpenerFieldId($opener_id)) {
       $response
         ->addCommand(new InvokeCommand("[data-media-library-widget-value=\"$field_id\"]", 'val', [$ids]))
diff --git a/core/modules/media_library/tests/fixtures/update/drupal-8.media_library-update-form-view-displays-2988433.php b/core/modules/media_library/tests/fixtures/update/drupal-8.media_library-update-form-view-displays-2988433.php
index c5bb097a75..826200d96c 100644
--- a/core/modules/media_library/tests/fixtures/update/drupal-8.media_library-update-form-view-displays-2988433.php
+++ b/core/modules/media_library/tests/fixtures/update/drupal-8.media_library-update-form-view-displays-2988433.php
@@ -57,4 +57,24 @@
     'name' => 'core.entity_view_mode.media.media_library',
     'data' => 'a:9:{s:4:"uuid";s:36:"aa86ec5c-3c36-44c5-b5b5-ade8bba3f549";s:8:"langcode";s:2:"en";s:6:"status";b:1;s:12:"dependencies";a:2:{s:8:"enforced";a:1:{s:6:"module";a:1:{i:0;s:13:"media_library";}}s:6:"module";a:1:{i:0;s:5:"media";}}s:5:"_core";a:1:{s:19:"default_config_hash";s:43:"pkq0uj-IoqEQRBOP_ddUDV0ZJ-dKQ_fLcppsEDF2UO8";}s:2:"id";s:19:"media.media_library";s:5:"label";s:13:"Media library";s:16:"targetEntityType";s:5:"media";s:5:"cache";b:1;}',
   ])
+  ->values(array(
+    'collection' => '',
+    'name' => 'views.view.media_library',
+    'data' => 'a:14:{s:4:"uuid";s:36:"3bc9cf0f-cb66-4dbe-8d7e-862cb85e5932";s:8:"langcode";s:2:"en";s:6:"status";b:1;s:12:"dependencies";a:3:{s:6:"config";a:1:{i:0;s:41:"core.entity_view_mode.media.media_library";}s:8:"enforced";a:1:{s:6:"module";a:1:{i:0;s:13:"media_library";}}s:6:"module";a:3:{i:0;s:5:"media";i:1;s:13:"media_library";i:2;s:4:"user";}}s:5:"_core";a:1:{s:19:"default_config_hash";s:43:"1F1cSZ5MlvxdwjdyrwnH2I8CWngOp8Pu2SXDzix2QUc";}s:2:"id";s:13:"media_library";s:5:"label";s:13:"Media library";s:6:"module";s:5:"views";s:11:"description";s:0:"";s:3:"tag";s:0:"";s:10:"base_table";s:16:"media_field_data";s:10:"base_field";s:3:"mid";s:4:"core";s:3:"8.x";s:7:"display";a:3:{s:7:"default";a:6:{s:14:"display_plugin";s:7:"default";s:2:"id";s:7:"default";s:13:"display_title";s:6:"Master";s:8:"position";i:0;s:15:"display_options";a:18:{s:6:"access";a:2:{s:4:"type";s:4:"perm";s:7:"options";a:1:{s:4:"perm";s:21:"access media overview";}}s:5:"cache";a:2:{s:4:"type";s:3:"tag";s:7:"options";a:0:{}}s:5:"query";a:2:{s:4:"type";s:11:"views_query";s:7:"options";a:5:{s:19:"disable_sql_rewrite";b:0;s:8:"distinct";b:0;s:7:"replica";b:0;s:13:"query_comment";s:0:"";s:10:"query_tags";a:0:{}}}s:12:"exposed_form";a:2:{s:4:"type";s:5:"basic";s:7:"options";a:7:{s:13:"submit_button";s:13:"Apply Filters";s:12:"reset_button";b:0;s:18:"reset_button_label";s:5:"Reset";s:19:"exposed_sorts_label";s:7:"Sort by";s:17:"expose_sort_order";b:0;s:14:"sort_asc_label";s:3:"Asc";s:15:"sort_desc_label";s:4:"Desc";}}s:5:"pager";a:2:{s:4:"type";s:4:"mini";s:7:"options";a:6:{s:14:"items_per_page";i:25;s:6:"offset";i:0;s:2:"id";i:0;s:11:"total_pages";N;s:6:"expose";a:7:{s:14:"items_per_page";b:0;s:20:"items_per_page_label";s:14:"Items per page";s:22:"items_per_page_options";s:13:"5, 10, 25, 50";s:26:"items_per_page_options_all";b:0;s:32:"items_per_page_options_all_label";s:7:"- All -";s:6:"offset";b:0;s:12:"offset_label";s:6:"Offset";}s:4:"tags";a:2:{s:8:"previous";s:6:"‹‹";s:4:"next";s:6:"››";}}}s:5:"style";a:2:{s:4:"type";s:7:"default";s:7:"options";a:3:{s:8:"grouping";a:0:{}s:9:"row_class";s:59:"media-library-item js-media-library-item js-click-to-select";s:17:"default_row_class";b:1;}}s:3:"row";a:2:{s:4:"type";s:6:"fields";s:7:"options";a:4:{s:22:"default_field_elements";b:1;s:6:"inline";a:0:{}s:9:"separator";s:0:"";s:10:"hide_empty";b:0;}}s:6:"fields";a:2:{s:15:"media_bulk_form";a:26:{s:2:"id";s:15:"media_bulk_form";s:5:"table";s:5:"media";s:5:"field";s:15:"media_bulk_form";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"label";s:0:"";s:7:"exclude";b:0;s:5:"alter";a:26:{s:10:"alter_text";b:0;s:4:"text";s:0:"";s:9:"make_link";b:0;s:4:"path";s:0:"";s:8:"absolute";b:0;s:8:"external";b:0;s:14:"replace_spaces";b:0;s:9:"path_case";s:4:"none";s:15:"trim_whitespace";b:0;s:3:"alt";s:0:"";s:3:"rel";s:0:"";s:10:"link_class";s:0:"";s:6:"prefix";s:0:"";s:6:"suffix";s:0:"";s:6:"target";s:0:"";s:5:"nl2br";b:0;s:10:"max_length";i:0;s:13:"word_boundary";b:1;s:8:"ellipsis";b:1;s:9:"more_link";b:0;s:14:"more_link_text";s:0:"";s:14:"more_link_path";s:0:"";s:10:"strip_tags";b:0;s:4:"trim";b:0;s:13:"preserve_tags";s:0:"";s:4:"html";b:0;}s:12:"element_type";s:0:"";s:13:"element_class";s:27:"js-click-to-select-checkbox";s:18:"element_label_type";s:0:"";s:19:"element_label_class";s:0:"";s:19:"element_label_colon";b:0;s:20:"element_wrapper_type";s:0:"";s:21:"element_wrapper_class";s:0:"";s:23:"element_default_classes";b:1;s:5:"empty";s:0:"";s:10:"hide_empty";b:0;s:10:"empty_zero";b:0;s:16:"hide_alter_empty";b:1;s:12:"action_title";s:6:"Action";s:15:"include_exclude";s:7:"exclude";s:16:"selected_actions";a:0:{}s:11:"entity_type";s:5:"media";s:9:"plugin_id";s:9:"bulk_form";}s:15:"rendered_entity";a:24:{s:2:"id";s:15:"rendered_entity";s:5:"table";s:5:"media";s:5:"field";s:15:"rendered_entity";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"label";s:0:"";s:7:"exclude";b:0;s:5:"alter";a:26:{s:10:"alter_text";b:0;s:4:"text";s:0:"";s:9:"make_link";b:0;s:4:"path";s:0:"";s:8:"absolute";b:0;s:8:"external";b:0;s:14:"replace_spaces";b:0;s:9:"path_case";s:4:"none";s:15:"trim_whitespace";b:0;s:3:"alt";s:0:"";s:3:"rel";s:0:"";s:10:"link_class";s:0:"";s:6:"prefix";s:0:"";s:6:"suffix";s:0:"";s:6:"target";s:0:"";s:5:"nl2br";b:0;s:10:"max_length";i:0;s:13:"word_boundary";b:1;s:8:"ellipsis";b:1;s:9:"more_link";b:0;s:14:"more_link_text";s:0:"";s:14:"more_link_path";s:0:"";s:10:"strip_tags";b:0;s:4:"trim";b:0;s:13:"preserve_tags";s:0:"";s:4:"html";b:0;}s:12:"element_type";s:0:"";s:13:"element_class";s:27:"media-library-item__content";s:18:"element_label_type";s:0:"";s:19:"element_label_class";s:0:"";s:19:"element_label_colon";b:0;s:20:"element_wrapper_type";s:0:"";s:21:"element_wrapper_class";s:0:"";s:23:"element_default_classes";b:1;s:5:"empty";s:0:"";s:10:"hide_empty";b:0;s:10:"empty_zero";b:0;s:16:"hide_alter_empty";b:1;s:9:"view_mode";s:13:"media_library";s:11:"entity_type";s:5:"media";s:9:"plugin_id";s:15:"rendered_entity";}}s:7:"filters";a:3:{s:6:"status";a:16:{s:2:"id";s:6:"status";s:5:"table";s:16:"media_field_data";s:5:"field";s:6:"status";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:8:"operator";s:1:"=";s:5:"value";s:1:"1";s:5:"group";i:1;s:7:"exposed";b:1;s:6:"expose";a:10:{s:11:"operator_id";s:0:"";s:5:"label";s:17:"Publishing status";s:11:"description";N;s:12:"use_operator";b:0;s:8:"operator";s:9:"status_op";s:10:"identifier";s:6:"status";s:8:"required";b:1;s:8:"remember";b:0;s:8:"multiple";b:0;s:14:"remember_roles";a:1:{s:13:"authenticated";s:13:"authenticated";}}s:10:"is_grouped";b:1;s:10:"group_info";a:10:{s:5:"label";s:9:"Published";s:11:"description";s:0:"";s:10:"identifier";s:6:"status";s:8:"optional";b:1;s:6:"widget";s:6:"select";s:8:"multiple";b:0;s:8:"remember";b:0;s:13:"default_group";s:3:"All";s:22:"default_group_multiple";a:0:{}s:11:"group_items";a:2:{i:1;a:3:{s:5:"title";s:9:"Published";s:8:"operator";s:1:"=";s:5:"value";s:1:"1";}i:2;a:3:{s:5:"title";s:11:"Unpublished";s:8:"operator";s:1:"=";s:5:"value";s:1:"0";}}}s:9:"plugin_id";s:7:"boolean";s:11:"entity_type";s:5:"media";s:12:"entity_field";s:6:"status";}s:4:"name";a:16:{s:2:"id";s:4:"name";s:5:"table";s:16:"media_field_data";s:5:"field";s:4:"name";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:8:"operator";s:8:"contains";s:5:"value";s:0:"";s:5:"group";i:1;s:7:"exposed";b:1;s:6:"expose";a:10:{s:11:"operator_id";s:7:"name_op";s:5:"label";s:4:"Name";s:11:"description";s:0:"";s:12:"use_operator";b:0;s:8:"operator";s:7:"name_op";s:10:"identifier";s:4:"name";s:8:"required";b:0;s:8:"remember";b:0;s:8:"multiple";b:0;s:14:"remember_roles";a:3:{s:13:"authenticated";s:13:"authenticated";s:9:"anonymous";s:1:"0";s:13:"administrator";s:1:"0";}}s:10:"is_grouped";b:0;s:10:"group_info";a:10:{s:5:"label";s:0:"";s:11:"description";s:0:"";s:10:"identifier";s:0:"";s:8:"optional";b:1;s:6:"widget";s:6:"select";s:8:"multiple";b:0;s:8:"remember";b:0;s:13:"default_group";s:3:"All";s:22:"default_group_multiple";a:0:{}s:11:"group_items";a:0:{}}s:11:"entity_type";s:5:"media";s:12:"entity_field";s:4:"name";s:9:"plugin_id";s:6:"string";}s:6:"bundle";a:16:{s:2:"id";s:6:"bundle";s:5:"table";s:16:"media_field_data";s:5:"field";s:6:"bundle";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:8:"operator";s:2:"in";s:5:"value";a:0:{}s:5:"group";i:1;s:7:"exposed";b:1;s:6:"expose";a:11:{s:11:"operator_id";s:9:"bundle_op";s:5:"label";s:10:"Media type";s:11:"description";s:0:"";s:12:"use_operator";b:0;s:8:"operator";s:9:"bundle_op";s:10:"identifier";s:4:"type";s:8:"required";b:0;s:8:"remember";b:0;s:8:"multiple";b:0;s:14:"remember_roles";a:3:{s:13:"authenticated";s:13:"authenticated";s:9:"anonymous";s:1:"0";s:13:"administrator";s:1:"0";}s:6:"reduce";b:0;}s:10:"is_grouped";b:0;s:10:"group_info";a:10:{s:5:"label";s:10:"Media type";s:11:"description";N;s:10:"identifier";s:6:"bundle";s:8:"optional";b:1;s:6:"widget";s:6:"select";s:8:"multiple";b:0;s:8:"remember";b:0;s:13:"default_group";s:3:"All";s:22:"default_group_multiple";a:0:{}s:11:"group_items";a:3:{i:1;a:0:{}i:2;a:0:{}i:3;a:0:{}}}s:11:"entity_type";s:5:"media";s:12:"entity_field";s:6:"bundle";s:9:"plugin_id";s:6:"bundle";}}s:5:"sorts";a:3:{s:7:"created";a:13:{s:2:"id";s:7:"created";s:5:"table";s:16:"media_field_data";s:5:"field";s:7:"created";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"order";s:4:"DESC";s:7:"exposed";b:1;s:6:"expose";a:1:{s:5:"label";s:12:"Newest first";}s:11:"granularity";s:6:"second";s:11:"entity_type";s:5:"media";s:12:"entity_field";s:7:"created";s:9:"plugin_id";s:4:"date";}s:4:"name";a:12:{s:2:"id";s:4:"name";s:5:"table";s:16:"media_field_data";s:5:"field";s:4:"name";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"order";s:3:"ASC";s:7:"exposed";b:1;s:6:"expose";a:1:{s:5:"label";s:10:"Name (A-Z)";}s:11:"entity_type";s:5:"media";s:12:"entity_field";s:4:"name";s:9:"plugin_id";s:8:"standard";}s:6:"name_1";a:12:{s:2:"id";s:6:"name_1";s:5:"table";s:16:"media_field_data";s:5:"field";s:4:"name";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"order";s:4:"DESC";s:7:"exposed";b:1;s:6:"expose";a:1:{s:5:"label";s:10:"Name (Z-A)";}s:11:"entity_type";s:5:"media";s:12:"entity_field";s:4:"name";s:9:"plugin_id";s:8:"standard";}}s:5:"title";s:5:"Media";s:6:"header";a:0:{}s:6:"footer";a:0:{}s:5:"empty";a:1:{s:16:"area_text_custom";a:10:{s:2:"id";s:16:"area_text_custom";s:5:"table";s:5:"views";s:5:"field";s:16:"area_text_custom";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"empty";b:1;s:8:"tokenize";b:0;s:7:"content";s:19:"No media available.";s:9:"plugin_id";s:11:"text_custom";}}s:13:"relationships";a:0:{}s:17:"display_extenders";a:0:{}s:8:"use_ajax";b:1;s:9:"css_class";s:40:"media-library-view js-media-library-view";}s:14:"cache_metadata";a:3:{s:7:"max-age";i:0;s:8:"contexts";a:5:{i:0;s:28:"languages:language_interface";i:1;s:3:"url";i:2;s:14:"url.query_args";i:3;s:22:"url.query_args:sort_by";i:4;s:16:"user.permissions";}s:4:"tags";a:5:{i:0;s:51:"config:core.entity_view_display.media.audio.default";i:1;s:50:"config:core.entity_view_display.media.file.default";i:2;s:51:"config:core.entity_view_display.media.image.default";i:3;s:58:"config:core.entity_view_display.media.remote_video.default";i:4;s:51:"config:core.entity_view_display.media.video.default";}}}s:4:"page";a:6:{s:14:"display_plugin";s:4:"page";s:2:"id";s:4:"page";s:13:"display_title";s:4:"Page";s:8:"position";i:1;s:15:"display_options";a:3:{s:17:"display_extenders";a:0:{}s:4:"path";s:19:"admin/content/media";s:4:"menu";a:8:{s:4:"type";s:3:"tab";s:5:"title";s:5:"Media";s:11:"description";s:49:"Allows users to browse and administer media items";s:8:"expanded";b:0;s:6:"parent";s:20:"system.admin_content";s:6:"weight";i:5;s:7:"context";s:1:"0";s:9:"menu_name";s:5:"admin";}}s:14:"cache_metadata";a:3:{s:7:"max-age";i:0;s:8:"contexts";a:5:{i:0;s:28:"languages:language_interface";i:1;s:3:"url";i:2;s:14:"url.query_args";i:3;s:22:"url.query_args:sort_by";i:4;s:16:"user.permissions";}s:4:"tags";a:5:{i:0;s:51:"config:core.entity_view_display.media.audio.default";i:1;s:50:"config:core.entity_view_display.media.file.default";i:2;s:51:"config:core.entity_view_display.media.image.default";i:3;s:58:"config:core.entity_view_display.media.remote_video.default";i:4;s:51:"config:core.entity_view_display.media.video.default";}}}s:6:"widget";a:6:{s:14:"display_plugin";s:4:"page";s:2:"id";s:6:"widget";s:13:"display_title";s:6:"Widget";s:8:"position";i:2;s:15:"display_options";a:6:{s:17:"display_extenders";a:0:{}s:4:"path";s:26:"admin/content/media-widget";s:6:"fields";a:2:{s:15:"rendered_entity";a:24:{s:2:"id";s:15:"rendered_entity";s:5:"table";s:5:"media";s:5:"field";s:15:"rendered_entity";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"label";s:0:"";s:7:"exclude";b:0;s:5:"alter";a:26:{s:10:"alter_text";b:0;s:4:"text";s:0:"";s:9:"make_link";b:0;s:4:"path";s:0:"";s:8:"absolute";b:0;s:8:"external";b:0;s:14:"replace_spaces";b:0;s:9:"path_case";s:4:"none";s:15:"trim_whitespace";b:0;s:3:"alt";s:0:"";s:3:"rel";s:0:"";s:10:"link_class";s:0:"";s:6:"prefix";s:0:"";s:6:"suffix";s:0:"";s:6:"target";s:0:"";s:5:"nl2br";b:0;s:10:"max_length";i:0;s:13:"word_boundary";b:1;s:8:"ellipsis";b:1;s:9:"more_link";b:0;s:14:"more_link_text";s:0:"";s:14:"more_link_path";s:0:"";s:10:"strip_tags";b:0;s:4:"trim";b:0;s:13:"preserve_tags";s:0:"";s:4:"html";b:0;}s:12:"element_type";s:0:"";s:13:"element_class";s:27:"media-library-item__content";s:18:"element_label_type";s:0:"";s:19:"element_label_class";s:0:"";s:19:"element_label_colon";b:0;s:20:"element_wrapper_type";s:0:"";s:21:"element_wrapper_class";s:0:"";s:23:"element_default_classes";b:1;s:5:"empty";s:0:"";s:10:"hide_empty";b:0;s:10:"empty_zero";b:0;s:16:"hide_alter_empty";b:1;s:9:"view_mode";s:13:"media_library";s:11:"entity_type";s:5:"media";s:9:"plugin_id";s:15:"rendered_entity";}s:25:"media_library_select_form";a:23:{s:2:"id";s:25:"media_library_select_form";s:5:"table";s:5:"media";s:5:"field";s:25:"media_library_select_form";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"label";s:0:"";s:7:"exclude";b:0;s:5:"alter";a:26:{s:10:"alter_text";b:0;s:4:"text";s:0:"";s:9:"make_link";b:0;s:4:"path";s:0:"";s:8:"absolute";b:0;s:8:"external";b:0;s:14:"replace_spaces";b:0;s:9:"path_case";s:4:"none";s:15:"trim_whitespace";b:0;s:3:"alt";s:0:"";s:3:"rel";s:0:"";s:10:"link_class";s:0:"";s:6:"prefix";s:0:"";s:6:"suffix";s:0:"";s:6:"target";s:0:"";s:5:"nl2br";b:0;s:10:"max_length";i:0;s:13:"word_boundary";b:1;s:8:"ellipsis";b:1;s:9:"more_link";b:0;s:14:"more_link_text";s:0:"";s:14:"more_link_path";s:0:"";s:10:"strip_tags";b:0;s:4:"trim";b:0;s:13:"preserve_tags";s:0:"";s:4:"html";b:0;}s:12:"element_type";s:0:"";s:13:"element_class";s:0:"";s:18:"element_label_type";s:0:"";s:19:"element_label_class";s:0:"";s:19:"element_label_colon";b:0;s:20:"element_wrapper_type";s:0:"";s:21:"element_wrapper_class";s:27:"js-click-to-select-checkbox";s:23:"element_default_classes";b:1;s:5:"empty";s:0:"";s:10:"hide_empty";b:0;s:10:"empty_zero";b:0;s:16:"hide_alter_empty";b:1;s:11:"entity_type";s:5:"media";s:9:"plugin_id";s:25:"media_library_select_form";}}s:8:"defaults";a:2:{s:6:"fields";b:0;s:6:"access";b:0;}s:19:"display_description";s:0:"";s:6:"access";a:2:{s:4:"type";s:4:"perm";s:7:"options";a:1:{s:4:"perm";s:10:"view media";}}}s:14:"cache_metadata";a:3:{s:7:"max-age";i:-1;s:8:"contexts";a:5:{i:0;s:28:"languages:language_interface";i:1;s:3:"url";i:2;s:14:"url.query_args";i:3;s:22:"url.query_args:sort_by";i:4;s:16:"user.permissions";}s:4:"tags";a:5:{i:0;s:51:"config:core.entity_view_display.media.audio.default";i:1;s:50:"config:core.entity_view_display.media.file.default";i:2;s:51:"config:core.entity_view_display.media.image.default";i:3;s:58:"config:core.entity_view_display.media.remote_video.default";i:4;s:51:"config:core.entity_view_display.media.video.default";}}}}}',
+  ))
+  ->execute();
+
+
+// Insert media library key_value entries.
+$connection->insert('key_value')
+  ->fields(array(
+    'collection',
+    'name',
+    'value',
+  ))
+  ->values(array(
+    'collection' => 'config.entity.key_store.view',
+    'name' => 'uuid:3bc9cf0f-cb66-4dbe-8d7e-862cb85e5932',
+    'value' => 'a:1:{i:0;s:24:"views.view.media_library";}',
+  ))
   ->execute();
diff --git a/core/modules/media_library/tests/fixtures/update/drupal-8.media_library-update-view-table-display-2981044.php b/core/modules/media_library/tests/fixtures/update/drupal-8.media_library-update-view-table-display-2981044.php
new file mode 100644
index 0000000000..c115449755
--- /dev/null
+++ b/core/modules/media_library/tests/fixtures/update/drupal-8.media_library-update-view-table-display-2981044.php
@@ -0,0 +1,111 @@
+<?php
+// @codingStandardsIgnoreFile
+/**
+ * @file
+ * Contains database additions to drupal-8.bare.standard.php.gz for testing
+ * the upgrade paths of the media library module view.
+ *
+ * @see https://www.drupal.org/project/drupal/issues/2981044
+ */
+
+use Drupal\Core\Database\Database;
+
+$connection = Database::getConnection();
+
+// Set the schema version.
+$connection->merge('key_value')
+  ->fields([
+    'value' => 'i:8000;',
+    'name' => 'media_library',
+    'collection' => 'system.schema',
+  ])
+  ->condition('collection', 'system.schema')
+  ->condition('name', 'media_library')
+  ->execute();
+
+// Update core.extension.
+$extensions = $connection->select('config')
+  ->fields('config', ['data'])
+  ->condition('collection', '')
+  ->condition('name', 'core.extension')
+  ->execute()
+  ->fetchField();
+$extensions = unserialize($extensions);
+$extensions['module']['media_library'] = 0;
+$connection->update('config')
+  ->fields([
+    'data' => serialize($extensions),
+    'collection' => '',
+    'name' => 'core.extension',
+  ])
+  ->condition('collection', '')
+  ->condition('name', 'core.extension')
+  ->execute();
+
+// Insert media library config objects.
+$connection->insert('config')
+->fields(array(
+  'collection',
+  'name',
+  'data',
+))
+->values(array(
+  'collection' => '',
+  'name' => 'core.entity_form_display.media.file.media_library',
+  'data' => 'a:11:{s:4:"uuid";s:36:"86ab9619-c970-4416-971d-e5c8614b3368";s:8:"langcode";s:2:"en";s:6:"status";b:1;s:12:"dependencies";a:1:{s:6:"config";a:3:{i:0;s:41:"core.entity_form_mode.media.media_library";i:1;s:39:"field.field.media.file.field_media_file";i:2;s:15:"media.type.file";}}s:5:"_core";a:1:{s:19:"default_config_hash";s:43:"RFmywOcuem167havmD4VLgBTO1Swq9hyA-_f5aYTi8c";}s:2:"id";s:24:"media.file.media_library";s:16:"targetEntityType";s:5:"media";s:6:"bundle";s:4:"file";s:4:"mode";s:13:"media_library";s:7:"content";a:1:{s:4:"name";a:5:{s:4:"type";s:16:"string_textfield";s:6:"weight";i:0;s:6:"region";s:7:"content";s:8:"settings";a:2:{s:4:"size";i:60;s:11:"placeholder";s:0:"";}s:20:"third_party_settings";a:0:{}}}s:6:"hidden";a:5:{s:7:"created";b:1;s:16:"field_media_file";b:1;s:4:"path";b:1;s:6:"status";b:1;s:3:"uid";b:1;}}',
+))
+->values(array(
+  'collection' => '',
+  'name' => 'core.entity_form_display.media.image.media_library',
+  'data' => 'a:11:{s:4:"uuid";s:36:"2bbea060-3cd8-4881-a3aa-c898d6619b16";s:8:"langcode";s:2:"en";s:6:"status";b:1;s:12:"dependencies";a:2:{s:6:"config";a:4:{i:0;s:41:"core.entity_form_mode.media.media_library";i:1;s:41:"field.field.media.image.field_media_image";i:2;s:21:"image.style.thumbnail";i:3;s:16:"media.type.image";}s:6:"module";a:1:{i:0;s:5:"image";}}s:5:"_core";a:1:{s:19:"default_config_hash";s:43:"PlyfyVZfALLkP7nbxLpaVKIDUWRioZghWpFDv0_rJ68";}s:2:"id";s:25:"media.image.media_library";s:16:"targetEntityType";s:5:"media";s:6:"bundle";s:5:"image";s:4:"mode";s:13:"media_library";s:7:"content";a:2:{s:17:"field_media_image";a:5:{s:4:"type";s:11:"image_image";s:6:"weight";i:1;s:6:"region";s:7:"content";s:8:"settings";a:2:{s:18:"progress_indicator";s:8:"throbber";s:19:"preview_image_style";s:9:"thumbnail";}s:20:"third_party_settings";a:0:{}}s:4:"name";a:5:{s:4:"type";s:16:"string_textfield";s:6:"weight";i:0;s:6:"region";s:7:"content";s:8:"settings";a:2:{s:4:"size";i:60;s:11:"placeholder";s:0:"";}s:20:"third_party_settings";a:0:{}}}s:6:"hidden";a:4:{s:7:"created";b:1;s:4:"path";b:1;s:6:"status";b:1;s:3:"uid";b:1;}}',
+))
+->values(array(
+  'collection' => '',
+  'name' => 'core.entity_view_display.media.file.media_library',
+  'data' => 'a:11:{s:4:"uuid";s:36:"67e6d857-8ecb-49f5-95e1-6b1c4306c31f";s:8:"langcode";s:2:"en";s:6:"status";b:1;s:12:"dependencies";a:2:{s:6:"config";a:4:{i:0;s:41:"core.entity_view_mode.media.media_library";i:1;s:39:"field.field.media.file.field_media_file";i:2;s:21:"image.style.thumbnail";i:3;s:15:"media.type.file";}s:6:"module";a:1:{i:0;s:5:"image";}}s:5:"_core";a:1:{s:19:"default_config_hash";s:43:"vhAK2lCOWK2paUpJawj7yiSLFO9wwsx6WE8_oDmvbwU";}s:2:"id";s:24:"media.file.media_library";s:16:"targetEntityType";s:5:"media";s:6:"bundle";s:4:"file";s:4:"mode";s:13:"media_library";s:7:"content";a:1:{s:9:"thumbnail";a:6:{s:4:"type";s:5:"image";s:6:"weight";i:0;s:6:"region";s:7:"content";s:5:"label";s:6:"hidden";s:8:"settings";a:2:{s:11:"image_style";s:9:"thumbnail";s:10:"image_link";s:0:"";}s:20:"third_party_settings";a:0:{}}}s:6:"hidden";a:4:{s:7:"created";b:1;s:16:"field_media_file";b:1;s:4:"name";b:1;s:3:"uid";b:1;}}',
+))
+->values(array(
+  'collection' => '',
+  'name' => 'core.entity_view_display.media.image.media_library',
+  'data' => 'a:11:{s:4:"uuid";s:36:"277ca98b-2ada-4251-ad69-aa73e72d60fe";s:8:"langcode";s:2:"en";s:6:"status";b:1;s:12:"dependencies";a:2:{s:6:"config";a:4:{i:0;s:41:"core.entity_view_mode.media.media_library";i:1;s:41:"field.field.media.image.field_media_image";i:2;s:18:"image.style.medium";i:3;s:16:"media.type.image";}s:6:"module";a:1:{i:0;s:5:"image";}}s:5:"_core";a:1:{s:19:"default_config_hash";s:43:"PaGXvzRcL9eII--JV4eCVfObjrNo0l-u1dB_WJtB9ig";}s:2:"id";s:25:"media.image.media_library";s:16:"targetEntityType";s:5:"media";s:6:"bundle";s:5:"image";s:4:"mode";s:13:"media_library";s:7:"content";a:1:{s:9:"thumbnail";a:6:{s:4:"type";s:5:"image";s:6:"weight";i:0;s:6:"region";s:7:"content";s:5:"label";s:6:"hidden";s:8:"settings";a:2:{s:11:"image_style";s:6:"medium";s:10:"image_link";s:0:"";}s:20:"third_party_settings";a:0:{}}}s:6:"hidden";a:4:{s:7:"created";b:1;s:17:"field_media_image";b:1;s:4:"name";b:1;s:3:"uid";b:1;}}',
+))
+->values(array(
+  'collection' => '',
+  'name' => 'core.entity_view_mode.media.media_library',
+  'data' => 'a:9:{s:4:"uuid";s:36:"20b2f1f7-a864-4d41-a15f-32f66789f73d";s:8:"langcode";s:2:"en";s:6:"status";b:1;s:12:"dependencies";a:2:{s:8:"enforced";a:1:{s:6:"module";a:1:{i:0;s:13:"media_library";}}s:6:"module";a:1:{i:0;s:5:"media";}}s:5:"_core";a:1:{s:19:"default_config_hash";s:43:"pkq0uj-IoqEQRBOP_ddUDV0ZJ-dKQ_fLcppsEDF2UO8";}s:2:"id";s:19:"media.media_library";s:5:"label";s:13:"Media library";s:16:"targetEntityType";s:5:"media";s:5:"cache";b:1;}',
+))
+->values(array(
+  'collection' => '',
+  'name' => 'views.view.media_library',
+  'data' => 'a:14:{s:4:"uuid";s:36:"3bc9cf0f-cb66-4dbe-8d7e-862cb85e5932";s:8:"langcode";s:2:"en";s:6:"status";b:1;s:12:"dependencies";a:3:{s:6:"config";a:1:{i:0;s:41:"core.entity_view_mode.media.media_library";}s:8:"enforced";a:1:{s:6:"module";a:1:{i:0;s:13:"media_library";}}s:6:"module";a:3:{i:0;s:5:"media";i:1;s:13:"media_library";i:2;s:4:"user";}}s:5:"_core";a:1:{s:19:"default_config_hash";s:43:"1F1cSZ5MlvxdwjdyrwnH2I8CWngOp8Pu2SXDzix2QUc";}s:2:"id";s:13:"media_library";s:5:"label";s:13:"Media library";s:6:"module";s:5:"views";s:11:"description";s:0:"";s:3:"tag";s:0:"";s:10:"base_table";s:16:"media_field_data";s:10:"base_field";s:3:"mid";s:4:"core";s:3:"8.x";s:7:"display";a:3:{s:7:"default";a:6:{s:14:"display_plugin";s:7:"default";s:2:"id";s:7:"default";s:13:"display_title";s:6:"Master";s:8:"position";i:0;s:15:"display_options";a:18:{s:6:"access";a:2:{s:4:"type";s:4:"perm";s:7:"options";a:1:{s:4:"perm";s:21:"access media overview";}}s:5:"cache";a:2:{s:4:"type";s:3:"tag";s:7:"options";a:0:{}}s:5:"query";a:2:{s:4:"type";s:11:"views_query";s:7:"options";a:5:{s:19:"disable_sql_rewrite";b:0;s:8:"distinct";b:0;s:7:"replica";b:0;s:13:"query_comment";s:0:"";s:10:"query_tags";a:0:{}}}s:12:"exposed_form";a:2:{s:4:"type";s:5:"basic";s:7:"options";a:7:{s:13:"submit_button";s:13:"Apply Filters";s:12:"reset_button";b:0;s:18:"reset_button_label";s:5:"Reset";s:19:"exposed_sorts_label";s:7:"Sort by";s:17:"expose_sort_order";b:0;s:14:"sort_asc_label";s:3:"Asc";s:15:"sort_desc_label";s:4:"Desc";}}s:5:"pager";a:2:{s:4:"type";s:4:"mini";s:7:"options";a:6:{s:14:"items_per_page";i:25;s:6:"offset";i:0;s:2:"id";i:0;s:11:"total_pages";N;s:6:"expose";a:7:{s:14:"items_per_page";b:0;s:20:"items_per_page_label";s:14:"Items per page";s:22:"items_per_page_options";s:13:"5, 10, 25, 50";s:26:"items_per_page_options_all";b:0;s:32:"items_per_page_options_all_label";s:7:"- All -";s:6:"offset";b:0;s:12:"offset_label";s:6:"Offset";}s:4:"tags";a:2:{s:8:"previous";s:6:"‹‹";s:4:"next";s:6:"››";}}}s:5:"style";a:2:{s:4:"type";s:7:"default";s:7:"options";a:3:{s:8:"grouping";a:0:{}s:9:"row_class";s:59:"media-library-item js-media-library-item js-click-to-select";s:17:"default_row_class";b:1;}}s:3:"row";a:2:{s:4:"type";s:6:"fields";s:7:"options";a:4:{s:22:"default_field_elements";b:1;s:6:"inline";a:0:{}s:9:"separator";s:0:"";s:10:"hide_empty";b:0;}}s:6:"fields";a:2:{s:15:"media_bulk_form";a:26:{s:2:"id";s:15:"media_bulk_form";s:5:"table";s:5:"media";s:5:"field";s:15:"media_bulk_form";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"label";s:0:"";s:7:"exclude";b:0;s:5:"alter";a:26:{s:10:"alter_text";b:0;s:4:"text";s:0:"";s:9:"make_link";b:0;s:4:"path";s:0:"";s:8:"absolute";b:0;s:8:"external";b:0;s:14:"replace_spaces";b:0;s:9:"path_case";s:4:"none";s:15:"trim_whitespace";b:0;s:3:"alt";s:0:"";s:3:"rel";s:0:"";s:10:"link_class";s:0:"";s:6:"prefix";s:0:"";s:6:"suffix";s:0:"";s:6:"target";s:0:"";s:5:"nl2br";b:0;s:10:"max_length";i:0;s:13:"word_boundary";b:1;s:8:"ellipsis";b:1;s:9:"more_link";b:0;s:14:"more_link_text";s:0:"";s:14:"more_link_path";s:0:"";s:10:"strip_tags";b:0;s:4:"trim";b:0;s:13:"preserve_tags";s:0:"";s:4:"html";b:0;}s:12:"element_type";s:0:"";s:13:"element_class";s:27:"js-click-to-select-checkbox";s:18:"element_label_type";s:0:"";s:19:"element_label_class";s:0:"";s:19:"element_label_colon";b:0;s:20:"element_wrapper_type";s:0:"";s:21:"element_wrapper_class";s:0:"";s:23:"element_default_classes";b:1;s:5:"empty";s:0:"";s:10:"hide_empty";b:0;s:10:"empty_zero";b:0;s:16:"hide_alter_empty";b:1;s:12:"action_title";s:6:"Action";s:15:"include_exclude";s:7:"exclude";s:16:"selected_actions";a:0:{}s:11:"entity_type";s:5:"media";s:9:"plugin_id";s:9:"bulk_form";}s:15:"rendered_entity";a:24:{s:2:"id";s:15:"rendered_entity";s:5:"table";s:5:"media";s:5:"field";s:15:"rendered_entity";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"label";s:0:"";s:7:"exclude";b:0;s:5:"alter";a:26:{s:10:"alter_text";b:0;s:4:"text";s:0:"";s:9:"make_link";b:0;s:4:"path";s:0:"";s:8:"absolute";b:0;s:8:"external";b:0;s:14:"replace_spaces";b:0;s:9:"path_case";s:4:"none";s:15:"trim_whitespace";b:0;s:3:"alt";s:0:"";s:3:"rel";s:0:"";s:10:"link_class";s:0:"";s:6:"prefix";s:0:"";s:6:"suffix";s:0:"";s:6:"target";s:0:"";s:5:"nl2br";b:0;s:10:"max_length";i:0;s:13:"word_boundary";b:1;s:8:"ellipsis";b:1;s:9:"more_link";b:0;s:14:"more_link_text";s:0:"";s:14:"more_link_path";s:0:"";s:10:"strip_tags";b:0;s:4:"trim";b:0;s:13:"preserve_tags";s:0:"";s:4:"html";b:0;}s:12:"element_type";s:0:"";s:13:"element_class";s:27:"media-library-item__content";s:18:"element_label_type";s:0:"";s:19:"element_label_class";s:0:"";s:19:"element_label_colon";b:0;s:20:"element_wrapper_type";s:0:"";s:21:"element_wrapper_class";s:0:"";s:23:"element_default_classes";b:1;s:5:"empty";s:0:"";s:10:"hide_empty";b:0;s:10:"empty_zero";b:0;s:16:"hide_alter_empty";b:1;s:9:"view_mode";s:13:"media_library";s:11:"entity_type";s:5:"media";s:9:"plugin_id";s:15:"rendered_entity";}}s:7:"filters";a:3:{s:6:"status";a:16:{s:2:"id";s:6:"status";s:5:"table";s:16:"media_field_data";s:5:"field";s:6:"status";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:8:"operator";s:1:"=";s:5:"value";s:1:"1";s:5:"group";i:1;s:7:"exposed";b:1;s:6:"expose";a:10:{s:11:"operator_id";s:0:"";s:5:"label";s:17:"Publishing status";s:11:"description";N;s:12:"use_operator";b:0;s:8:"operator";s:9:"status_op";s:10:"identifier";s:6:"status";s:8:"required";b:1;s:8:"remember";b:0;s:8:"multiple";b:0;s:14:"remember_roles";a:1:{s:13:"authenticated";s:13:"authenticated";}}s:10:"is_grouped";b:1;s:10:"group_info";a:10:{s:5:"label";s:9:"Published";s:11:"description";s:0:"";s:10:"identifier";s:6:"status";s:8:"optional";b:1;s:6:"widget";s:6:"select";s:8:"multiple";b:0;s:8:"remember";b:0;s:13:"default_group";s:3:"All";s:22:"default_group_multiple";a:0:{}s:11:"group_items";a:2:{i:1;a:3:{s:5:"title";s:9:"Published";s:8:"operator";s:1:"=";s:5:"value";s:1:"1";}i:2;a:3:{s:5:"title";s:11:"Unpublished";s:8:"operator";s:1:"=";s:5:"value";s:1:"0";}}}s:9:"plugin_id";s:7:"boolean";s:11:"entity_type";s:5:"media";s:12:"entity_field";s:6:"status";}s:4:"name";a:16:{s:2:"id";s:4:"name";s:5:"table";s:16:"media_field_data";s:5:"field";s:4:"name";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:8:"operator";s:8:"contains";s:5:"value";s:0:"";s:5:"group";i:1;s:7:"exposed";b:1;s:6:"expose";a:10:{s:11:"operator_id";s:7:"name_op";s:5:"label";s:4:"Name";s:11:"description";s:0:"";s:12:"use_operator";b:0;s:8:"operator";s:7:"name_op";s:10:"identifier";s:4:"name";s:8:"required";b:0;s:8:"remember";b:0;s:8:"multiple";b:0;s:14:"remember_roles";a:3:{s:13:"authenticated";s:13:"authenticated";s:9:"anonymous";s:1:"0";s:13:"administrator";s:1:"0";}}s:10:"is_grouped";b:0;s:10:"group_info";a:10:{s:5:"label";s:0:"";s:11:"description";s:0:"";s:10:"identifier";s:0:"";s:8:"optional";b:1;s:6:"widget";s:6:"select";s:8:"multiple";b:0;s:8:"remember";b:0;s:13:"default_group";s:3:"All";s:22:"default_group_multiple";a:0:{}s:11:"group_items";a:0:{}}s:11:"entity_type";s:5:"media";s:12:"entity_field";s:4:"name";s:9:"plugin_id";s:6:"string";}s:6:"bundle";a:16:{s:2:"id";s:6:"bundle";s:5:"table";s:16:"media_field_data";s:5:"field";s:6:"bundle";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:8:"operator";s:2:"in";s:5:"value";a:0:{}s:5:"group";i:1;s:7:"exposed";b:1;s:6:"expose";a:11:{s:11:"operator_id";s:9:"bundle_op";s:5:"label";s:10:"Media type";s:11:"description";s:0:"";s:12:"use_operator";b:0;s:8:"operator";s:9:"bundle_op";s:10:"identifier";s:4:"type";s:8:"required";b:0;s:8:"remember";b:0;s:8:"multiple";b:0;s:14:"remember_roles";a:3:{s:13:"authenticated";s:13:"authenticated";s:9:"anonymous";s:1:"0";s:13:"administrator";s:1:"0";}s:6:"reduce";b:0;}s:10:"is_grouped";b:0;s:10:"group_info";a:10:{s:5:"label";s:10:"Media type";s:11:"description";N;s:10:"identifier";s:6:"bundle";s:8:"optional";b:1;s:6:"widget";s:6:"select";s:8:"multiple";b:0;s:8:"remember";b:0;s:13:"default_group";s:3:"All";s:22:"default_group_multiple";a:0:{}s:11:"group_items";a:3:{i:1;a:0:{}i:2;a:0:{}i:3;a:0:{}}}s:11:"entity_type";s:5:"media";s:12:"entity_field";s:6:"bundle";s:9:"plugin_id";s:6:"bundle";}}s:5:"sorts";a:3:{s:7:"created";a:13:{s:2:"id";s:7:"created";s:5:"table";s:16:"media_field_data";s:5:"field";s:7:"created";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"order";s:4:"DESC";s:7:"exposed";b:1;s:6:"expose";a:1:{s:5:"label";s:12:"Newest first";}s:11:"granularity";s:6:"second";s:11:"entity_type";s:5:"media";s:12:"entity_field";s:7:"created";s:9:"plugin_id";s:4:"date";}s:4:"name";a:12:{s:2:"id";s:4:"name";s:5:"table";s:16:"media_field_data";s:5:"field";s:4:"name";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"order";s:3:"ASC";s:7:"exposed";b:1;s:6:"expose";a:1:{s:5:"label";s:10:"Name (A-Z)";}s:11:"entity_type";s:5:"media";s:12:"entity_field";s:4:"name";s:9:"plugin_id";s:8:"standard";}s:6:"name_1";a:12:{s:2:"id";s:6:"name_1";s:5:"table";s:16:"media_field_data";s:5:"field";s:4:"name";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"order";s:4:"DESC";s:7:"exposed";b:1;s:6:"expose";a:1:{s:5:"label";s:10:"Name (Z-A)";}s:11:"entity_type";s:5:"media";s:12:"entity_field";s:4:"name";s:9:"plugin_id";s:8:"standard";}}s:5:"title";s:5:"Media";s:6:"header";a:0:{}s:6:"footer";a:0:{}s:5:"empty";a:1:{s:16:"area_text_custom";a:10:{s:2:"id";s:16:"area_text_custom";s:5:"table";s:5:"views";s:5:"field";s:16:"area_text_custom";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"empty";b:1;s:8:"tokenize";b:0;s:7:"content";s:19:"No media available.";s:9:"plugin_id";s:11:"text_custom";}}s:13:"relationships";a:0:{}s:17:"display_extenders";a:0:{}s:8:"use_ajax";b:1;s:9:"css_class";s:40:"media-library-view js-media-library-view";}s:14:"cache_metadata";a:3:{s:7:"max-age";i:0;s:8:"contexts";a:5:{i:0;s:28:"languages:language_interface";i:1;s:3:"url";i:2;s:14:"url.query_args";i:3;s:22:"url.query_args:sort_by";i:4;s:16:"user.permissions";}s:4:"tags";a:5:{i:0;s:51:"config:core.entity_view_display.media.audio.default";i:1;s:50:"config:core.entity_view_display.media.file.default";i:2;s:51:"config:core.entity_view_display.media.image.default";i:3;s:58:"config:core.entity_view_display.media.remote_video.default";i:4;s:51:"config:core.entity_view_display.media.video.default";}}}s:4:"page";a:6:{s:14:"display_plugin";s:4:"page";s:2:"id";s:4:"page";s:13:"display_title";s:4:"Page";s:8:"position";i:1;s:15:"display_options";a:3:{s:17:"display_extenders";a:0:{}s:4:"path";s:19:"admin/content/media";s:4:"menu";a:8:{s:4:"type";s:3:"tab";s:5:"title";s:5:"Media";s:11:"description";s:49:"Allows users to browse and administer media items";s:8:"expanded";b:0;s:6:"parent";s:20:"system.admin_content";s:6:"weight";i:5;s:7:"context";s:1:"0";s:9:"menu_name";s:5:"admin";}}s:14:"cache_metadata";a:3:{s:7:"max-age";i:0;s:8:"contexts";a:5:{i:0;s:28:"languages:language_interface";i:1;s:3:"url";i:2;s:14:"url.query_args";i:3;s:22:"url.query_args:sort_by";i:4;s:16:"user.permissions";}s:4:"tags";a:5:{i:0;s:51:"config:core.entity_view_display.media.audio.default";i:1;s:50:"config:core.entity_view_display.media.file.default";i:2;s:51:"config:core.entity_view_display.media.image.default";i:3;s:58:"config:core.entity_view_display.media.remote_video.default";i:4;s:51:"config:core.entity_view_display.media.video.default";}}}s:6:"widget";a:6:{s:14:"display_plugin";s:4:"page";s:2:"id";s:6:"widget";s:13:"display_title";s:6:"Widget";s:8:"position";i:2;s:15:"display_options";a:6:{s:17:"display_extenders";a:0:{}s:4:"path";s:26:"admin/content/media-widget";s:6:"fields";a:2:{s:15:"rendered_entity";a:24:{s:2:"id";s:15:"rendered_entity";s:5:"table";s:5:"media";s:5:"field";s:15:"rendered_entity";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"label";s:0:"";s:7:"exclude";b:0;s:5:"alter";a:26:{s:10:"alter_text";b:0;s:4:"text";s:0:"";s:9:"make_link";b:0;s:4:"path";s:0:"";s:8:"absolute";b:0;s:8:"external";b:0;s:14:"replace_spaces";b:0;s:9:"path_case";s:4:"none";s:15:"trim_whitespace";b:0;s:3:"alt";s:0:"";s:3:"rel";s:0:"";s:10:"link_class";s:0:"";s:6:"prefix";s:0:"";s:6:"suffix";s:0:"";s:6:"target";s:0:"";s:5:"nl2br";b:0;s:10:"max_length";i:0;s:13:"word_boundary";b:1;s:8:"ellipsis";b:1;s:9:"more_link";b:0;s:14:"more_link_text";s:0:"";s:14:"more_link_path";s:0:"";s:10:"strip_tags";b:0;s:4:"trim";b:0;s:13:"preserve_tags";s:0:"";s:4:"html";b:0;}s:12:"element_type";s:0:"";s:13:"element_class";s:27:"media-library-item__content";s:18:"element_label_type";s:0:"";s:19:"element_label_class";s:0:"";s:19:"element_label_colon";b:0;s:20:"element_wrapper_type";s:0:"";s:21:"element_wrapper_class";s:0:"";s:23:"element_default_classes";b:1;s:5:"empty";s:0:"";s:10:"hide_empty";b:0;s:10:"empty_zero";b:0;s:16:"hide_alter_empty";b:1;s:9:"view_mode";s:13:"media_library";s:11:"entity_type";s:5:"media";s:9:"plugin_id";s:15:"rendered_entity";}s:25:"media_library_select_form";a:23:{s:2:"id";s:25:"media_library_select_form";s:5:"table";s:5:"media";s:5:"field";s:25:"media_library_select_form";s:12:"relationship";s:4:"none";s:10:"group_type";s:5:"group";s:11:"admin_label";s:0:"";s:5:"label";s:0:"";s:7:"exclude";b:0;s:5:"alter";a:26:{s:10:"alter_text";b:0;s:4:"text";s:0:"";s:9:"make_link";b:0;s:4:"path";s:0:"";s:8:"absolute";b:0;s:8:"external";b:0;s:14:"replace_spaces";b:0;s:9:"path_case";s:4:"none";s:15:"trim_whitespace";b:0;s:3:"alt";s:0:"";s:3:"rel";s:0:"";s:10:"link_class";s:0:"";s:6:"prefix";s:0:"";s:6:"suffix";s:0:"";s:6:"target";s:0:"";s:5:"nl2br";b:0;s:10:"max_length";i:0;s:13:"word_boundary";b:1;s:8:"ellipsis";b:1;s:9:"more_link";b:0;s:14:"more_link_text";s:0:"";s:14:"more_link_path";s:0:"";s:10:"strip_tags";b:0;s:4:"trim";b:0;s:13:"preserve_tags";s:0:"";s:4:"html";b:0;}s:12:"element_type";s:0:"";s:13:"element_class";s:0:"";s:18:"element_label_type";s:0:"";s:19:"element_label_class";s:0:"";s:19:"element_label_colon";b:0;s:20:"element_wrapper_type";s:0:"";s:21:"element_wrapper_class";s:27:"js-click-to-select-checkbox";s:23:"element_default_classes";b:1;s:5:"empty";s:0:"";s:10:"hide_empty";b:0;s:10:"empty_zero";b:0;s:16:"hide_alter_empty";b:1;s:11:"entity_type";s:5:"media";s:9:"plugin_id";s:25:"media_library_select_form";}}s:8:"defaults";a:2:{s:6:"fields";b:0;s:6:"access";b:0;}s:19:"display_description";s:0:"";s:6:"access";a:2:{s:4:"type";s:4:"perm";s:7:"options";a:1:{s:4:"perm";s:10:"view media";}}}s:14:"cache_metadata";a:3:{s:7:"max-age";i:-1;s:8:"contexts";a:5:{i:0;s:28:"languages:language_interface";i:1;s:3:"url";i:2;s:14:"url.query_args";i:3;s:22:"url.query_args:sort_by";i:4;s:16:"user.permissions";}s:4:"tags";a:5:{i:0;s:51:"config:core.entity_view_display.media.audio.default";i:1;s:50:"config:core.entity_view_display.media.file.default";i:2;s:51:"config:core.entity_view_display.media.image.default";i:3;s:58:"config:core.entity_view_display.media.remote_video.default";i:4;s:51:"config:core.entity_view_display.media.video.default";}}}}}',
+))
+->execute();
+
+// Insert media library key_value entries.
+$connection->insert('key_value')
+->fields(array(
+  'collection',
+  'name',
+  'value',
+))
+->values(array(
+  'collection' => 'config.entity.key_store.entity_view_display',
+  'name' => 'uuid:67e6d857-8ecb-49f5-95e1-6b1c4306c31f',
+  'value' => 'a:1:{i:0;s:49:"core.entity_view_display.media.file.media_library";}',
+))
+->values(array(
+  'collection' => 'config.entity.key_store.entity_view_display',
+  'name' => 'uuid:277ca98b-2ada-4251-ad69-aa73e72d60fe',
+  'value' => 'a:1:{i:0;s:50:"core.entity_view_display.media.image.media_library";}',
+))
+->values(array(
+  'collection' => 'config.entity.key_store.entity_view_mode',
+  'name' => 'uuid:20b2f1f7-a864-4d41-a15f-32f66789f73d',
+  'value' => 'a:1:{i:0;s:41:"core.entity_view_mode.media.media_library";}',
+))
+->values(array(
+  'collection' => 'config.entity.key_store.view',
+  'name' => 'uuid:3bc9cf0f-cb66-4dbe-8d7e-862cb85e5932',
+  'value' => 'a:1:{i:0;s:24:"views.view.media_library";}',
+))
+->execute();
diff --git a/core/modules/media_library/tests/src/Functional/Update/MediaLibraryUpdateViewTableDisplayTest.php b/core/modules/media_library/tests/src/Functional/Update/MediaLibraryUpdateViewTableDisplayTest.php
new file mode 100644
index 0000000000..861b610a7f
--- /dev/null
+++ b/core/modules/media_library/tests/src/Functional/Update/MediaLibraryUpdateViewTableDisplayTest.php
@@ -0,0 +1,161 @@
+<?php
+
+namespace Drupal\Tests\media_library\Functional\Update;
+
+use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\views\Views;
+
+/**
+ * Tests the media library module updates for the view table display.
+ *
+ * @group media_library
+ * @group legacy
+ */
+class MediaLibraryUpdateViewTableDisplayTest extends UpdatePathTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.4.0.bare.standard.php.gz',
+      __DIR__ . '/../../../../../media/tests/fixtures/update/drupal-8.4.0-media_installed.php',
+      __DIR__ . '/../../../fixtures/update/drupal-8.media_library-update-view-table-display-2981044.php',
+    ];
+  }
+
+  /**
+   * Tests the widget_table display is added to the views config.
+   *
+   * @see media_library_post_update_table_display()
+   */
+  public function testMediaLibraryViewTableDisplay() {
+    $grid_prefix = 'display.widget';
+    $table_prefix = 'display.widget_table';
+
+    $config = $this->config('views.view.media_library');
+    $this->assertNull($config->get("$grid_prefix.display_options.defaults.css_class"));
+    $this->assertNull($config->get("$grid_prefix.display_options.css_class"));
+    $this->assertNull($config->get($table_prefix));
+
+    $this->runUpdates();
+
+    $config = $this->config('views.view.media_library');
+
+    // Assert the CSS classes are updated for the widget display.
+    $this->assertFalse($config->get("$grid_prefix.display_options.defaults.css_class"));
+    $this->assertSame('media-library-view js-media-library-view media-library-view--widget', $config->get("$grid_prefix.display_options.css_class"));
+    $this->assertSame('media-library-item media-library-item--grid js-media-library-item js-click-to-select', $config->get('display.default.display_options.style.options.row_class'));
+
+    // Assert the widget_table display was added correctly.
+    $this->assertSame('table', $config->get("$table_prefix.display_options.style.type"));
+    $this->assertSame('media-library-item media-library-item--table js-media-library-item js-click-to-select', $config->get("$table_prefix.display_options.style.options.row_class"));
+    $this->assertSame('fields', $config->get("$table_prefix.display_options.row.type"));
+    $this->assertSame(['media_library_select_form', 'thumbnail__target_id', 'name', 'uid', 'changed'], array_keys($config->get("$table_prefix.display_options.fields")));
+
+    // Assert the CSS classes are added to the widget_table display.
+    $this->assertFalse($config->get("$table_prefix.display_options.defaults.css_class"));
+    $this->assertSame('media-library-view js-media-library-view media-library-view--widget', $config->get("$table_prefix.display_options.css_class"));
+
+    // Assert all display options are set correctly on the widget_table display.
+    $this->assertSame($config->get("$grid_prefix.display_options.filters"), $config->get("$table_prefix.display_options.filters"));
+    $this->assertSame($config->get("$grid_prefix.display_options.access"), $config->get("$table_prefix.display_options.access"));
+    $this->assertSame($config->get("$grid_prefix.display_options.sorts"), $config->get("$table_prefix.display_options.sorts"));
+    $this->assertSame($config->get("$grid_prefix.display_options.pager"), $config->get("$table_prefix.display_options.pager"));
+    $this->assertSame($config->get("$grid_prefix.display_options.arguments"), $config->get("$table_prefix.display_options.arguments"));
+
+    // Assert the display links are added to the widget and widget_table
+    // displays.
+    $this->assertSame('display_link', $config->get("$grid_prefix.display_options.header.display_link_grid.plugin_id"));
+    $this->assertSame('display_link', $config->get("$grid_prefix.display_options.header.display_link_table.plugin_id"));
+    $this->assertSame('display_link', $config->get("$table_prefix.display_options.header.display_link_grid.plugin_id"));
+    $this->assertSame('display_link', $config->get("$table_prefix.display_options.header.display_link_table.plugin_id"));
+    $this->assertSame('widget', $config->get("$grid_prefix.display_options.header.display_link_grid.display_id"));
+    $this->assertSame('widget_table', $config->get("$grid_prefix.display_options.header.display_link_table.display_id"));
+    $this->assertSame('widget', $config->get("$table_prefix.display_options.header.display_link_grid.display_id"));
+    $this->assertSame('widget_table', $config->get("$table_prefix.display_options.header.display_link_table.display_id"));
+  }
+
+  /**
+   * Tests the views config update when the widget display is overridden.
+   *
+   * @see media_library_post_update_table_display()
+   */
+  public function testMediaLibraryChangedViewTableDisplay() {
+    $grid_prefix = 'display.widget';
+    $table_prefix = 'display.widget_table';
+
+    $view = Views::getView('media_library');
+
+    // The existing 'widget' display could have been overridden. The 'widget'
+    // and 'widget_table' displays need to have the same display options, so we
+    // need to verify the overridden settings are correctly set when creating
+    // the 'widget_table' display.
+    $view->setDisplay('widget');
+    $grid_display = $view->getDisplay('widget');
+
+    // Change the filters, sorts and pager for the widget display.
+    $grid_display->overrideOption('filters', [
+      'uid' => [
+        'id' => 'uid',
+        'table' => 'media_field_data',
+        'field' => 'uid',
+        'relationship' => 'none',
+        'operator' => '=',
+        'exposed' => TRUE,
+      ],
+    ]);
+    $grid_display->overrideOption('sorts', [
+      'name' => [
+        'id' => 'name',
+        'table' => 'media_field_data',
+        'field' => 'name',
+        'relationship' => 'none',
+        'order' => 'ASC',
+      ],
+    ]);
+    $grid_display->overrideOption('pager', [
+      'type' => 'full',
+      'options' => ['items_per_page' => 10],
+    ]);
+    $view->save();
+
+    $this->runUpdates();
+
+    $config = $this->config('views.view.media_library');
+
+    // Assert the CSS classes are updated for the widget display.
+    $this->assertFalse($config->get("$grid_prefix.display_options.defaults.css_class"));
+    $this->assertSame('media-library-view js-media-library-view media-library-view--widget', $config->get("$grid_prefix.display_options.css_class"));
+    $this->assertSame('media-library-item media-library-item--grid js-media-library-item js-click-to-select', $config->get('display.default.display_options.style.options.row_class'));
+
+    // Assert the widget_table display was added correctly.
+    $this->assertSame('table', $config->get("$table_prefix.display_options.style.type"));
+    $this->assertSame('media-library-item media-library-item--table js-media-library-item js-click-to-select', $config->get("$table_prefix.display_options.style.options.row_class"));
+    $this->assertSame('fields', $config->get("$table_prefix.display_options.row.type"));
+    $this->assertSame(['media_library_select_form', 'thumbnail__target_id', 'name', 'uid', 'changed'], array_keys($config->get("$table_prefix.display_options.fields")));
+
+    // Assert the CSS classes are added to the widget_table display.
+    $this->assertFalse($config->get("$table_prefix.display_options.defaults.css_class"));
+    $this->assertSame('media-library-view js-media-library-view media-library-view--widget', $config->get("$table_prefix.display_options.css_class"));
+
+    // Assert all display options are set correctly on the widget_table display.
+    $this->assertSame($config->get("$grid_prefix.display_options.filters"), $config->get("$table_prefix.display_options.filters"));
+    $this->assertSame($config->get("$grid_prefix.display_options.access"), $config->get("$table_prefix.display_options.access"));
+    $this->assertSame($config->get("$grid_prefix.display_options.sorts"), $config->get("$table_prefix.display_options.sorts"));
+    $this->assertSame($config->get("$grid_prefix.display_options.pager"), $config->get("$table_prefix.display_options.pager"));
+    $this->assertSame($config->get("$grid_prefix.display_options.arguments"), $config->get("$table_prefix.display_options.arguments"));
+
+    // Assert the display links are added to the widget and widget_table
+    // displays.
+    $this->assertSame('display_link', $config->get("$grid_prefix.display_options.header.display_link_grid.plugin_id"));
+    $this->assertSame('display_link', $config->get("$grid_prefix.display_options.header.display_link_table.plugin_id"));
+    $this->assertSame('display_link', $config->get("$table_prefix.display_options.header.display_link_grid.plugin_id"));
+    $this->assertSame('display_link', $config->get("$table_prefix.display_options.header.display_link_table.plugin_id"));
+    $this->assertSame('widget', $config->get("$grid_prefix.display_options.header.display_link_grid.display_id"));
+    $this->assertSame('widget_table', $config->get("$grid_prefix.display_options.header.display_link_table.display_id"));
+    $this->assertSame('widget', $config->get("$table_prefix.display_options.header.display_link_grid.display_id"));
+    $this->assertSame('widget_table', $config->get("$table_prefix.display_options.header.display_link_table.display_id"));
+  }
+
+}
diff --git a/core/modules/media_library/tests/src/Functional/Update/MediaLibraryUpdateWidgetViewTest.php b/core/modules/media_library/tests/src/Functional/Update/MediaLibraryUpdateWidgetViewTest.php
index eeb31e0cc9..0e51aea4dc 100644
--- a/core/modules/media_library/tests/src/Functional/Update/MediaLibraryUpdateWidgetViewTest.php
+++ b/core/modules/media_library/tests/src/Functional/Update/MediaLibraryUpdateWidgetViewTest.php
@@ -26,7 +26,7 @@ protected function setDatabaseDumpFiles() {
   /**
    * Tests that the media library view config is updated.
    *
-   * @see media_library_update_8700()
+   * @see media_library_update_8702()
    */
   public function testMediaLibraryViewsConfig() {
     $config = $this->config('views.view.media_library');
diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php
index 1bec4b4cc0..eded7c347b 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php
@@ -208,7 +208,6 @@ public function testWidget() {
     $assert_session->pageTextContains('Media library');
     $this->assertFalse($assert_session->elementExists('css', '.media-library-select-all')->isVisible());
     $page->find('css', '.ui-dialog-titlebar-close')->click();
-    $assert_session->assertWaitOnAjaxRequest();
 
     // Assert that the media type menu is available when more than 1 type is
     // configured for the field.
@@ -220,7 +219,6 @@ public function testWidget() {
     $assert_session->elementExists('named', ['link', 'Type Three'], $menu);
     $assert_session->elementNotExists('named', ['link', 'Type Four'], $menu);
     $page->find('css', '.ui-dialog-titlebar-close')->click();
-    $assert_session->assertWaitOnAjaxRequest();
 
     // Assert that the media type menu is not available when only 1 type is
     // configured for the field.
@@ -235,7 +233,6 @@ public function testWidget() {
     $assert_session->elementTextContains('css', '.media-library-selected-count', '1 of 1 item selected');
     $assert_session->elementNotExists('css', '.media-library-menu');
     $page->find('css', '.ui-dialog-titlebar-close')->click();
-    $assert_session->assertWaitOnAjaxRequest();
 
     // Assert the menu links can be sorted through the widget configuration.
     $assert_session->elementExists('css', '.media-library-open-button[href*="field_twin_media"]')->click();
@@ -266,7 +263,6 @@ public function testWidget() {
     }, $page->findAll('css', '.media-library-menu a'));
     $this->assertSame($link_titles, ['Type One (active tab)', 'Type Three', 'Type Four', 'Type Two']);
     $page->find('css', '.ui-dialog-titlebar-close')->click();
-    $assert_session->assertWaitOnAjaxRequest();
 
     // Assert media is only visible on the tab for the related media type.
     $assert_session->elementExists('css', '.media-library-open-button[href*="field_unlimited_media"]')->click();
@@ -281,7 +277,6 @@ public function testWidget() {
     $assert_session->pageTextNotContains('Bear');
     $assert_session->pageTextNotContains('Turtle');
     $page->find('css', '.ui-dialog-titlebar-close')->click();
-    $assert_session->assertWaitOnAjaxRequest();
 
     // Assert the exposed name filter of the view.
     $assert_session->elementExists('css', '.media-library-open-button[href*="field_unlimited_media"]')->click();
@@ -298,6 +293,63 @@ public function testWidget() {
     $assert_session->pageTextContains('Dog');
     $assert_session->pageTextContains('Bear');
     $page->find('css', '.ui-dialog-titlebar-close')->click();
+
+    // Assert the media library contains header links to switch between the grid
+    // and table display.
+    $assert_session->elementExists('css', '.media-library-open-button[href*="field_unlimited_media"]')->click();
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->elementExists('css', '.media-library-view .media-library-item--grid');
+    $assert_session->elementNotExists('css', '.media-library-view .media-library-item--table');
+    $button_pane = $assert_session->elementExists('css', '.ui-dialog-buttonpane');
+    // Assert the 'Apply filter' button is not moved to the button pane.
+    $assert_session->buttonExists('Select media', $button_pane);
+    $assert_session->buttonNotExists('Apply filters', $button_pane);
+    $page->hasLink('Grid');
+    $page->clickLink('Table');
+    // Assert the display change is correctly announced for screen readers.
+    $assert_session->waitForText('Loading table view.');
+    $assert_session->waitForText('Changed to table view.');
+    $assert_session->waitForElementVisible('css', '.media-library-view .media-library-item--table');
+    $assert_session->elementNotExists('css', '.media-library-view .media-library-item--grid');
+    // Assert the 'Apply filter' button is not moved to the button pane.
+    $assert_session->buttonExists('Select media', $button_pane);
+    $assert_session->buttonNotExists('Apply filters', $button_pane);
+    $assert_session->pageTextContains('Dog');
+    $assert_session->pageTextContains('Bear');
+    $assert_session->pageTextNotContains('Turtle');
+    // Assert the exposed filters can be applied.
+    $page->fillField('Name', 'Dog');
+    $page->pressButton('Apply Filters');
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->pageTextContains('Dog');
+    $assert_session->pageTextNotContains('Bear');
+    $assert_session->pageTextNotContains('Turtle');
+    $page->checkField('Select Dog');
+    $page->hasLink('Table');
+    $page->clickLink('Grid');
+    // Assert the display change is correctly announced for screen readers.
+    $assert_session->waitForText('Loading grid view.');
+    $assert_session->waitForText('Changed to grid view.');
+    $assert_session->waitForElementVisible('css', '.media-library-view .media-library-item--grid');
+    $assert_session->elementNotExists('css', '.media-library-view .media-library-item--table');
+    // Assert the exposed filters are persisted when changing display.
+    $this->assertSame('Dog', $page->findField('Name')->getValue());
+    $assert_session->pageTextContains('Dog');
+    $assert_session->pageTextNotContains('Bear');
+    $assert_session->pageTextNotContains('Turtle');
+    $page->hasLink('Grid');
+    $page->hasLink('Table');
+    // Select the item.
+    $assert_session->elementExists('css', '.ui-dialog-buttonpane')->pressButton('Select media');
+    $assert_session->assertWaitOnAjaxRequest();
+    // Ensure that the selection completed successfully.
+    $assert_session->pageTextNotContains('Media library');
+    $assert_session->pageTextContains('Dog');
+    $assert_session->pageTextNotContains('Bear');
+    $assert_session->pageTextNotContains('Turtle');
+    // Clear the selection.
+    $assert_session->elementAttributeContains('css', '.media-library-item__remove', 'aria-label', 'Remove Dog');
+    $assert_session->elementExists('css', '.media-library-item__remove')->click();
     $assert_session->assertWaitOnAjaxRequest();
 
     // Assert the selection is persistent in the media library modal, and
@@ -421,7 +473,6 @@ public function testWidget() {
     $this->assertFalse($checkboxes[3]->isChecked());
     // Close the dialog, reopen it and assert not is selected again.
     $page->find('css', '.ui-dialog-titlebar-close')->click();
-    $assert_session->assertWaitOnAjaxRequest();
     $assert_session->elementExists('css', '.media-library-open-button[href*="field_unlimited_media"]')->click();
     $assert_session->assertWaitOnAjaxRequest();
     $checkboxes = $page->findAll('css', '.media-library-view .js-click-to-select-checkbox input');
@@ -430,7 +481,6 @@ public function testWidget() {
     $this->assertFalse($checkboxes[2]->isChecked());
     $this->assertFalse($checkboxes[3]->isChecked());
     $page->find('css', '.ui-dialog-titlebar-close')->click();
-    $assert_session->assertWaitOnAjaxRequest();
 
     // Finally, save the form.
     $assert_session->elementExists('css', '.js-media-library-widget-toggle-weight')->click();
