diff --git a/core/lib/Drupal/Core/Entity/EntityForm.php b/core/lib/Drupal/Core/Entity/EntityForm.php
index 3506218..d45ce7d 100644
--- a/core/lib/Drupal/Core/Entity/EntityForm.php
+++ b/core/lib/Drupal/Core/Entity/EntityForm.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Core\Entity;
 
+use Drupal\Component\Serialization\Json;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\FormStateInterface;
@@ -244,10 +245,15 @@ protected function actions(array $form, FormStateInterface $form_state) {
         '#title' => $this->t('Delete'),
         '#access' => $this->entity->access('delete'),
         '#attributes' => [
-          'class' => ['button', 'button--danger'],
+          'class' => ['button', 'button--danger', 'use-ajax'],
+          'data-dialog-type' => 'modal',
+          'data-dialog-options' => Json::encode(['width' => 'auto'])
         ],
+        '#url' => $route_info,
+      ];
+      $actions['#attached'] = [
+        'library' => ['core/drupal.ajax'],
       ];
-      $actions['delete']['#url'] = $route_info;
     }
 
     return $actions;
diff --git a/core/lib/Drupal/Core/Form/ConfirmFormHelper.php b/core/lib/Drupal/Core/Form/ConfirmFormHelper.php
index fc92ff9..4e93d6c 100644
--- a/core/lib/Drupal/Core/Form/ConfirmFormHelper.php
+++ b/core/lib/Drupal/Core/Form/ConfirmFormHelper.php
@@ -45,7 +45,9 @@ public static function buildCancelLink(ConfirmFormInterface $form, Request $requ
     return [
       '#type' => 'link',
       '#title' => $form->getCancelText(),
-      '#attributes' => ['class' => ['button']],
+      '#attributes' => [
+        'class' => ['button', 'dialog-cancel']
+      ],
       '#url' => $url,
       '#cache' => [
         'contexts' => [
diff --git a/core/modules/media/tests/src/FunctionalJavascript/MediaUiJavascriptTest.php b/core/modules/media/tests/src/FunctionalJavascript/MediaUiJavascriptTest.php
index fb98d90..c57174e 100644
--- a/core/modules/media/tests/src/FunctionalJavascript/MediaUiJavascriptTest.php
+++ b/core/modules/media/tests/src/FunctionalJavascript/MediaUiJavascriptTest.php
@@ -178,8 +178,11 @@ public function testMediaTypes() {
 
     // Tests media type delete form.
     $page->clickLink('Delete');
-    $assert_session->addressEquals('admin/structure/media/manage/' . $this->testMediaType->id() . '/delete');
-    $page->pressButton('Delete');
+    $assert_session->assertWaitOnAjaxRequest();
+    $modal = $assert_session->waitForElementVisible('css', '#drupal-modal');
+    $this->assertTrue($modal->isVisible(), 'Modal window found.');
+    $assert_session->addressEquals('admin/structure/media/manage/' . $this->testMediaType->id());
+    $this->click('.ui-dialog button:contains("' . t('Delete') . '")');
     $assert_session->addressEquals('admin/structure/media');
     $assert_session->pageTextContains('The media type ' . $new_name . ' has been deleted.');
 
@@ -191,8 +194,11 @@ public function testMediaTypes() {
     $media->save();
     $this->drupalGet('admin/structure/media/manage/' . $media_type2->id());
     $page->clickLink('Delete');
-    $assert_session->addressEquals('admin/structure/media/manage/' . $media_type2->id() . '/delete');
-    $assert_session->buttonNotExists('edit-submit');
+    $assert_session->assertWaitOnAjaxRequest();
+    $modal = $assert_session->waitForElementVisible('css', '#drupal-modal');
+    $this->assertTrue($modal->isVisible(), 'Modal window found.');
+    $assert_session->addressEquals('admin/structure/media/manage/' . $media_type2->id());
+    $assert_session->elementNotExists('css', '.ui-dialog button:contains("' . t('Delete') . '")');
     $assert_session->pageTextContains("$label2 is used by 1 media item on your site. You can not remove this media type until you have removed all of the $label2 media items.");
   }
 
